最初に、合計の数を計算してから、それらの合計の最小値を見つける必要がありました。これは、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マトリックス全体の最小合計を見つける代わりに、マトリックス内のすべてのパーティションの最小合計を見つける必要があります。パーティションは4つのポイントで定義される正方形になり、マトリックスのサイズに関係なく、常に存在します。 16の正方形である(行列は800 * 800以上)。MPIデカルトトポロジを使用してこれを実装しようとしていますが、実装に頭を悩ませています。任意のヘルプ、またはヒントをいただければ幸いです。