Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <mpi.h>
  4.  
  5. #define Numb1 8
  6.  
  7. #define Numb2 3072
  8.  
  9. #define S1 50
  10. #define S2 80
  11.  
  12. using namespace std;
  13.  
  14. void main(int argc, char ** argv)
  15. {
  16.     int rank, size, circle;
  17.  
  18.     MPI_Status status;
  19.  
  20.     double time1, time2, time; // Переменные для хранения времени
  21.     int A[Numb1][Numb2], B[Numb1], C[Numb1], Y[Numb1];
  22.  
  23.     MPI_Init(&argc, &argv); // Инициализация MPI
  24.     MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Получение номера процесса
  25.     MPI_Comm_size(MPI_COMM_WORLD, &size); // Получение числа процессов
  26.  
  27.     int arSize = (int)Numb1 / size;
  28.     int *rB = new int[arSize];
  29.     int *rC = new int[arSize];
  30.     int *sY = new int[arSize];
  31.  
  32.     //Инициализация исходных данных
  33.     for (int i = 0; i<Numb1; i++)
  34.     {
  35.         for (int j = 0; j < Numb2; j++) {
  36.             A[i][j] = i + j + 1;
  37.         }
  38.         B[i] = i * 2 + 1;
  39.         C[i] = i * 3 + 1;
  40.     }
  41.  
  42.     if (rank == 0) {
  43.         time1 = MPI_Wtime();
  44.     }
  45.     for (circle = 0; circle<10000; circle++) //цикл кратности
  46.     {
  47.  
  48.         MPI_Scatter(&B, arSize, MPI_INT, rB, arSize, MPI_INT, 0, MPI_COMM_WORLD);
  49.         MPI_Scatter(&C, arSize, MPI_INT, rC, arSize, MPI_INT, 0, MPI_COMM_WORLD);
  50.  
  51.         for (int i = 0; i< arSize; i++)
  52.         {
  53.             double Summ = 0;
  54.             sY[i] = 0;
  55.  
  56.             for (int j = 0; j < Numb2; j++) {
  57.                 Summ += A[rank*arSize + i][j] / rC[i];
  58.             }
  59.             sY[i] = ((S1 + S2) / rB[i] + Summ);
  60.         }
  61.         MPI_Gather(sY, arSize, MPI_INT, &Y, arSize, MPI_INT, 0, MPI_COMM_WORLD);
  62.     } // конец цикла кратности
  63.  
  64.     if (rank == 0)
  65.     {
  66.         time2 = MPI_Wtime();
  67.         time = time2 - time1;
  68.         cout << time << endl;
  69.     }
  70.  
  71.     delete[]rB;
  72.     delete[]rC;
  73.     delete[]sY;
  74.     MPI_Finalize();
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement