MPI. Проблемы с алгоритмом

197
15 декабря 2016, 16:05

Норма находится как максимальная по модулю сумма элементов строки. Вроде что-то распараллелил, процессы подсчитывают суммы, но в цикл нахождения максимума заходит только один процесс. Да и как сделать так, чтобы программа работала при условии, что кол-во процессов меньше элементов матрицы, то есть одному процессу придется работать с несколькими итерациями?

#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();
}
Answer 1

Чтобы процесс мог выполнять более одной итерации, сравнение можно по модулю proc_count производить, предполагая, что 0 <= proc_this < proc_count.

Цикл с максимумом также должен использовать if (proc_this == k % proc_count). А затем вызывать MPI_Reduce(), чтобы глобальный максимум найти. Процессы работают с локальными копиями данных, если их явно не передать.

READ ALSO
QWebView DOM структура

QWebView DOM структура

Есть ли встроенные средства для отладки QWebView? Интересует просмотр DOM структуры

166
Multiple definition of `texture&#39; *_*

Multiple definition of `texture' *_*

Ошибка линковщика или криворукий программист, помогите, решить проблемку

153
Что за тип size_t?

Что за тип size_t?

Что представляет из себя тип size_t, похожий на тип int? И для чего его используют?

185
Простая печать из StringGrid

Простая печать из StringGrid

Помогите, пожалуйста, нужно напечатать маленькую таблицу (StringGrid) самым простым способомВот скрин программы:

171