MPI_Init(&argc,&argv),
MPI_Barrier(MPI_WORLD_COMM);
MPI_Finalize(),
optimize counter
#include#include #include #include "gtmp.h" static MPI_Status* status_array; static int P; void gtmpi_init(int num_threads){ P = num_threads; status_array = (MPI_Status*) malloc((P - 1)* sizeof(MPI_Status)); } void gtmpi_barrier(){ int vpid, i; MPI_Comm_rank(MPI_COMM_WORLD, &vpid); for(i = 0; i < vpid; i++) MPI_Send(NULL, 0, MPI_INT, i, 1, MPI_COMM_WORLD); for(i = vpid + 1; i < P; i++) MPI_Send(NULL, 0, MPI_INT, i, 1, MPI_COMM_WORLD); for(i = 0; i < vpid; i++) MPI_Recv(NULL, 0, MPI_INT, i, 1, MPI_COMM_WORLD, &status_array[i]); for(i = vpid + 1; i < P; i++) MPI_Recv(NULL, 0, MPI_INT, i, 1, MPI_COMM_WORLD, &status_array[i-1]); } void gtmpi_finalize(){ if(status_array != NULL){ free(status_array); } }