Для начала мне нужно было рассчитать количество сумм, а затем найти минимум этих сумм, это было сделано так, используя mpi:
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
.
.
.
x = (size)/numprocs;
low = myid * x;
high = low + x;
for(i =low; i < high; i++){
for(j = 0; j < matrixDim; j++){
for(k = 0; k < matrixDim; k+=gap){
for(m = 0; m < matrixDim; m+=gap){
c1 = calculation1(i,j,k,m);
if(c1 > cutoff){
sum += calculation2(modifier1[k][m], modifier2[k][m]);
}
}
}
if(sum < min){
min = sum;
minI = i;
minJ = j;
}
sum = 0;
}
}
MPI_Reduce(&result, &minimum, 1, MPI_FLOAT, MPI_MIN, 0, MPI_COMM_WORLD);
if( 0 == myid)
printf("The min is: %f", minimum);
MPI_Finalize();
Однако теперь вместо нахождения минимумасумма всей 2D-матрицы, мне нужно найти минимальную сумму каждого разбиения в матрице, раздел будет квадратом, определяемым четырьмя точками, и независимо от размера матрицы всегда будет 16 квадратов (матрица неменьше чем 800 * 800).Я пытаюсь реализовать это, используя декартову топологию MPI, однако у меня возникают проблемы с обертыванием реализации.Любая помощь или советы будут оценены.