代码之家  ›  专栏  ›  技术社区  ›  Black Heart

使用MPI获得的MPI状态的用途是什么?

  •  0
  • Black Heart  · 技术社区  · 6 年前

    案例: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 回复  |  直到 6 年前
        1
  •  2
  •   Zulan    6 年前

    一般来说 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* .

    推荐文章