← Back to team overview

dolfin team mailing list archive

Re: Parallelization

 

jesperc wrote:
Hi,

I'm taking a summer course in parallel programming and want to parallelize something in Dolfin as a small project for the course. How much is currently sucessfully parallelized in the code when for example solving the Poisson equation? I know that some of you are working with the parallel implementation of the assembly, but what is the status there?
Would it be possible for me to make some contribution?

Yes, definitely. Here's what we have now:

1. Mesh partitioning works:

    uint n = 16;
    MeshFunction<uint> partitions;
    mesh.partition(n, partitions);

This returns a MeshFunction which labels all the cells of the mesh with the number of the partition to which they belong.

2. Garth has implemented a working (last time I checked) prototype of a parallel assembler in src/sandbox/passembly/main.cpp.

3. It should be relatively easy to extend the current assembler in src/kernel/fem/Assembler.cpp to do parallel assembly. It currently knows how to assemble over subdomains (defined by some MeshFunctions) and the parallel assembly would be similar: skip the cells (if (.. != ... ) continue;) that don't belong to the current processor.

4. The first thing we need is to be able to communicate Mesh and MeshFunction between processes. There is a sketch in src/kernel/mesh/MPIMeshCommunicator.cpp (empty). One process reads the mesh, partitions it and sends it to all processes. (To begin with, each process will have a copy of the mesh.)

5. The tricky part will be how to order degrees of freedom (class DofMap). And this relates to ongoing work on merging the linear algebra interfaces of DOLFIN and PyCC (Simula in-house code). We need to find a design that works well for communicating both with PETSc and Epetra (Trilinos).

I'm sure Garth and Martin will have further opinions.

/Anders



Follow ups

References