Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <mpi.h>
- using namespace std;
- int main(int argc, char **argv){
- int size, rank; // количество процессов, номер процесса
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &size);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- const int p_size = 10; // рандомная переменная, что бы увеличить размер матрицы
- const int str_l = p_size*size; //длинна строки матрицы
- const int str_c = p_size*size; // соличество строк в матрице
- const int s = str_c*str_l; //общая размерность матрицы,
- int in_mat[str_c*str_l]; //изначальная матрица
- if( rank == 0){
- // на первом процессе её указываем и выводим
- srand(time(NULL));
- for(int i = 0; i < s; i++){
- in_mat[i] = rand() % 10;
- }
- for(int i = 0; i < str_l; i++){
- for(int j = 0; j < str_c; j++){
- cout << in_mat[i*str_l+j] << " ";
- }
- cout << endl;
- }
- }
- int out_mat[str_l*p_size];// матрица на под процессах
- MPI_Scatter(in_mat, str_l*p_size, MPI_INT, out_mat, str_l*p_size, MPI_INT, 0, MPI_COMM_WORLD);//отправили нашу матрицу по кускам на все процессы
- int sum[p_size];// сумма элементов строки
- int check[p_size];// флажок для проверки в каждой строке
- for(int i = 0; i < p_size; i++){
- sum[i]=0;
- for(int j=0; j<str_l; j++){
- sum[i] += out_mat[i*str_l + j];
- }
- if(out_mat[i*str_l + i + rank]>=sum[i]-out_mat[i*str_l + i + rank]){
- check[i] = 1;
- }else{
- check[i] = 0;
- }
- }
- int g_check[str_c];//глобальный массив флажков по всей искомой матрице
- MPI_Gather(check, p_size, MPI_INT, g_check, p_size, MPI_INT, 0, MPI_COMM_WORLD);// получили данные с подпроцессоров на основной
- if( rank == 0){
- // проверяем все флажки, и выводим результат
- bool a = true;
- for(int i = 0; i < str_c; i++){
- a = a && (g_check[i]==1);
- }
- cout << a << endl;;
- }
- MPI_Finalize();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement