我有一个关于MPI_Aint
的简单问题,但是在任何地方都找不到任何答案。出于某种原因,至少在OpenMPI 1.8.4和1.10.1中,MPI_Type_size(MPI_Aint)
不起作用(它看起来不像经典数据类型,例如MPI_Double
或MPI_Int
),但我认为这不是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()就能完成工作(此数组将用于通过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()
来分配数组的方法是正确的。
关于c - MPI_Aint的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36317835/