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;
- int main(int argc, char** argv)
- {
- // Настраиваем русский язык в консоли
- wcin.imbue(locale(".866"));
- wcout.imbue(locale(".866"));
- cout << fixed << setprecision(6);
- // номер процесса
- int num_thread;
- // вещественное число двойной точности
- double value;
- // Начало параллельной области
- MPI_Init(&argc, &argv);
- // получаем номер процесса
- MPI_Comm_rank(MPI_COMM_WORLD, &num_thread);
- if (num_thread == 0)
- {
- value = M_PI;
- // Увеличиваем объем буферного пространства
- int BufSize = sizeof(double) + MPI_BSEND_OVERHEAD;
- void* Buff = malloc(BufSize);
- MPI_Buffer_attach(Buff, BufSize);
- MPI_Bsend(&value, 1, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD);
- // Уменьшаем объем буферного пространства и освобождаем его
- MPI_Buffer_detach(Buff, &BufSize);
- if (!Buff) free(Buff);
- wcout << L"Попали в процесс с номером 0, передаем вещественное число value = " << value << "\n";
- }
- else if (num_thread == 1)
- {
- MPI_Status status;
- MPI_Recv(&value, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
- wcout << L"Попали в процесс с номером 1, успешно получили вещественное число value = " << value << "\n";
- }
- else
- {
- wcout << L"Попали в процесс с номером " << num_thread << L", процесс не учавствует в обмене информацией\n";
- }
- // Конец параллельной области
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement