Advertisement
Tvor0zhok

ParProg7.5

May 14th, 2023
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include "mpi.h"
  4. using namespace std;
  5.  
  6. int main(int argc, char** argv)
  7. {
  8. double a = 0, b = 0, c = 0;
  9.  
  10. MPI_Request req[4];
  11. MPI_Status st[4];
  12.  
  13. MPI_Init(NULL, NULL);
  14.  
  15. // получаем число процессов
  16.  
  17. int Size;
  18. MPI_Comm_size(MPI_COMM_WORLD, &Size);
  19.  
  20. // получаем номер процесса
  21.  
  22. int Rank;
  23. MPI_Comm_rank(MPI_COMM_WORLD, &Rank);
  24.  
  25. // 0 1 2 3
  26. // 3 0 1 2
  27. int prev_pos = (Rank + 3) % Size;
  28.  
  29. // 0 1 2 3
  30. // 1 2 3 0
  31. int next_pos = (Rank + 1) % Size;
  32.  
  33. a = Rank + 0.4;
  34.  
  35. MPI_Send_init(&a, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[0]);
  36. MPI_Recv_init(&b, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[1]);
  37.  
  38. MPI_Send_init(&a, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[2]);
  39. MPI_Recv_init(&c, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[3]);
  40.  
  41. for (int k = 1; k <= 3; k++)
  42. {
  43. a += 0.1;
  44. MPI_Startall(4, req);
  45. MPI_Waitall(4, req, st);
  46. }
  47.  
  48. for (int k = 0; k < 4; k++)
  49. MPI_Request_free(&req[k]);
  50.  
  51. cout << "Process " << Rank << " a = " << a << ", b = " << b << ", c = " << c << endl;
  52.  
  53. MPI_Finalize();
  54. return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement