我有一个关于MPI_Aint的简单问题,但是在任何地方都找不到任何答案。出于某种原因,至少在OpenMPI 1.8.4和1.10.1中,MPI_Type_size(MPI_Aint)不起作用(它看起来不像经典数据类型,例如MPI_DoubleMPI_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_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()来分配数组的方法是正确的。

关于c - MPI_Aint的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36317835/

10-11 17:55