A
roundtrip
Here is a simple MPI-exercises to get
you going. You may use C or
Fortran.
We would like to send a message (an
integer) to a set of
processes. The master process sets the integer to zero after which the
master sends the integer to the first worker/slave (in rank
order). The work process adds one to the integer and sends it on to the
next worker etc. The last worker sends the number back to the master,
who prints the number (the number of slaves, in other word).
To run in parallel you can use any of the five remote-machines,
remote1.studat.chalmers.se to remote5.studat.chalmers.se. To see the
load on the CPUs, give the unix-command top and type 1 (digit one) with
the mouse in the top
window. If it looks something like this (on a four-CPU machine):
Cpu0 : 18.0% us, 81.6%
sy, 0.3% ni, 0.0% id, 0.0% wa, 0.0% hi,
0.0% si
Cpu1 : 22.0% us, 78.0%
sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi,
0.0% si
Cpu2 : 27.3% us, 72.7%
sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi,
0.0% si
Cpu3 : 99.7% us, 0.3%
sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi,
0.0% si
you do not expect to get good speedups. User time plus system time (us
+ sy) is almost a 100 % on each CPU (the cpus are all 0.0% idle, i.e.
they are busy). The following situation is better but not perfect.
Doing a test on three CPUs should work well.
Cpu0 : 0.3% us,
1.3% sy, 0.0% ni, 98.0% id, 0.3% wa, 0.0% hi,
0.0% si
Cpu1 : 0.0% us,
3.3% sy, 27.5% ni, 69.3% id, 0.0% wa, 0.0% hi, 0.0% si
Cpu2 : 0.3% us,
0.0% sy, 0.0% ni, 99.7% id, 0.0% wa, 0.0% hi,
0.0% si
Cpu3 : 37.1% us, 2.6%
sy, 0.0% ni, 59.9% id, 0.3% wa, 0.0% hi, 0.0% si
You can use LAM to run several processes on your lab-computer,
but the processes will not actually run in parallel (since a
lab-computer has one cpu). It is a convenient way to test your program
though.
