Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pt4.h"
- #include "mpi.h"
- void Solve()
- {
- Task("MPI2Send18");
- int flag;
- MPI_Initialized(&flag);
- if (flag == 0)
- return;
- int rank, size;
- MPI_Comm_size(MPI_COMM_WORLD, &size); // size (количество процессов) - чётное число
- MPI_Comm_rank(MPI_COMM_WORLD, &rank); // rank - текущий процесс
- int n; // 0 < N < 5
- MPI_Status s;
- pt >> n;
- double * a = new double[5]; // массив в каждом процессе длины n
- double * b = new double[5];
- double * c = new double[5];
- for (int i = 0; i < n; ++i)
- pt >> a[i];
- if (rank % 2 == 0) // номер процесса чётный: 0, 2, 4, 6, ... Обменяться наборами с последующим.
- {
- MPI_Sendrecv(&a, 1, MPI_DOUBLE, rank - 1, 0, &c, n, MPI_DOUBLE, rank, 0, MPI_COMM_WORLD, &s);
- MPI_Sendrecv(&b, 1, MPI_DOUBLE, rank, 0, &a, n, MPI_DOUBLE, rank - 1, 0, MPI_COMM_WORLD, &s);
- MPI_Sendrecv(&c, 1, MPI_DOUBLE, rank - 1, 0, &b, n, MPI_DOUBLE, rank, 0, MPI_COMM_WORLD, &s);
- for (int i = 0; i < n; ++i)
- pt << a[i];
- }
- else // Если нечётный 1, 3, 5, 7, 9... Вывести результат.
- for (int i = 0; i < n; ++i)
- pt << b[i];
- delete[] a;
- delete[] b;
- delete[] c;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement