Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include "pt4.h"
  2. #include "mpi.h"
  3. void Solve()
  4. {
  5.     Task("MPI2Send18");
  6.     int flag;
  7.     MPI_Initialized(&flag);
  8.     if (flag == 0)
  9.         return;
  10.     int rank, size;
  11.     MPI_Comm_size(MPI_COMM_WORLD, &size); // size (количество процессов) -  чётное число
  12.     MPI_Comm_rank(MPI_COMM_WORLD, &rank); // rank - текущий процесс
  13.  
  14.     int n; // 0 < N < 5
  15.     MPI_Status s;
  16.  
  17.     pt >> n;
  18.     double * a = new double[5]; // массив в каждом процессе длины n
  19.     double * b = new double[5];
  20.     double * c = new double[5];
  21.  
  22.     for (int i = 0; i < n; ++i)
  23.         pt >> a[i];
  24.  
  25.     if (rank % 2 == 0) // номер процесса чётный: 0, 2, 4, 6, ... Обменяться наборами с последующим.
  26.     {  
  27.         MPI_Sendrecv(&a, 1, MPI_DOUBLE, rank - 1, 0, &c, n, MPI_DOUBLE, rank, 0, MPI_COMM_WORLD, &s);
  28.         MPI_Sendrecv(&b, 1, MPI_DOUBLE, rank, 0, &a, n, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &s);
  29.         MPI_Sendrecv(&c, 1, MPI_DOUBLE, rank - 1, 0, &b, n, MPI_DOUBLE, rank, 0, MPI_COMM_WORLD, &s);
  30.         for (int i = 0; i < n; ++i)
  31.            pt << a[i];
  32.     }
  33.     else // Если нечётный 1, 3, 5, 7, 9... Вывести результат.
  34.         for (int i = 0; i < n; ++i)
  35.             pt << b[i];
  36.     delete[] a;
  37.     delete[] b;
  38.     delete[] c;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement