MPI从结构派生



我必须传输许多类型的元素: typedef struct { float w; int a, b; } edge;在不同的过程中,我正在创建类型的MPI派生类型:

unsigned int typecount;
MPI_Datatype PEDGE, types[2] = { MPI_FLOAT, MPI_INT };
MPI_Aint offsets[2], extent;
int blocklen[2] = { 1, 2 };
typecount     = 2;
offsets[0]    = 0;
MPI_Type_extent(MPI_FLOAT, &extent);
offsets[1]    = (1*extent);
MPI_Type_struct (typecount, blocklen, offsets, types, &PEDGE);
MPI_Type_commit(&PEDGE);

当我进行sizeof(edge)时,我得到了12个字节,但是当我进行sizeof(PEDGE)时,我只能得到8个字节...为什么?除此之外,我的代码将PEDGE类型的某些元素发送到edge类型的数组中,可能是由于此不匹配而失败。

这里的问题是,诸如PEDGE之类的MPI_Datatype对象本身并不是新的数据类型,仅仅是MPI可以将其解释为数据类型的某些实现特定实体的不透明句柄。因此,sizeof()将无法返回其准确的尺寸。改用MPI_Type_size()

至于发送失败,我不能看不到您的代码,但是您的数据类型定义确实正确。

最新更新