2

我正在使用 MPI_Scatterv 分散一个非常大的数组:

MPI_Scatterv(list, counts, displacements, MPI_LONG, pSubList, counts[rank], MPI_LONG, MASTER, MPI_COMM_WORLD);

并且我已经声明了变量计数位移(int 类型是不够的),但是,MPI_Scatterv 只接受用于计数和位移的 int 变量。

关于如何以某种方式解决这个问题的任何想法?

4

3 回答 3

2

您不能用 long 代替 int,至少在大多数 MPI 2.2 实现中是这样。即使您按照 Greg 的建议创建用户定义的数据类型,您也可能(并且大多数情况下)会遇到实现限制,例如使用整数在内部表示偏移量。MPI 3.0 草案专门解决了这个问题,并要求在 C 和 Fortran 绑定中偏移和计数参数都是长(64 位)类型。

在 MPI 3.0 成为标准并且符合标准的实现出来之前,我会坚持使用一些子通信方案,比如将数据分布在几轮中,并将多个分散的数据分散到等级子集。

于 2012-05-13T08:04:50.860 回答
1

为什么不分发你的散点图,这样 int 类型就足够了?

您可以将 MPI 进程视为树的节点运行。并让中间树节点有自己的相应子树的分散/聚集。

于 2012-05-13T01:44:18.553 回答
0

您可以创建自定义 MPI 数据类型来表示 LONG 块。位移和计数将是该块大小的倍数。

于 2012-05-13T02:12:33.770 回答