c - MPI_Aint 的大小?

标签 c mpi

我有一个关于MPI_Aint 的简单问题,但我没有在任何地方找到任何答案。出于某种原因,MPI_Type_size(MPI_Aint) 不起作用(它看起来不像经典数据类型,例如 MPI_DoubleMPI_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_INTMPI_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/

相关文章:

c - C 上的相同地址空间

c - 如何就地修改项目(无需复制/传递缓冲区)

c - 使用 malloc 类型重合

c - 删除数组中重复的以下单词

使用 mvapich2 与 openmpi 比较 MPI 线程死锁期间的 CPU 利用率

c - MPI 减少到特定的接收缓冲区地址

c++ - 当我尝试构建 gnome builder 时,ninja 在 glib ctype.h 文件中给出错误

c - MPI:程序工作取决于进程数

c++ - 从C++ Lambda函数创建MPI约简运算符

c++ - 由于某种原因必须发送 MPI 消息两次