wiki:AnugaParallel

Version 40 (modified by steve, 9 years ago) (diff)

--

INSTALLING anuga_parallel

If you installed anuga and with the ANUGA_PARALLEL environment set via

export ANUGA_PARALLEL="mpich2"

or

export ANUGA_PARALLEL="openmpi"

then you should already have parallel support.

Setting up parallel support

Let's suppose that you initially only set up anuga to run in sequential mode. Then to setup parallel mode you will need to install an MPI environment (mpich2 or openmpi) and the python wrapper pypar.

We will assume you have install anuga from source and the source is in the directory anuga_core

Updating anuga_core

If you had already downloaded anuga_core then it is sensible to update to the most recent version of the code using the subversion update command. Run the following command from the anuga_core directory

svn update

and then

sudo python setup.py install
python runtests.py

This should update an old version to the most recent version.

Install anuga parallel

Now to get the parallel version of anuga to work, we need to install some other packages first, in particular MPI for the parallel message passing and pypar a simple python wrapper of MPI.

MPI

Now you need to install MPI on your system. OPENMPI and MPICH2 are supported by pypar (see below) so both should be ok. But I tend to use mpich2.

So install mpich2 on your system via apt-get

sudo apt-get install mpich2

Make sure mpi works. You should be able to run a program in parallel. Something as simple as

mpirun -np 4 pwd

should produce the output of pwd 4 times.

pypar

We use pypar as the interface between mpi and python. The most recent version of PYPAR is available from http://code.google.com/p/pypar/ Use svn to get the most recent version of the code. The tarred version is a little old.

(There is also an old version on sourceforge, do not use that)

From your home directory run the command

svn checkout http://pypar.googlecode.com/svn/ pypar

This produces a directory pypar

Change to that directory, and then run the command

sudo python setup.py install

This should install pypar.

Fire up python and see if you can import pypar

You should obtain

>>> import pypar
Pypar (version 2.1.4) initialised MPI OK with 1 processors

Also make sure that the pypar examples work.

By the way, I suggest firing up a new console to see if these installations work in a clean console.

Compile anuga parallel code

Actually the parallel code is already in the anuga_core directory. We just need to reinstall anuga.

From the anuga_core directory force a rebuild and reinstall of anuga via

sudo python setup.py build -f
sudo python setup.py install

Running anuga in parallel

You should now be ready to run some parallel anuga code.

python runtests.py

Hopefully that all works. If you are observant you should see that the number of unittests has increased by about 30, those are the parallel tests.

Example program

From the anuga_core/examples/parallel directory: Run run_parallel_sw_merimbula.py

First just run it as a sequential program, via

python run_parallel_sw_merimbula.py

Then try a parallel run using a command like

mpirun -np 4 python run_parallel_sw_merimbula.py

That should run on 4 processors

You should look at the code in run_parallel_sw_merimbula.py

Essentially this a fairly standard anuga script, with the extra command

domain = distribute(domain)

which sets up all the parallel stuff.

Also for efficiency reasons we only setup the original full sequential mesh on processor 0, hence the statement

if myid == 0:
     domain = create_domain_from_file(mesh_filename)
     domain.set_quantity('stage', Set_Stage(x0, x1, 2.0))
else:
     domain = None

The output will be an sww file associated to each processor.

sww_merge

There is a script anuga/utilities/sww_merge.py which provides a function to merge sww files into one sww file for viewing with the anuga viewer.

Suppose your parallel code produced 3 sww files, domain_P3_0.sww domain_P3_1.sww and domain_P3_2.sww

The base name would be "domain" and the number of processors would be 3. To stitch these 3 files together either run sww_merge.py as a script with the command

python /home/******/anuga_core/anuga/utilities/sww_merge.py -f domain -np 3

or you can add a command of the form

domain.sww_merge()

at the end of your simulation script, if you want to keep the individual parallel sww files or

domain.sww_merge(delete_old=True)

(check out the script run_parallel_sw_merimbula.py which demos this) if you are happy for the individual sww files to be deleted after the merge operation.