Grid users interested in MPI are encouraged to use OpenMPI because it has a native, tight integration with GridEngine.
Hello, World
Here is a simple "Hello, World" MPI application:
main(int argc, char **argv) { int node; int i, j; float f; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &node); printf("Hello World from Node %d.\n", node); for (j=0; j<=100000; j++) for(i=0; i<=100000; i++) f=i*2.718281828*i+i+i*3.141592654; MPI_Finalize(); }
OpenMPI provides a compiler wrapper script for compiling MPI applications. Be sure to compile on a 64-bit linux machine if you intend to use the grid.
% mpicc -o mpihello mpihello.c
GridEngine requires that you run this from a script:
% cat hello mpirun ~/myproject/mpihello
Let's run four instances:
% qsub -pe orte 4 hello Your job 102 ("hello") has been submitted
Qstat will only show you one job when you use a parallel environment. Give it the -t option to see all the slave tasks:
% qstat -t job-ID prior name user state submit/start at queue master ------------------------------------------------------------------------- 102 0.56000 hello jsb r 12/09/2010 10:47:16 short.q@ang23 MASTER short.q@ang23 SLAVE 102 0.56000 hello jsb r 12/09/2010 10:47:16 short.q@ang39 SLAVE 102 0.56000 hello jsb r 12/09/2010 10:47:16 short.q@ang22 SLAVE 102 0.56000 hello jsb r 12/09/2010 10:47:16 short.q@ang24 SLAVE
The standard output and error from all slave tasks is accumulated in the job output files:
% cat hello.po102 Hello World from Node 0. Hello World from Node 3. Hello World from Node 2. Hello World from Node 1.