Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include <algorithm>
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <cmath>
- #include "mpi.h"
- using namespace std;
- void get_msg(MPI_Status& status)
- {
- MPI_Probe(MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
- if (status.MPI_SOURCE == 1)
- {
- double val;
- MPI_Recv(&val, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD, &status);
- wcout << L"Попали в процесс с номером 0, успешно получили вещественное число value = " << val << "\n";
- }
- else
- {
- char val[] = " ";
- MPI_Recv(&val, 5, MPI_CHAR, 2, 0, MPI_COMM_WORLD, &status);
- wcout << L"Попали в процесс с номером 0, успешно получили строку value = " << val << "\n";
- }
- }
- int main(int argc, char** argv)
- {
- // Настраиваем русский язык в консоли
- wcin.imbue(locale(".866"));
- wcout.imbue(locale(".866"));
- cout << fixed << setprecision(6);
- // номер процесса
- int num_thread;
- // Начало параллельной области
- MPI_Init(&argc, &argv);
- // получаем номер процесса
- MPI_Comm_rank(MPI_COMM_WORLD, &num_thread);
- switch (num_thread)
- {
- case 0:
- {
- MPI_Status status;
- get_msg(status);
- get_msg(status);
- break;
- }
- case 1:
- {
- double val = M_PI;
- MPI_Send(&val, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
- wcout << L"Попали в процесс с номером 1, передаем вещественное число value = " << val << "\n";
- break;
- }
- case 2:
- {
- char val[] = "3.14";
- MPI_Send(&val, 5, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
- wcout << L"Попали в процесс с номером 2, передаем строку value = " << val << "\n";
- break;
- }
- case 3:
- {
- wcout << L"Попали в процесс с номером 3, процесс не учавствует в обмене информацией\n";
- break;
- }
- }
- // Конец параллельной области
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement