MPI_allgather和MPI_allgatherv之间的区别

时间:2011-05-03 05:48:15

标签: mpi parallel-processing

MPI_allgather()MPI_allgatherv()之间的区别是什么?

2 个答案:

答案 0 :(得分:6)

来自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)

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

答案 1 :(得分:3)

只是为了增加@Scott Wales已经给出的答案:

通常,MPI提供三种类型的集体呼叫:

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

    < / LI>
  • 向量变体,其中可以向/从每个目标等级发送/接收不同数量的元素,但是对于所有发送/接收,数据类型仍然相同。这些变体的后缀为&#34; v&#34;:MPI_ScattervMPI_GathervMPI_Alltoallv等。它们与简单的签名具有几乎相同的签名,除了参数为块大小由两个整数向量参数(因此向量)替换:一个用于元素数量,一个用于从每个数据块的数据缓冲区开始的偏移量(在元素中)(始终在那个订单);

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

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

相关问题