[Getdp] Parallelization patch for GetDP with PETSc
Davide Rondini
davide.rondini at gmail.com
Wed Jun 3 11:01:11 CEST 2009
Hello,
I developed a patch for GetDP to enable it to work properly with parallel
version of PETSc. Essentially, I removed a couple of deadlocks, and introduced
the check for MatGetOwnershipRange in functions which set the elements of
matrices and vectors. This ensures that everything is assembled the right way
even using mpiaij matrices.
I tested it using some sample tests taken from wiki and I've seen that it
works fine. Accuracy is ok, it is within tolerance set between serial and
parallel runs (also compared with sparsekit version). Performance scale though
number of processors as expected.
Anyway, this is a crude patch, it has 2 disadvantages:
1. The check of competence of an element of the matrix to each processor is
done inside LinAlg functions, which forces all processors to check all
elements of the matrix. This is not efficient, this operation should be made in
the cycle that assemples the matrix, but this is not so simple, it requires to
modify GetDP code in multiple points. I hope to have time to remove this
overhead in the future. It wolud be very helpful if someone can show me where
the code has to be modified.
2. The parallel process works fine up to the calculation phase, while post-
processing has some problems to run in parallel. This is because PETSc do not
allow to access the elements of a vector or matrix which pertain to another
processor. So, performing post operations in serial mode inserts spurious
zeros or nan in the solution, and doing parallel post processing generates
messy output file. Implementing parallel I/O is long and complex, for me it is
sufficient to run resolution and post-operation separately, this way:
mpirun -n X getdp simulation.pro -solve Resolution
mpirun -n 1 getdp simulation.pro -pos PostOperation
this workaround works fine.
I hope this can be helpful.
Regards,
Davide Rondini
-------------- next part --------------
A non-text attachment was scrubbed...
Name: getdp_1.2.1_parallel.patch
Type: text/x-patch
Size: 20119 bytes
Desc: not available
URL: <http://www.geuz.org/pipermail/getdp/attachments/20090603/94295e2d/attachment.patch>