c – MPI_Aint的大小?

我有一个关于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) ;

因为这个问题.只要我很幸运并且我不需要可移植性(sizel()将用于写入/读取带有MPI-I / O的大文件).

但我想知道:分配我的disps数组的干净和便携方式是什么?我对MPI_Aint的评价是什么?

最佳答案 MPI_Aint不是MPI_Type,如MPI_INT,MPI_DOUBLE或您使用MPI_Type_create_hindexed()创建的,MPI_Aint是C语言中的类型,如int,double或struct.实际上我怀疑大多数时候MPI_Aint只是被定义为一个足够大的typedef来存储它需要的东西.最有可能的是,它将被定义为typedef long MPI_Aint;或者typedef long long MPI_Aint;.

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

点赞