我有一个关于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) ;
因为这个问题。只要我幸运并且不需要可移植性,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/