MPIデカルトトポロジを使用するように、私は和の数を計算し、それらの和の最小値を見つけるために必要な、これは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();
しかし、今、全体の2次元行列の最小合計を求めるのではなく、行列の各パーティションの最小合計を求める必要があります。パーティションは4点で定義された四角形になり、行列サイズに関係なく、常に16個の四角形(行列は800 * 800以上である)。私はMPIデカルトトポロジを使ってこれを実装しようとしていますが、実装の周りに頭を抱えるのは難しいです。どんな助けやヒントもありがとうございます。
アルゴリズムのトップ・パラレル化の方法を正確に教えてください。どのループを並列化しようとしていますか?デカルトトポロジはどこで動くのですか? – Francesco