Advertisement
Tvor0zhok

ParProg6.3

Apr 15th, 2023 (edited)
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <iomanip>
  5. #include <string>
  6. #include <cmath>
  7. #include "mpi.h"
  8. using namespace std;
  9.  
  10. int main(int argc, char** argv)
  11. {
  12.     // Настраиваем русский язык в консоли
  13.     wcin.imbue(locale(".866"));
  14.     wcout.imbue(locale(".866"));
  15.     cout << fixed << setprecision(6);
  16.  
  17.     // номер процесса
  18.     int num_thread;
  19.  
  20.     // вещественное число двойной точности
  21.     double value;
  22.  
  23.     // Начало параллельной области
  24.     MPI_Init(&argc, &argv);
  25.  
  26.     // получаем номер процесса
  27.     MPI_Comm_rank(MPI_COMM_WORLD, &num_thread);
  28.  
  29.     if (num_thread == 0)
  30.     {
  31.         value = M_PI;  
  32.  
  33.         // Увеличиваем объем буферного пространства
  34.         int BufSize = sizeof(double) + MPI_BSEND_OVERHEAD;
  35.         void* Buff = malloc(BufSize);
  36.         MPI_Buffer_attach(Buff, BufSize);
  37.  
  38.         MPI_Bsend(&value, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD);
  39.  
  40.         // Уменьшаем объем буферного пространства и освобождаем его
  41.         MPI_Buffer_detach(Buff, &BufSize);
  42.         if (!Buff) free(Buff);
  43.        
  44.         wcout << L"Попали в процесс с номером 0, передаем вещественное число value = " << value << "\n";
  45.     }
  46.     else if (num_thread == 1)
  47.     {
  48.         MPI_Status status;
  49.         MPI_Recv(&value, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
  50.  
  51.         wcout << L"Попали в процесс с номером 1, успешно получили вещественное число value = " << value << "\n";
  52.     }
  53.     else
  54.     {
  55.         wcout << L"Попали в процесс с номером " << num_thread << L", процесс не учавствует в обмене информацией\n";
  56.     }
  57.  
  58.     // Конец параллельной области
  59.     MPI_Finalize();
  60.  
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement