Advertisement
Tvor0zhok

ParProg7.3

May 14th, 2023
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 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.7;
  34.  
  35.     // Отправляем последующему процессу
  36.     MPI_Isend(&a, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[0]);
  37.  
  38.     // Получаем из предыдущего процесса
  39.     MPI_Irecv(&b, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[1]);
  40.  
  41.     // Отправляем из предыдущего процесса
  42.     MPI_Isend(&a, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[2]);
  43.    
  44.     // Получаем из последующего процесса
  45.     MPI_Irecv(&c, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[3]);
  46.  
  47.     MPI_Waitall(4, req, st);
  48.  
  49.     cout << "Process " << Rank << ": a = " << a << ", b = " << b
  50.         << " c = " << c << endl;
  51.  
  52.     MPI_Finalize();
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement