ring.inst.c


#include <Profile/Profiler.h>
#include <mpi.h>
#include <stdio.h>

#define SIZE 10

void func(int me, int proc) {

	TAU_PROFILE_TIMER(tautimer, "void func(int, int) [{ring.c} {6,1}-{28,1}]", " ", TAU_USER);
	TAU_PROFILE_START(tautimer);

{
  int i;
  int field[SIZE];
  MPI_Status status;

  for (i=0; i<SIZE; i++)
    field[i] = i;

  MPI_Barrier(MPI_COMM_WORLD);

  for (i=0; i<3; ++i) {
    if (me==0) {
      MPI_Send(&field, SIZE, MPI_INT, 1, 4711, MPI_COMM_WORLD);
      MPI_Recv(&field, SIZE, MPI_INT, proc-1, 4711, MPI_COMM_WORLD, &status);
    }
    else {
      MPI_Recv(&field, SIZE, MPI_INT, me-1, 4711, MPI_COMM_WORLD, &status);
      MPI_Send(&field, SIZE, MPI_INT, (me+1)%proc, 4711, MPI_COMM_WORLD);
    }
  }
  MPI_Bcast (&field, SIZE, MPI_INT, 0, MPI_COMM_WORLD);
  printf("%d done.\n", me);

}
	
	TAU_PROFILE_STOP(tautimer);

}

int main(int argc, char **argv) {

	TAU_PROFILE_TIMER(tautimer, "int main(int, char **) [{ring.c} {30,1}-{40,1}]", " ", TAU_DEFAULT);
  TAU_INIT(&argc, &argv); 
#ifndef TAU_MPI
#ifndef TAU_SHMEM
  TAU_PROFILE_SET_NODE(0);
#endif /* TAU_SHMEM */
#endif /* TAU_MPI */
	TAU_PROFILE_START(tautimer);

{
  int proc, me;

  MPI_Init (&argc, & argv);
  MPI_Comm_size (MPI_COMM_WORLD, &proc);
  MPI_Comm_rank (MPI_COMM_WORLD, &me);

  func(me, proc);
    
  MPI_Finalize ();

}
	
	TAU_PROFILE_STOP(tautimer);

}


syntax highlighted by Code2HTML, v. 0.9.1