MPI_Allgatherv和MPI_Allgatherv之间的差异

MPI_Allgatherv和MPI_Allgatherv之间的差异,mpi,parallel-processing,Mpi,Parallel Processing,MPI\u Allgather()和MPI\u Allgatherv()之间有什么区别 MPI_GATHERV扩展了该功能 通过允许不同的 每个进程的数据计数,自 recvcounts现在是一个数组。它也 允许更灵活地确定位置 数据通过 提供新的参数,显示 MPI_ALLGATHERV则是此的扩展 这两个函数的签名是 int MPI_Allgather(void * sendbuff, int sendcount, MPI_Datatype sendtype,

MPI\u Allgather()
MPI\u Allgatherv()
之间有什么区别

MPI_GATHERV扩展了该功能 通过允许不同的 每个进程的数据计数,自 recvcounts现在是一个数组。它也 允许更灵活地确定位置 数据通过 提供新的参数,显示

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)

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

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

通常,MPI提供三种类型的集合调用:

  • 向每个目的地等级发送/接收相同数量的数据元素和相同数据类型的简单等级。典型示例有:
    MPI_Scatter
    MPI_collect
    MPI_Alltoall
    ,等等。在这些示例中,您只为数据元素中的块大小提供了一个参数,为数据类型提供了一个参数

  • 向量变量,其中可以向/从每个目标列组发送/接收不同数量的元素,但所有发送/接收的数据类型仍然相同。这些变体具有后缀“v”:
    MPI\u Scatterv
    MPI\u Gatherv
    MPI\u Alltoallv
    ,等等。它们与简单变体具有几乎相同的特征,除了块大小的参数被两个整数向量参数(即向量)替换:一个用于元素数,另一个用于偏移量(在元素中)从每个数据块的数据缓冲区开始(始终按该顺序)

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


由于MPI是一种标准,而且所有MPI实现都必须遵守该标准(事实上,大多数MPI都遵守该标准),您只需使用您喜爱的搜索引擎搜索感兴趣的MPI功能,然后阅读出现的第一页手册即可。

您是否可以包括scatter和scatterv以及gather和gather的签名gatherv@Nick您应该能够在链接的标准文件第5章“集体通信”中找到它们。