MPI. Проблемы с алгоритмом
Норма находится как максимальная по модулю сумма элементов строки. Вроде что-то распараллелил, процессы подсчитывают суммы, но в цикл нахождения максимума заходит только один процесс. Да и как сделать так, чтобы программа работала при условии, что кол-во процессов меньше элементов матрицы, то есть одному процессу придется работать с несколькими итерациями?
#include <iostream>
#include <cmath>
#include<stdio.h>
#include "conio.h"
#include <mpi.h>
const int N=10;
int max,sum,t;
int a[N][N],b[N];//задаем массив
int proc_count, proc_this, quant, ibeg;
int main(int argc,char** argv)
{
sum=0;
max=0;
for ( int i = 0; i < N; i++ ) {
for ( int j = 0; j < N; j++) {
a[i][j]=rand()%20;
}//заполняем массив
}
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&proc_count);
MPI_Comm_rank(MPI_COMM_WORLD,&proc_this);
t = MPI_Wtime();
for ( int i = 0; i < N; i++)
{
if (proc_this == i) //каждый процесс делает одну итерацию
{
for ( int j = 0; j < N; j++)
{
sum += abs( a[ i ][ j ] );
}
b[i] = sum;
}
sum = 0;
}
if (proc_this == 0)
{
max=b[0];
for ( int k=1; k < N; k++ )
{
if ( b[ k ] > max )
{
max = b[ k ];
}
}
printf("norma=%d",max);
printf("time=%f", MPI_Wtime()-t);
}
MPI_Finalize();
}
Источник: Stack Overflow на русском