MPI从结构派生的类型

时间:2012-11-02 21:05:31

标签: mpi derived-types

我必须转移一些类型的元素:     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类型的数组的代码失败了,可能是因为这种不匹配。

1 个答案:

答案 0 :(得分:3)

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

至于发送失败,我不能在没有看到你的代码的情况下说太多,但你的数据类型定义看起来是正确的。