← Back to team overview

ffc team mailing list archive

Re: Patch introducing memory cache

 

On Tuesday August 17 2010 04:06:23 Garth N. Wells wrote:
> On Tue, 2010-08-17 at 09:10 +0200, Anders Logg wrote:
> > Great!
> > 
> > It will be interesting to see what the benchbot says tomorrow.
> 
> The change broke
> 
>     demo/adaptivity/adaptive-poisson/python

Should be fixed with the inclusion of the sent patch.

Johan

> Garth
> 
> > --
> > Anders
> > 
> > On Mon, Aug 16, 2010 at 08:20:35PM -0700, Johan Hake wrote:
> > > Hello!
> > > 
> > > Attached is a patch that introduce a small memory cache for preprocess
> > > forms.
> > > 
> > > Fixing DOLFIN bug:
> > >   <https://bugs.launchpad.net/dolfin/+bug/612579>
> > > 
> > > Johan
> > > 
> > > # Bazaar merge directive format 2 (Bazaar 0.90)
> > > # revision_id: hake.dev@xxxxxxxxx-20100817031045-q3ruq4t6cv4va0b8
> > > # target_branch: bzr+ssh://bazaar.launchpad.net/~ffc-core/ffc/main/
> > > # testament_sha1: b1b8c7ad15349aa80c014dbab5ecea3934c3eb2f
> > > # timestamp: 2010-08-16 20:13:52 -0700
> > > # base_revision_id: k.b.oelgaard@xxxxxxxxx-20100724151209-\
> > > #   e1egwzz4kq5ksqae
> > > #
> > > # Begin patch
> > > === modified file 'ChangeLog'
> > > --- ChangeLog	2010-07-23 17:22:13 +0000
> > > +++ ChangeLog	2010-08-17 03:10:45 +0000
> > > @@ -1,10 +1,11 @@
> > > + - Added memory cache in jit(), for preprocessed forms
> > > 
> > >   - Added support for Conditional and added demo/Conditional.ufl.
> > >   - Added support for new geometric quantity Circumradius in UFL.
> > >   - Added support for new geometric quantity CellVolume in UFL.
> > >  
> > >  0.9.3 [2010-07-01]
> > >  
> > >   - Make global_dimension for Real return an int instead of double, bug
> > >   # 592088 - Add support for facet normal in 1D.
> > > 
> > > - - Expose -feliminate_zeros for quadrature optimisations to give user
> > > more + - Expose -feliminate_zeros for quadrature optimisations to give
> > > user more
> > > 
> > >     control
> > >   
> > >   - Remove return of form in compile_form
> > >   - Remove object_names argument to compile_element
> > > 
> > > @@ -14,7 +15,7 @@
> > > 
> > >   - Added support for Bubble elements
> > >   - Added support for UFL.SpatialCoordinate.
> > >  
> > >  0.9.2 [2010-02-17]
> > > 
> > > - - Bug fix in removal of unused variables in Piola-mapped terms for
> > > tensor + - Bug fix in removal of unused variables in Piola-mapped
> > > terms for tensor
> > > 
> > >     representation
> > >  
> > >  0.9.1 [2010-02-15]
> > >  
> > >   - Add back support for FErari optimizations
> > > 
> > > === modified file 'ffc/jitcompiler.py'
> > > --- ffc/jitcompiler.py	2010-02-14 22:05:02 +0000
> > > +++ ffc/jitcompiler.py	2010-08-17 03:10:45 +0000
> > > @@ -12,7 +12,7 @@
> > > 
> > >  # Last changed: 2010-02-14
> > >  
> > >  # Python modules
> > > 
> > > -import os
> > > +import os, sys
> > > 
> > >  import instant
> > >  import ufc_utils
> > > 
> > > @@ -42,6 +42,12 @@
> > > 
> > >  # Set debug level for Instant
> > >  instant.set_logging_level("warning")
> > > 
> > > +# Memory cache for preprocessed forms
> > > +_memory_cache = {}
> > > +
> > > +# Counter to prevent memory leak
> > > +_memory_check = 1
> > > +
> > > 
> > >  def jit(object, parameters=None, common_cell=None):
> > >      """Just-in-time compile the given form or element
> > > 
> > > @@ -59,6 +65,7 @@
> > > 
> > >  def jit_form(form, parameters=None, common_cell=None):
> > >      "Just-in-time compile the given form."
> > > 
> > > +    global _memory_check
> > > 
> > >      # Check that we get a Form
> > > 
> > >      if not isinstance(form, Form):
> > > @@ -72,10 +79,28 @@
> > > 
> > >      set_prefix(parameters["log_prefix"])
> > >      
> > >      # Preprocess form
> > > 
> > > -    if form.form_data() is None:
> > > +
> > > +    # First check if form is preprocessed
> > > +    if form.form_data() is not None:
> > > +        preprocessed_form = form
> > > +
> > > +    # Second check memory cache
> > > +    elif _memory_cache.has_key(id(form)):
> > > +        preprocessed_form = _memory_cache[id(form)]
> > > +
> > > +    # Else preprocess form and store in memory cache
> > > 
> > > +    else:
> > >          preprocessed_form = preprocess(form, common_cell=common_cell)
> > > 
> > > -    else:
> > > -        preprocessed_form = form
> > > +        _memory_cache[id(form)] = preprocessed_form
> > > +
> > > +        # For each 10th time the refcount of the cached form are
> > > checked +        # and superflous forms are poped
> > > +        if (_memory_check % 10) == 0:
> > > +            for key, cached_form in _memory_cache.items():
> > > +                if sys.getrefcount(cached_form) < 6:
> > > +                    _memory_cache.pop(key)
> > > +        else:
> > > +            _memory_check += 1
> > > 
> > >      # Wrap input
> > >      jit_object = JITObject(form, preprocessed_form, parameters)
> > > 
> > > # Begin bundle
> > > IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWb3p5ZEAAr//gERUQAB
> > > ab//3
> > > e1fcCr////pQBg3bu91vedUW7w5m10xoOgkkgm1NNU8yGg0U9o0pm1I2TJNAaNDTTRkBKJ
> > > pDEnk0
> > > 0pP0U9QHqeoAADIAAAAlBGpNoqfimiPKZlN6Q1GnqAwmCAAZNAYoFPVPaU8pppp5RptQaA
> > > 9QAAGg
> > > aAaAkiE00ApmI0qeaU8UeTEmgD1ADQAaI0BR1fU/2fw2M3hed9vnZL3vrsGHQvwNIQdsDV
> > > 1OlFhj
> > > UdbJqWrgy4VIAsXcUtdJK7Urm06o12oiBYqCDghLHFjS67YMYvJBEDJafQmhfEJ03a0/Vr
> > > HDPvMv
> > > oVMc98WSSCSEd0uT7j35sNOs2QQ+tbhmKWxOdU7J+a9k00javNFPB86Sf2lPre4gUW+pPF
> > > kfR7NO
> > > B/NGtSRFomRdxMW27WnMcm6X3NKuErMMIeQPGNIlKKaeDVj4tvT9sWKV0RBkHf4nrd39XP
> > > bOD2K+
> > > H8vb1YfK7dbOTqjZDtZfwZnnMreC6NKmVWU9ivbMdNdtoF+V3MHMhWIJ8ji7SDqLzE5ZYV
> > > EN0gMG
> > > ScdO/cwLMXUyEzvLd8B5EZfC4Ck3LBQJ1kgeGAkioKNSYVwm0BU1FgEia0DKqEg7bTSDws
> > > pEABKs
> > > NwPEjGcvhZSYCWF/ThpMxy9KuyBhqy412EDkReBUcG0CbvRwTpWS5TM0VJmZt5EffPIVbV
> > > Q1VBM8
> > > 8YIUHZwSO/FLkq3PGUFdw4ccVhYYnM1ihliW74kGwHdkDkZQMiXHhbXvETUjziP5A13Twt
> > > e11ojw
> > > kikFeZwvNCI4CNanwzflXjmRLw3IuCB7luA/0CkSlSDJllbJMh8wVobki/PE2JYGhWgrOG
> > > 3qOmOL
> > > zSWlGmQUXKuCpJHcQLD476uoSoOA1k6IV6DsMZFhoGVwXLu3Ey0ZyxuRlHAWZLzaXQ4GaP
> > > 2YUiak
> > > Zk33pmScmoFCOuzYa3FSh4MTe2mcSq1xuGc5SepDaCLWAK4nGJEIqnfCXAzsQGCmSS0TuB
> > > Bj9TtF
> > > rwMUDjxqMlwqKL8Xor/qToRJiX5bl7mfJBoK/WIX3oYY2odwZGC8fRutuvtiucroPuO2mU
> > > DbGKtW
> > > Z+BrI7S3UHRy6Z3iXXRB58VIQ496PShXpDvxoMFOD0maK7eHKWZEBgSfFEanuvv6qTsCkk
> > > qOXJcS
> > > 4ckuDXD3YvbraFQRqHaCmhilrqMxvZMhjn1PnI9o12yKcCaqvjvhSL4Yg6wQzFTckLPthy
> > > LzQCAX
> > > skww9a3hrzjM2zJ0DslWG0ZI6wuRv581M5QY09pgn1QTJ8zuTci7Rfwk+lh9gyMkm15oQH
> > > SDKbm8
> > > mxoXAwONrc67C4q3t9Rsl5eMhPVKRYwHdZdm3ZySHJOEjPiuXfbdga7mI1j549LQ9zjSHy
> > > y5R3DO
> > > eLCU1RW5MmBUwVZtMOUnhCXZrYyTYUQWCojpUpo6DU3VjbDO2Yxsyr0V22uLy7issWHXxg
> > > FamGZt
> > > 6duYlYG30hn0BkJIhCL44shBrNli8CtgHkGkULtU/tcFCMyKREEUWaKypIv3CpYs3katCG
> > > j3VZ8/
> > > h6FoQtgqHqRp6rovVzIhfPVlh8nou+MpL0I8w0wbaHk8mvYdhrxDJUAzhGj9OtHR7vRUVZ
> > > 5IXcGZ
> > > kjKAd/jUK4b0kKnTVrE36/hA+u/L1AsQTM1ELvdY4GQtBGEQ96n7FWAgrmpToiT1no82RU
> > > iseEGH
> > > Q4zq3z66vOcbK20GSRYgGMN+vEI384gTgTjK4ULLLWJKIX71NmtCmo3chZI4M6ETIIgwww
> > > ic42nR
> > > o58mVcWnswwOoV6PSOk3q5bVyF8Y2wFtti4gTA8Fou5UmqWuh/yTLsTez7ZIrhMIM1r04s
> > > 6W5Bl3
> > > xVsm7qIQ8wK4vDqk7fcAwI4e1k7b8Kpm0qp3XUnXXPkpBYybJcGxPqsQ5aG+lvFXoOcHsR
> > > mNiOZP
> > > lUzTvcY8wIc0g0Td2yTuZDwdbEWWPaZpuWiUS5alC2NG188/bgrri0DojdLtArMEGYFUo4
> > > ymmR4+ Si5ceuSLwN7phwUTwXDSi5V+xY/9/4u5IpwoSF708siA
> > > 
> > > _______________________________________________
> > > Mailing list: https://launchpad.net/~ffc
> > > Post to     : ffc@xxxxxxxxxxxxxxxxxxx
> > > Unsubscribe : https://launchpad.net/~ffc
> > > More help   : https://help.launchpad.net/ListHelp
> > 
> > _______________________________________________
> > Mailing list: https://launchpad.net/~ffc
> > Post to     : ffc@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~ffc
> > More help   : https://help.launchpad.net/ListHelp



References