0

案例: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();

案例: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();
4

1 回答 1

2

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

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

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

如果您不需要其中任何一个,则可以通过MPI_STATUS_IGNORE而不是MPI_Status*.

于 2019-01-19T10:36:41.483 回答