我有一个关于MPI_Aint的简单问题,但是我在任何地方都找不到答案。由于某种原因,MPI_Type_size(MPI_Aint)不起作用(它看起来不像经典的数据类型,例如MPI_Double或MPI_Int),至少在OpenMPI 1.8.4和1.10.1中是这样,但我不认为这是一个OpenMPI的问题。
我必须使用MPI_Type_create_hindexed()创建一个类型,并动态分配array_of_displacements数组。计算大小N后,我写了:
MPI_Aint* disps = (MPI_Aint*) malloc(N*sizeof(MPI_Aint)) ;
替代
int mpiAintSize ;
MPI_Type_size(MPI_Aint, &mpiAintSize) ;
MPI_Aint* disps = (MPI_Aint*) malloc(N*mpiAintSize) ;
因为这个问题,只要我幸运且不需要可移植性(这个数组将用于使用MPI-I/O写入/读取大型文件),sizeof() 就可以完成工作。
但是我想知道:分配我的 disps 数组的最佳方法是什么?我在 MPI_Aint 方面错过了什么?
MPI_Aint
作为C类型不存在可移植性问题。我们从不读/写MPI_Aint
,我们只使用它们的值来定义结构(这不取决于它们在内存中的大小)。因此,无需为它们创建统一(可移植)的MPI_Type
。 - Robin Huart