私のコードはどのように動作するのですか?スレーブノードはいくつかの計算を実行し、各ノードは対応する線形配列Φを有する値minEを送る。ルートノードは2つの値を受信します。私はどのように格納するのか把握しようとしていますN-1(スレーブの数)ph0ルートノードです。私はのphiを2D配列に受け入れようとしましたが、うまくいきません。あるいは、私はそれを間違ってやっているかもしれない。したがって、このコードは最後のノードからphiの値を受け取って送信します。非ブロッキングの側面は、あなたのために重要である場合MPI Cで送受信する配列
if (world_rank == root) {
for(i=1; i<world_size; i++) {
MPI_Irecv(&local_minE[i], 1, MPI_FLOAT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &rcv_request[i]);
MPI_Irecv(phi, len, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &rcv_request[i]);
MPI_Waitall(world_size-1, &rcv_request[1], &status[1]);
}
MPI_Waitall(world_size-1, &rcv_request[1], &status[1]);
}
else {
//after computations, node will send a value, minE with a corresponding array phi
MPI_Isend(&minE, 1, MPI_FLOAT, 0, 1, MPI_COMM_WORLD,&send_request[0]);
MPI_Isend(phi, len, MPI_INT, root, 1, MPI_COMM_WORLD, &send_request[0]);
MPI_Wait(&send_request[0], &status[0]);
}
実際に実行されるサンプルを作成できますか? – Chiel
私の問題を明確にした:) – Rowel