Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <mpi.h>
  4.  
  5. using namespace std;
  6. int main(int argc, char **argv){
  7.     int size, rank; // количество процессов, номер процесса
  8.     MPI_Init(&argc, &argv);
  9.     MPI_Comm_size(MPI_COMM_WORLD, &size);
  10.     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  11.  
  12.     const int p_size = 10; // рандомная переменная, что бы увеличить размер матрицы
  13.     const int str_l = p_size*size; //длинна строки матрицы
  14.     const int str_c = p_size*size;  // соличество строк в матрице
  15.     const int s = str_c*str_l; //общая размерность матрицы,
  16.     int in_mat[str_c*str_l]; //изначальная матрица
  17.  
  18.     if( rank == 0){
  19.         // на первом процессе её указываем и выводим
  20.         srand(time(NULL));
  21.         for(int i = 0; i < s; i++){
  22.             in_mat[i] = rand() % 10;
  23.         }
  24.         for(int i = 0; i < str_l; i++){
  25.             for(int j = 0; j < str_c; j++){
  26.                 cout << in_mat[i*str_l+j] << " ";
  27.             }
  28.             cout << endl;
  29.         }
  30.     }
  31.     int out_mat[str_l*p_size];// матрица на под процессах
  32.     MPI_Scatter(in_mat, str_l*p_size, MPI_INT, out_mat, str_l*p_size, MPI_INT, 0, MPI_COMM_WORLD);//отправили нашу матрицу по кускам на все процессы
  33.     int sum[p_size];// сумма элементов строки
  34.     int check[p_size];// флажок для проверки в каждой строке
  35.     for(int i = 0; i < p_size; i++){
  36.         sum[i]=0;
  37.         for(int j=0; j<str_l; j++){
  38.             sum[i] += out_mat[i*str_l + j];
  39.         }
  40.         if(out_mat[i*str_l + i + rank]>=sum[i]-out_mat[i*str_l + i + rank]){
  41.             check[i] = 1;
  42.         }else{
  43.             check[i] = 0;          
  44.         }
  45.     }
  46.     int g_check[str_c];//глобальный массив флажков по всей искомой матрице
  47.     MPI_Gather(check, p_size, MPI_INT, g_check, p_size, MPI_INT, 0, MPI_COMM_WORLD);// получили данные с подпроцессоров на основной
  48.     if( rank == 0){
  49.         // проверяем все флажки, и выводим результат
  50.         bool a = true;
  51.         for(int i = 0; i < str_c; i++){
  52.             a = a && (g_check[i]==1);
  53.         }
  54.         cout << a << endl;;
  55.     }
  56.     MPI_Finalize();
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement