#include #include #include #include #include #include #include "mpi.h" #define SIZE 10000 #define ERROR(e,s) do {\ fprintf (stderr, "(%s:%d): %s %s\n",\ __FILE__, __LINE__, strerror(e), s);\ exit(e);\ } while (0) #define MPI_CHECK(c) do {\ int ret;\ if ((ret = (c)) != MPI_SUCCESS)\ {\ int rank;\ MPI_Comm_rank (MPI_COMM_WORLD, &rank);\ fprintf (stderr, "(Node:%d %s:%d) Error within MPI ret:%d\n",\ rank, __FILE__, __LINE__, ret);\ MPI_Abort (MPI_COMM_WORLD, -1);\ }\ } while (0) int main (int argc, char * argv[]) { int size; int * array; int rank; char hostname[256]; MPI_Request request; MPI_Status status; MPI_CHECK (MPI_Init (&argc, &argv)); MPI_CHECK (MPI_Comm_rank (MPI_COMM_WORLD, &rank)); MPI_CHECK (MPI_Comm_size (MPI_COMM_WORLD, &size)); array = calloc (1, 10000); /* MPI_Barrier (MPI_COMM_WORLD); */ if (rank == 0) { MPI_Isend (array, SIZE, MPI_INT, 1, 4711, MPI_COMM_WORLD, &request); MPI_Wait (&request, &status); } else if (rank == 1) { MPI_Irecv (array, SIZE, MPI_INT, 0, 4711, MPI_COMM_WORLD, &request); usleep (1000); MPI_Wait (&request, &status); } MPI_CHECK (MPI_Finalize ()); return 0; }