Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include "mpi.h"
- using namespace std;
- int main(int argc, char** argv)
- {
- double a = 0, b = 0, c = 0;
- MPI_Request req[4];
- MPI_Status st[4];
- MPI_Init(NULL, NULL);
- // получаем число процессов
- int Size;
- MPI_Comm_size(MPI_COMM_WORLD, &Size);
- // получаем номер процесса
- int Rank;
- MPI_Comm_rank(MPI_COMM_WORLD, &Rank);
- // 0 1 2 3
- // 3 0 1 2
- int prev_pos = (Rank + 3) % Size;
- // 0 1 2 3
- // 1 2 3 0
- int next_pos = (Rank + 1) % Size;
- a = Rank + 0.7;
- // Отправляем последующему процессу
- MPI_Isend(&a, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[0]);
- // Получаем из предыдущего процесса
- MPI_Irecv(&b, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[1]);
- // Отправляем из предыдущего процесса
- MPI_Isend(&a, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[2]);
- // Получаем из последующего процесса
- MPI_Irecv(&c, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[3]);
- MPI_Waitall(4, req, st);
- cout << "Process " << Rank << ": a = " << a << ", b = " << b
- << " c = " << c << endl;
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement