我需要使用MPI_Alltoallv
,但我的sendcounts(第二个参数)是一个长整数数组。但是,MPI_Alltoallv
要求它是一个整数数组。我不确定这是不是一个限制。有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
通常,如果您的数据太大而不适合整数大小,那么使用普通的MPI库发送数据可能不安全。有一些非标准的工作可以实现,但如果你想坚持官方支持的方法,有几种方法可以安全地处理它。
INT_MAX
大小,则可以完全避免此问题。你只需发送更多信息。答案 1 :(得分:2)
我喜欢Wes的完整答案。如果你想要一个关于程序如何处理大数量的具体例子,这就是我在ROMIO中的表现:
http://git.mpich.org/mpich.git/blob/HEAD:/src/mpi/romio/adio/common/utils.c
值得指出的是,如果你发送的是几千兆字节的数据,MPI_ALLTOALLV不会比一堆MPI_Isends和MPI_Irecv调用更有效。
答案 2 :(得分:0)
除了其他人的优秀答案之外,您可以做的另一件事是使用MPI_Neighbor_alltoallv,它具有MPI_Aint位移。我已经在BigMPI中使用了这个技巧,你可以轻松地重用我的comm-to-(dist-graph-comm)实用程序功能。
请注意,不能保证long和MPI_Aint是等效的。我的机器上的MPICH 3.2现在也是如此,但在编写可移植代码时,它不是你可以依赖的东西。如果您使用邻域v-collective,请复制您的置换向量或将其更改为MPI_Aint。