2012-05-13 35 views
1

我使用MPI_Scatterv撒一个非常大的数组:误差与长位移MPI scatterv

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

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

任何想法,我怎么能以某种方式解决这个问题?

回答

2

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

直到MPI 3.0成为标准并且符合标准的实现出来以后,我会坚持一些子通信方案,比如将数据分散到多个分散的子集中。

1

为什么不分配你的散点以及int类型就足够了?

您可以考虑将MPI进程作为树的节点运行。并且让中间树节点具有它们自己的相应子树的分散/聚集。

0

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