On Tue, Aug 18, 2009 at 10:01:49PM +0200, DOLFIN wrote: > changeset: 6793:4ec31c652fb02c15906df9b243ac8a95ab17993d > parent: 6779:ef3291872c9d92c7937b1808b392cfb00006a0e2 > user: Anders Logg <l...@simula.no> > date: Tue Aug 18 21:58:16 2009 +0200 > files: site-packages/dolfin/jit.py > description: > Wrap JIT compilation and use barrier to compile first on process 0, > then use results from cache on other processes. Only implemented for > forms, not other objects.
This changes the way JIT compilation is handled in parallel (after a discussion with Hake earlier today). We now let the first process compile first while the others wait. Then the other processes call the JIT compiler and may then reuse the compiled form from cache since it's already been compiled by the first process. Much better than what we had before. I've only implemented it for JIT compilation of forms, not other objects (like Functions). Johan, could you take a look at this? I imagine we could put the code from jit.jit into some utility function, something like which could be reused in both places: def jit_wrap(jit, *args): # Just call foo when running in serial if MPI.num_processes() == 1: return jit(*args): # Compile first on process 0 if MPI.process_number() == 0: info("Calling JIT compiler on first process.") output = jit(*args) MPI.barrier() # Then compile on all other processes (which may then just read the cache) if not MPI.process_number() == 0: info("JIT compilation done on first process, reusing from cache.") output = jit(*args) return output -- Anders
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev