MPI_Aint 的大小?

Size of MPI_Aint?

我有一个关于 MPI_Aint 的简单问题,但我没有在任何地方找到任何答案。出于某种原因,MPI_Type_size(MPI_Aint) 不起作用(它看起来不像经典数据类型,例如 MPI_DoubleMPI_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) ;

因为这个问题。 sizeof() 只要我幸运并且不需要可移植性就可以完成这项工作(这个数组将用于 write/read 具有 MPI-I/O 的大文件)。

但我想知道:什么是分配我的 disps 数组的干净且可移植的方法? MPI_Aint 我错过了什么?

MPI_Aint 不是 MPI_Type,例如 MPI_INTMPI_DOUBLE 或者您使用 MPI_Type_create_hindexed()MPI_Aint 创建的是输入 C 语言,例如 intdoublestruct。事实上,我怀疑大多数时候 MPI_Aint 将被简单地定义为 typedef 足够大以存储它需要的东西。最有可能的是,它将被定义为 typedef long MPI_Aint;typedef long long MPI_Aint;.

因此,您分配数组的方法是正确的,使用 sizeof() 而不是 MPI_Type_size()