【问题标题】:Difference between MPI_Allgather and MPI_AllgathervMPI_Allgather 和 MPI_Allgatherv 之间的区别
【发布时间】:2011-08-17 10:58:48
【问题描述】:

MPI_Allgather()MPI_Allgatherv() 有什么区别?

【问题讨论】:

    标签: mpi parallel-processing


    【解决方案1】:

    来自MPI standard

    MPI_GATHERV 扩展了功能 通过允许变化的 MPI_GATHER 每个进程的数据计数,因为 recvcounts 现在是一个数组。它也是 允许更大的灵活性 数据被放置在根上,由 提供新参数 displs

    MPI_ALLGATHERV 是它的扩展。

    这两个函数的签名是

    int MPI_Allgather(void * sendbuff, int sendcount, MPI_Datatype sendtype, 
                      void * recvbuf, int recvcount, MPI_Datatype recvtype, 
                      MPI_Comm comm)
    int MPI_Allgatherv(void * sendbuff, int sendcount, MPI_Datatype sendtype, 
                       void * recvbuf, int * recvcounts, int * displs, 
                       MPI_Datatype recvtype, MPI_Comm comm)
    

    您可以使用 recvcountsdispls 使用 v 变体为每个进程的数据指定大小和目标偏移量。

    【讨论】:

    • 能否请您包括scatter和scatterv以及gather和gatherv的签名
    • @Nick 您应该能够在链接的标准文档第 5 章“集体沟通”中找到它们。
    【解决方案2】:

    只是为了补充@Scott Wales 已经给出的答案:

    一般来说,MPI 提供三种类型的集合调用:

    • 从每个目标等级发送/接收相同数量的数据元素和相同数据类型的简单数据。典型示例有:MPI_ScatterMPI_GatherMPI_Alltoall 等。您只需为数据元素中的块大小提供一个参数,为数据类型提供一个参数;

    • 向量变体可以向/从每个目标等级发送/接收不同数量的元素,但所有发送/接收的数据类型仍然相同。这些变体具有后缀“v”:MPI_ScattervMPI_GathervMPI_Alltoallv 等。除了块大小的参数被两个整数向量参数替换(因此vector):一个用于元素数量,一个用于从每个数据块的数据缓冲区开始的偏移量(以元素为单位)(始终按该顺序);

    • 最通用的类​​型,也可以将不同数据类型的元素发送到通信器中的每个进程。这些变体具有后缀“w”。并非所有的集体都有这样的变体,MPI_Alltoallw 是 MPI 标准 2.2 版(最新发布的标准)中唯一的一个,并且在 3.0 版中还会有更多。

    由于 MPI 是一个标准,并且所有 MPI 实现都必须符合该标准(事实上大多数都这样做),您可以使用您最喜欢的搜索引擎搜索感兴趣的 MPI 函数,然后只需阅读第一本手册出现的页面。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2021-12-25
      • 2020-05-10
      • 2014-09-20
      • 2010-10-28
      • 2015-10-04
      • 2012-08-12
      • 2011-02-18
      相关资源
      最近更新 更多