cs205-lecture-examples

Example codes used during Harvard CS205 lectures
git clone https://git.0xfab.ch/cs205-lecture-examples.git
Log | Files | Refs | README | LICENSE

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 }