通过MPI_Wait获得的MPI_Isend状态的用途是什么?

时间:2019-01-19 09:24:46

标签: c mpi intel-mpi

情况:1。 使用MPI_Wait()获得的状态的用途是什么

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();

案例:2。 状态的使用在此处很清楚(仅为比较而添加)

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();

1 个答案:

答案 0 :(得分:2)

通常MPI_Status用于为接收到的消息获取以下属性。

  1. 发件人(status.MPI_SOURCE的等级,与使用MPI_ANY_SOURCE时特别相关。
  2. 邮件标签(status.MPI_TAG)在使用MPI_ANY_TAG时特别相关
  3. 已发送的
  4. 元素计数,可能与使用MPI_Get_count的已发布接收缓冲区不同。

对于发送消息,您可以使用状态测试MPI_Test_cancelled。此外,对于返回多个状态的函数,例如MPI_Waitall,如果发生错误,则可以使用status[i].MPI_ERROR。在这种情况下,主等待函数将返回MPI_ERR_IN_STATUS

如果您不需要这些,可以通过MPI_STATUS_IGNORE而不是MPI_Status*