MPI_Aint 的大小?
Size of 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) ;
因为这个问题。 sizeof() 只要我幸运并且不需要可移植性就可以完成这项工作(这个数组将用于 write/read 具有 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()
。
我有一个关于 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() 只要我幸运并且不需要可移植性就可以完成这项工作(这个数组将用于 write/read 具有 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()
。