Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <mpi.h>
- #define Numb1 8
- #define Numb2 3072
- #define S1 50
- #define S2 80
- using namespace std;
- void main(int argc, char ** argv)
- {
- int rank, size, circle;
- MPI_Status status;
- double time1, time2, time; // Переменные для хранения времени
- int A[Numb1][Numb2], B[Numb1], C[Numb1], Y[Numb1];
- MPI_Init(&argc, &argv); // Инициализация MPI
- MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Получение номера процесса
- MPI_Comm_size(MPI_COMM_WORLD, &size); // Получение числа процессов
- int arSize = (int)Numb1 / size;
- int *rB = new int[arSize];
- int *rC = new int[arSize];
- int *sY = new int[arSize];
- //Инициализация исходных данных
- for (int i = 0; i<Numb1; i++)
- {
- for (int j = 0; j < Numb2; j++) {
- A[i][j] = i + j + 1;
- }
- B[i] = i * 2 + 1;
- C[i] = i * 3 + 1;
- }
- if (rank == 0) {
- time1 = MPI_Wtime();
- }
- for (circle = 0; circle<10000; circle++) //цикл кратности
- {
- MPI_Scatter(&B, arSize, MPI_INT, rB, arSize, MPI_INT, 0, MPI_COMM_WORLD);
- MPI_Scatter(&C, arSize, MPI_INT, rC, arSize, MPI_INT, 0, MPI_COMM_WORLD);
- for (int i = 0; i< arSize; i++)
- {
- double Summ = 0;
- sY[i] = 0;
- for (int j = 0; j < Numb2; j++) {
- Summ += A[rank*arSize + i][j] / rC[i];
- }
- sY[i] = ((S1 + S2) / rB[i] + Summ);
- }
- MPI_Gather(sY, arSize, MPI_INT, &Y, arSize, MPI_INT, 0, MPI_COMM_WORLD);
- } // конец цикла кратности
- if (rank == 0)
- {
- time2 = MPI_Wtime();
- time = time2 - time1;
- cout << time << endl;
- }
- delete[]rB;
- delete[]rC;
- delete[]sY;
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement