instant team mailing list archive
-
instant team
-
Mailing list archive
-
Message #00272
Re: Timing of in-memory cache
On Sat, Sep 06, 2008 at 02:29:21PM +0200, Martin Sandve Alnæs wrote:
> 2008/9/6 Anders Logg <logg@xxxxxxxxx>:
> > On Fri, Sep 05, 2008 at 10:50:37AM +0200, Martin Sandve Alnæs wrote:
> >> I've added a test that times the cache mechanism, using
> >> a signature object that sleeps for a second in sig.signature()
> >> and half a second in sig.__hash__().
> >> It's called test18.py. Seems to me that the cache works fine.
> >
> > I can't get it to work, but maybe I'm using it wrong.
> >
> > I'm running the bench/fem/jit/ test script in DOLFIN with the current
> > version of FFC (just pushed) and I always get the following:
> >
> > --- Calling FFC JIT compiler ---
> > 1. Module returned by import_module: None
> > 2. Calling FFC just-in-time (JIT) compiler, this may take some time... done
> > 3. Creating Python extension (compiling and linking), this may take some time... done
> > Assembling matrix over cells (finished).
> >
> > In step (1), Instant always returns None when calling import_module().
> > I assume this means that the module was not found, neither in the
> > in-memory cache nor disk cache.
> >
> > Since it returns None, FFC generates code in step (2). This takes a
> > second or two.
> >
> > Then in step (3), FFC sends the generated code to build_module(). This
> > goes surprisingly fast, so it seem Instant must return something from
> > cache.
> >
> > So, something strange is going on, both in step (1) and (3). Here's
> > the code for FFC's jit() which is now very short:
> >
> > # Check options
> > options = check_options(input_form, options)
> >
> > # Wrap input
> > jit_object = wrap(input_form, options)
> >
> > # Check cache
> > module = instant.import_module(jit_object)
> > print "Module returned by import_module: ", module
> >
> > # Compile form
> > debug("Calling FFC just-in-time (JIT) compiler, this may take some time...", -1)
> > signature = jit_object.signature()
> > compile(input_form, signature, options)
> > debug("done", -1)
> >
> > # Wrap code into a Python module using Instant
> > debug("Creating Python extension (compiling and linking), this may take some time...", -1)
> > filename = signature + ".h"
> > (cppargs, path, ufc_include) = extract_instant_flags(options)
> > module = instant.build_module(wrap_headers=[filename],
> > additional_declarations=ufc_include,
> > include_dirs=path,
> > cppargs=cppargs,
> > signature=signature)
> > debug("done", -1)
> >
> > # Extract form
> > exec("compiled_form = module.%s()" % signature)
> >
> > Can you spot something wrong?
> >
>
> No... I'll try to run it.
Thanks.
> Btw:
>
> > # Extract form
> > exec("compiled_form = module.%s()" % signature)
>
> This is clearer:
>
> compiled_form = getattr(module, signature)()
ok, I didn't know that was possible.
--
Anders
Attachment:
signature.asc
Description: Digital signature
Follow ups
References