代码之家  ›  专栏  ›  技术社区  ›  schorsch312

检查MPI Communicator中的处理器是否与MPI Comm世界中的处理器相同

  •  0
  • schorsch312  · 技术社区  · 7 年前

    我需要检查MPI通信器是否 MPI_COMM_WORLD comm . 这意味着所有处理器都在这个通信器中。

    我试过这个

    int isCommWolrd(MPI_Comm comm) {
        int size_comm = 0;
        int size_comm_world = 0;
        MPI_Comm_size(comm, &size_comm);
        MPI_Comm_size(MPI_COMM_WORLD, &size_comm_world);
        return (size_comm == size_comm_world);
    }
    

    只检查通信器的尺寸就足够了吗?会有假阳性或阴性吗?

    0 回复  |  直到 7 年前
        1
  •  2
  •   Gilles Gouaillardet    7 年前

    使用 MPI_Comm_compare() 检查结果是 MPI_IDENT

    int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)
    

    当且仅当comm1和comm2是同一对象(相同组和相同上下文)的句柄时,才会产生mpi ident结果。 mpi_全等 结果如果基础组在成分和秩次上是相同的,则这些传播者仅因上下文不同而不同。 类似于 两个传播者的群体成员结果相同,但等级不同。否则,将导致不相等的结果。

    你的方法会导致假阳性。例如,如果你 MPI_Comm_dup(MPI_COMM_WORLD, &comm) ,则结果是 comm 大小与 MPI_COMM_WORLD ,但这是另一种沟通方式。

    推荐文章