Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void barrier (int rank, int size)
- {
- MPI_Status status;
- int test;
- int layers = ceil (log2 (size));
- int pow2 = 1;
- for (int p = 1; p <= layers; p++)
- {
- pow2 *= 2;
- if (rank % pow2 == 0)
- {
- if (rank + p < size)
- {
- MPI_Recv(&test, 1, MPI_INT, rank + pow2 / 2, 0, MPI_COMM_WORLD, &status);
- }
- }
- else if (rank % pow2 == pow2 / 2)
- {
- MPI_Send (&test, 1, MPI_INT, rank - pow2 / 2, 0, MPI_COMM_WORLD);
- }
- }
- for (int p = layers; p > 0; p--)
- {
- if (rank % pow2 == 0)
- {
- if (rank + p < size)
- MPI_Send (&test, 1, MPI_INT, rank + pow2 / 2, 1, MPI_COMM_WORLD);
- }
- else if (rank % pow2 == pow2 / 2)
- MPI_Recv(&test, 1, MPI_INT, rank - pow2 / 2, 1, MPI_COMM_WORLD, &status);
- pow2 = pow2 / 2;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment