Норма находится как максимальная по модулю сумма элементов строки. Вроде что-то распараллелил, процессы подсчитывают суммы, но в цикл нахождения максимума заходит только один процесс. Да и как сделать так, чтобы программа работала при условии, что кол-во процессов меньше элементов матрицы, то есть одному процессу придется работать с несколькими итерациями?
#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();
}
Чтобы процесс мог выполнять более одной итерации, сравнение можно по модулю proc_count
производить, предполагая, что 0 <= proc_this < proc_count
.
Цикл с максимумом также должен использовать if (proc_this == k % proc_count)
. А затем вызывать MPI_Reduce()
, чтобы глобальный максимум найти. Процессы работают с локальными копиями данных, если их явно не передать.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть ли встроенные средства для отладки QWebView? Интересует просмотр DOM структуры
Ошибка линковщика или криворукий программист, помогите, решить проблемку
Что представляет из себя тип size_t, похожий на тип int? И для чего его используют?
Помогите, пожалуйста, нужно напечатать маленькую таблицу (StringGrid) самым простым способомВот скрин программы: