Guest User

Untitled

a guest
Jan 13th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.74 KB | None | 0 0
  1. void barrier (int rank, int size)
  2. {
  3.     MPI_Status status;
  4.     int test;
  5.     int layers = ceil (log2 (size));
  6.     int pow2 = 1;
  7.     for (int p = 1; p <= layers; p++)
  8.     {
  9.         pow2 *= 2;
  10.         if (rank % pow2 == 0)
  11.         {
  12.             if (rank + p < size)
  13.             {
  14.                 MPI_Recv(&test, 1, MPI_INT, rank + pow2 / 2, 0,  MPI_COMM_WORLD, &status);
  15.             }
  16.         }
  17.         else if (rank % pow2 == pow2 / 2)
  18.         {
  19.             MPI_Send (&test, 1, MPI_INT, rank - pow2 / 2, 0, MPI_COMM_WORLD);
  20.         }
  21.     }
  22.     for (int p = layers; p > 0; p--)
  23.     {
  24.         if (rank % pow2 == 0)
  25.         {
  26.             if (rank + p < size)
  27.                 MPI_Send (&test, 1, MPI_INT, rank + pow2 / 2, 1, MPI_COMM_WORLD);
  28.         }
  29.         else if (rank % pow2 == pow2 / 2)
  30.             MPI_Recv(&test, 1, MPI_INT, rank - pow2 / 2, 1,  MPI_COMM_WORLD, &status);
  31.         pow2 = pow2 / 2;
  32.     }
  33. }
Advertisement
Add Comment
Please, Sign In to add comment