mpi_bsend.cpp (1010B)
1 #include <mpi.h> 2 3 int main(int argc, char* argv[]) 4 { 5 constexpr int n = 1000000; 6 int rank; 7 MPI_Init(&argc, &argv); 8 MPI_Comm_rank(MPI_COMM_WORLD, &rank); 9 10 // allocate a memory buffer for MPI 11 int bufsize = 0; 12 MPI_Pack_size(n, MPI_INT, MPI_COMM_WORLD, &bufsize); 13 bufsize += MPI_BSEND_OVERHEAD; 14 char *mpibuf = new char[bufsize]; 15 MPI_Buffer_attach(mpibuf, bufsize); 16 17 // send/receive buffers 18 int *sendbuf = new int[n]; 19 int *recvbuf = new int[n]; 20 21 if (0 == rank) { 22 MPI_Bsend(sendbuf, n, MPI_INT, 1, 98, MPI_COMM_WORLD); // local 23 MPI_Recv(recvbuf, n, MPI_INT, 1, 99, MPI_COMM_WORLD, MPI_STATUS_IGNORE); 24 } else { 25 MPI_Bsend(sendbuf, n, MPI_INT, 0, 99, MPI_COMM_WORLD); // local 26 MPI_Recv(recvbuf, n, MPI_INT, 0, 98, MPI_COMM_WORLD, MPI_STATUS_IGNORE); 27 } 28 29 // clean up 30 MPI_Buffer_detach(mpibuf, &bufsize); // blocking 31 delete[] mpibuf; 32 delete[] sendbuf; 33 delete[] recvbuf; 34 35 MPI_Finalize(); 36 return 0; 37 }