kingstertime

Untitled

Oct 12th, 2020
1,832
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. #include<mpi.h>
  2. #include<iostream>
  3. using namespace std;
  4.  
  5. int main(int argc, char **argv)
  6. {
  7.     int size, rank;
  8.     MPI_Init(&argc, &argv);
  9.     MPI_Status status;
  10.     MPI_Comm_size(MPI_COMM_WORLD, &size);
  11.     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  12.  
  13.     if (rank == 0)
  14.     {
  15.         int a[12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
  16.         int block = 12 / size + 1;
  17.         int elements = 12 - block;
  18.         for (int i = 1; i < size; i++)
  19.         {
  20.             if (elements > 0 && elements < block)
  21.                 block = elements;
  22.  
  23.             MPI_Send(&a[(12 / size + 1)*i], elements > 0 ? block : 0, MPI_INT, i, 13, MPI_COMM_WORLD);
  24.             elements = elements - block;
  25.         }
  26.         printf("process 0: ");
  27.         block = 12 / size + 1;
  28.         for (int i = 0; i < block; i++)
  29.         {
  30.             printf("%d ", a[i]);
  31.         }
  32.     }
  33.     else {
  34.         MPI_Probe(0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
  35.         int count;
  36.         MPI_Get_count(&status, MPI_INT, &count);
  37.         int *m = new int[count];
  38.  
  39.         MPI_Recv(m, count, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
  40.         printf("process %d: ", rank);
  41.         for (int i = 0; i < count; i++)
  42.         {
  43.             printf("%d ", m[i]);
  44.         }
  45.         delete[] m;
  46.     }
  47.     MPI_Finalize();
  48. }
Advertisement
Add Comment
Please, Sign In to add comment