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标准2.2版(最新发布的版本)中的唯一变体,3.0版中还有更多变体MPI\u Alltoallw
由于MPI是一种标准,而且所有MPI实现都必须遵守该标准(事实上,大多数MPI都遵守该标准),您只需使用您喜爱的搜索引擎搜索感兴趣的MPI功能,然后阅读出现的第一页手册即可。您是否可以包括scatter和scatterv以及gather和gather的签名gatherv@Nick您应该能够在链接的标准文件第5章“集体通信”中找到它们。