MPI_IsendとMPI_Irecendのコードブロックに問題があります。私はライン上の次のプロセスにCinの番号を送る必要があります、そして、現在のプロセスは、それがビジネスだと考えることができます。MPI IsendとIrecvの問題
受信プロセスはそれ以上の計算に入る前に受信する必要がありますが、MPI_Waitを持たない場合はneversがデータを取得し、それを行うと永遠にハングします。私は間違って何をしていますか?
注:メッセージが通過しないことを確認するためにCinのみを3に設定します。現在、それはちょうどハングアップします。
void ComputeS5C()
{
MPI_Request send_request, recv_request;
MPI_Status status;
int Cin[1] = {3};
if(my_rank == 0){Cin[0] = 0;}
else {
MPI_Irecv(Cin, 1, MPI_INT, my_rank - 1, 0, MPI_COMM_WORLD, &recv_request);
MPI_Wait(&recv_request, &status);
fprintf(stderr, "RANK:%d Message Received from rank%d: Cin=%d\n", my_rank, my_rank-1, Cin[0]);
}
int k;
for(k = 0; k < Size_5; k++)
{
int s5clast;
if(k==0)
{
s5clast = Cin[0];
}
else
{
s5clast = s5c[k-1];
}
s5c[k] = s5g[k] | (s5p[k]&s5clast);
}
//if not highest rank, pass the carryin upstream
if(my_rank < world_size - 1){
MPI_Isend(&s5c[k], 1, MPI_INT, my_rank+1, 1, MPI_COMM_WORLD, &send_request);
fprintf(stderr, "RANK:%d Message sent to rank%d: Cin=%d\n", my_rank, my_rank+1, s5c[k]);
}
MPI_Wait(&send_request, &status);
}
良いキャッチ!ここで私はタグが本当に問題ではないと思っていた。 – Wenzel745
タグは私の友人にとって非常に重要です... expeciallyあなたが15点を必要とするときstackoverflow :) – simpel01