#include <mpi.h>
#include <stdio.h>
main(int argc, char *argv[])
{
char message[1024];
int rank,numnodes;
char node[2];
MPI_Status stat;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
node[0] = rank + '0';
node[1] = '\0';
MPI_Comm_size(MPI_COMM_WORLD, &numnodes);
if (rank == 0)
{
printf("\n\nRunning %d processes.\n\n",numnodes);
strcpy(message,"Hello World from process
0.");
if (numnodes != 0)
{
MPI_Send(message,strlen(message),MPI_CHAR,1,11,MPI_COMM_WORLD);
MPI_Recv(message,1024,MPI_CHAR,numnodes-1,11,MPI_COMM_WORLD,&stat);
}
printf("\n\n%s\n\n",message);
}
else
{
MPI_Recv(message,1024,MPI_CHAR,rank-1,11,MPI_COMM_WORLD,&stat);
strcat(message,"\nHello World from process
");
strcat(message,node);
strcat(message,".");
if (rank < numnodes-1)
MPI_Send(message,strlen(message),MPI_CHAR,rank+1,11,MPI_COMM_WORLD);
else
MPI_Send(message,strlen(message),MPI_CHAR,0,11,MPI_COMM_WORLD);
}
MPI_Finalize();
}
Compile the program with "hcc:
Hello World from process 0.
Hello World from process 1.
Hello World from process 2.
Hello World from process 3.
Written by: David Randall
randaldt@acad.etown.edu
http://www.etown.edu/~randaldt