Step 3 of 7: MPI Sample Programs

The following example has been provided as a reference for beginning MPI programmers. Reading through and executing these programs should be helpful as you begin to write your own code. Note that you can download the code by clicking on this link.

#include "mpi.h"
#include <stdio.h>
#include <math.h>

#define MAXSIZE 1000

int add(int *A, int low, int high)
{
int res, i;

for(i=low; i<high; i++)
res += A[i];

return(res);
}

void main(argc,argv)
int argc;
char *argv[];
{
int done = 0, n, myid, numprocs;
int data[MAXSIZE], i, low, high, myres, res;
char fn[255];
char *fp;

MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);

n = 0;
while (!done)
{
if (myid == 0)
{
if (n==0) n=100; else n=0;

strcpy(fn,getenv("HOME"));
strcat(fn,"/MPI/rand_data.txt");

/* Open Input File and Initialize Data */
if ((fp = fopen(fn,"r")) == NULL)
{
printf("Can't open the input file: %s\n\n", fn);
exit(1);
}

for(i=0; i<MAXSIZE; i++)
fscanf(fp,"%d", &data[i]);
}

MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
MPI_Bcast(data, MAXSIZE, MPI_INT, 0, MPI_COMM_WORLD);
if (n == 0)
done = 1;
else
{
low = myid * 100;
high = low + 100;

myres = add(data, low, high);
printf("I got %d from %d\n", myres, myid);
MPI_Reduce(&myres, &res, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (myid == 0)
printf("The sum is %d.\n", res);
}
}
MPI_Finalize(); 
}