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.4;
- MPI_Send_init(&a, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[0]);
- MPI_Recv_init(&b, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[1]);
- MPI_Send_init(&a, 1, MPI_DOUBLE, prev_pos, 5, MPI_COMM_WORLD, &req[2]);
- MPI_Recv_init(&c, 1, MPI_DOUBLE, next_pos, 5, MPI_COMM_WORLD, &req[3]);
- for (int k = 1; k <= 3; k++)
- {
- a += 0.1;
- MPI_Startall(4, req);
- MPI_Waitall(4, req, st);
- }
- for (int k = 0; k < 4; k++)
- MPI_Request_free(&req[k]);
- cout << "Process " << Rank << " a = " << a << ", b = " << b << ", c = " << c << endl;
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement