Advertisement
Tvor0zhok

ParProg6.5

Apr 15th, 2023
622
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 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. void get_msg(MPI_Status& status)
  11. {
  12.     MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
  13.  
  14.     if (status.MPI_SOURCE == 1)
  15.     {
  16.         double val;
  17.         MPI_Recv(&val, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &status);
  18.  
  19.         wcout << L"Попали в процесс с номером 0, успешно получили вещественное число value = " << val << "\n";
  20.     }
  21.     else
  22.     {
  23.         char val[] = "    ";
  24.  
  25.         MPI_Recv(&val, 5, MPI_CHAR, 2, 0, MPI_COMM_WORLD, &status);
  26.  
  27.         wcout << L"Попали в процесс с номером 0, успешно получили строку value = " << val << "\n";
  28.     }
  29. }
  30.  
  31. int main(int argc, char** argv)
  32. {
  33.     // Настраиваем русский язык в консоли
  34.     wcin.imbue(locale(".866"));
  35.     wcout.imbue(locale(".866"));
  36.     cout << fixed << setprecision(6);
  37.  
  38.     // номер процесса
  39.     int num_thread;
  40.  
  41.     // Начало параллельной области
  42.     MPI_Init(&argc, &argv);
  43.  
  44.     // получаем номер процесса
  45.     MPI_Comm_rank(MPI_COMM_WORLD, &num_thread);
  46.  
  47.     switch (num_thread)
  48.     {
  49.     case 0:
  50.     {
  51.         MPI_Status status;
  52.  
  53.         get_msg(status);
  54.         get_msg(status);
  55.  
  56.         break;
  57.     }
  58.     case 1:
  59.     {
  60.         double val = M_PI;
  61.  
  62.         MPI_Send(&val, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
  63.         wcout << L"Попали в процесс с номером 1, передаем вещественное число value = " << val << "\n";
  64.  
  65.         break;
  66.     }
  67.     case 2:
  68.     {
  69.         char val[] = "3.14";
  70.  
  71.         MPI_Send(&val, 5, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
  72.         wcout << L"Попали в процесс с номером 2, передаем строку value = " << val << "\n";
  73.  
  74.         break;
  75.     }
  76.     case 3:
  77.     {
  78.         wcout << L"Попали в процесс с номером 3, процесс не учавствует в обмене информацией\n";
  79.         break;
  80.     }
  81.     }
  82.  
  83.     // Конец параллельной области
  84.     MPI_Finalize();
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement