#include <fork.h>
#include <string.h>
#include "mpi.h"

#define LOC_MAX 10
#define GLOB_MAX 100

#define MATRIX_HEIGHT 8

void main(void) {
  int i,
    size,
    myrank,
    count = 0;
  MPI_Status status;
  start {
    initTracing(10000);
    startTracing();
    farm {
      MPI_Init(NULL,NULL);
      MPI_Comm_size(MPI_COMM_WORLD, &size);
      MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
      for(i=0;i<3; i++) {
	MPI_Send((void *) &count, 1, MPI_INT,
		 (myrank+1)%size, 0, MPI_COMM_WORLD);
	MPI_Recv((void *) &count, 1, MPI_INT,
		 (myrank+size-1)%size, 0, MPI_COMM_WORLD,&status);
	count++;
      }
      MPI_Barrier(MPI_COMM_WORLD); 
      MPI_Finalize();
    }
    stopTracing();
    writeTraceFile("Trace.trv", "NoTitle");
  }
}
