我的 MPI_Isend 和 MPI_Irecv 代码块有问题。我需要将一个数字 Cin 发送到下一个流程,然后当前流程可以继续其业务。
接收过程需要先接收,然后才能进一步进行计算,但是当我没有 MPI_Wait 时,它永远不会获取数据,而当我这样做时,它就会永远挂起。我究竟做错了什么?
注意:我只将 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] …Run Code Online (Sandbox Code Playgroud)