我必须传输许多类型的元素: 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()
。
至于发送失败,我不能看不到您的代码,但是您的数据类型定义确实正确。