随着MPI3.0社区集体通信的引入.在其中2个(MPI_NEIGHBOR_ALLTOALLW和MPI_INEIGHBOR_ALLTOALLW)位移(sdispls和rdispls)是数组const MPI_Aint.相反,如何定义相同但集体的功能(MPI_ALLTOALLW和MPI_ALLTOALLW) - 阵列const int.
还要考虑MPI标准v3.0关于MPI_Aint的内容(第16页):
2.5.6地址
某些MPI过程使用表示调用程序中的绝对地址的地址参数.这种参数的数据类型是C中的MPI_Aint和Fortran中的INTEGER(KIND = MPI_ADDRESS_KIND).这些类型必须具有相同的宽度并以相同的方式编码地址值,以便一种语言中的地址值可以直接传递给另一种语言而无需转换.MPI常量MPI_BOTTOM表示地址范围的开始.
我还是不明白了吧,如果存在,区别(除了那MPI_Aint间不能为负数)int和MPI_Aint!
MPI_Aint是一种可以保存内存地址的便携式C数据类型,它可能比平常更大int.MPI论坛的政策是不改变现有MPI调用的签名(因为它可能破坏现有的应用程序 - 见此处).而是引入了取代旧呼叫的新呼叫.基本原理是int在LP64 64位架构变得流行之前运行良好,此时int无法再使用它来解决单个进程的整个虚拟地址空间.在此实现之后,一些MPI调用在以后的版本中使用MPI_Aint或MPI_Count(大整数类型)而不是int.例如,MPI_Get_count_x替代MPI_Get_count和使用MPI_Count替代int.
在这方面MPI_Alltoallw是一个旧的调用(它来自MPI-2.0)并且它保留了使用int偏移的签名,而它MPI_(I)Neighbor_alltoallw是一个新的(它带有MPI-3.0)并且它使用地址类型以便能够使用数据位于(几乎)内存中的任何位置.
这同样适用于Fortran绑定.