使用MPI_Wait获得的MPI_Isend的状态有什么用?
What is the use of status of MPI_Isend obtained using MPI_Wait?
案例:1.使用MPI_Wait()
得到的status有什么用
if(rank==0)
MPI_Isend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD, &request0);
if(rank==1)
MPI_Recv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD);
if(rank==0)
MPI_Wait(&request0, &status);
// Can i use status here to do something?
MPI_Finalize();
Case:2. status的使用这里说的很清楚(为了对比才加的)
if(rank==0)
MPI_Ssend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD);
if(rank==1)
MPI_Irecv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD, &request1);
if(rank==1)
MPI_Wait(&request1, &status);
printf("The source is %d", status.MPI_SOURCE);
MPI_Finalize();
一般MPI_Status
用于获取接收到的消息的以下属性。
- 发件人的排名,(
status.MPI_SOURCE
) 在使用 MPI_ANY_SOURCE
时特别相关。
- 消息的标签,(
status.MPI_TAG
) 在使用 MPI_ANY_TAG
时特别相关
- 已 发送的元素计数 ,这可能与发布的接收缓冲区不同,使用
MPI_Get_count
。
对于发送消息,您可以使用状态来测试MPI_Test_cancelled
。另外,对于return多个状态的函数,比如MPI_Waitall
,在出错的情况下,可以使用status[i].MPI_ERROR
。在这种情况下,主等待函数将 return MPI_ERR_IN_STATUS
。
如果您不需要任何这些,您可以传递 MPI_STATUS_IGNORE
而不是 MPI_Status*
。
案例:1.使用MPI_Wait()
得到的status有什么用if(rank==0)
MPI_Isend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD, &request0);
if(rank==1)
MPI_Recv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD);
if(rank==0)
MPI_Wait(&request0, &status);
// Can i use status here to do something?
MPI_Finalize();
Case:2. status的使用这里说的很清楚(为了对比才加的)
if(rank==0)
MPI_Ssend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD);
if(rank==1)
MPI_Irecv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD, &request1);
if(rank==1)
MPI_Wait(&request1, &status);
printf("The source is %d", status.MPI_SOURCE);
MPI_Finalize();
一般MPI_Status
用于获取接收到的消息的以下属性。
- 发件人的排名,(
status.MPI_SOURCE
) 在使用MPI_ANY_SOURCE
时特别相关。 - 消息的标签,(
status.MPI_TAG
) 在使用MPI_ANY_TAG
时特别相关 - 已 发送的元素计数 ,这可能与发布的接收缓冲区不同,使用
MPI_Get_count
。
对于发送消息,您可以使用状态来测试MPI_Test_cancelled
。另外,对于return多个状态的函数,比如MPI_Waitall
,在出错的情况下,可以使用status[i].MPI_ERROR
。在这种情况下,主等待函数将 return MPI_ERR_IN_STATUS
。
如果您不需要任何这些,您可以传递 MPI_STATUS_IGNORE
而不是 MPI_Status*
。