C++ MPI 创建和发送具有字段 char[16] 和整数的结构数组
C++ MPI create and send array of structs which has fields char[16] and integer
我知道网站 上有一个关于此的问题,但它是在 c 中实现的。我需要它的 C++ 版本。
问题如下:
我创建了一个具有以下形式的结构
struct word
{
char value[WORD_MAX_LENGTH];
int freq;
};
我需要发送这些结构的数组。我如何序列化这个结构并使用 MPI_Send.
将其中的 500 个发送到另一个进程
这是我到目前为止的进展:
MPI_Datatype word_type, oldtypes[2];
int blockcounts[2];
MPI_Aint offsets[2], extent;
//Determine the offset and block length of the first element of the struct which is a char array.
offsets[0] = 0;
oldtypes[0] = MPI_CHAR;
blockcounts[0] = WORD_MAX_LENGTH;
//Determine the offset of int ferq of the struct.
MPI_Type_extent(MPI_CHAR, &extent);
offsets[1] = 16 * extent;
blockcounts[1] = 1;
// Finally create the type.
MPI_Type_create_struct(2, blockcounts, offsets, oldtypes, &word_type);
MPI_Type_commit(&word_type);
当我这样做时,它编译时没有错误,但是当我尝试 运行 它时。
它抱怨
Fatal error in PMPI_Type_create_struct: Invalid datatype, error stack:
PMPI_Type_create_struct(173): MPI_Type_create_struct(count=2,
array_of_blocklengths=0x7fffbd059f70,
array_of_displacements=0x7fffbd059f80, array_of_types=0x7fffbd059f60,
newtype=0x7fffbd059f14) failed
PMPI_Type_create_struct(142): Invalid datatype
如有任何帮助,我们将不胜感激。
注意:我不能使用 boost 库。
至少有两个问题
oldtypes[1]
未初始化
offsets[1]
看起来很奇怪,您可以使用 offsetsof()
宏代替
如果您的编译器在 word
严格的末尾添加了一些填充,您可能还必须 MPI_Type_create_resized()
。
我知道网站
问题如下: 我创建了一个具有以下形式的结构
struct word
{
char value[WORD_MAX_LENGTH];
int freq;
};
我需要发送这些结构的数组。我如何序列化这个结构并使用 MPI_Send.
将其中的 500 个发送到另一个进程这是我到目前为止的进展:
MPI_Datatype word_type, oldtypes[2];
int blockcounts[2];
MPI_Aint offsets[2], extent;
//Determine the offset and block length of the first element of the struct which is a char array.
offsets[0] = 0;
oldtypes[0] = MPI_CHAR;
blockcounts[0] = WORD_MAX_LENGTH;
//Determine the offset of int ferq of the struct.
MPI_Type_extent(MPI_CHAR, &extent);
offsets[1] = 16 * extent;
blockcounts[1] = 1;
// Finally create the type.
MPI_Type_create_struct(2, blockcounts, offsets, oldtypes, &word_type);
MPI_Type_commit(&word_type);
当我这样做时,它编译时没有错误,但是当我尝试 运行 它时。 它抱怨
Fatal error in PMPI_Type_create_struct: Invalid datatype, error stack:
PMPI_Type_create_struct(173): MPI_Type_create_struct(count=2,
array_of_blocklengths=0x7fffbd059f70,
array_of_displacements=0x7fffbd059f80, array_of_types=0x7fffbd059f60,
newtype=0x7fffbd059f14) failed
PMPI_Type_create_struct(142): Invalid datatype
如有任何帮助,我们将不胜感激。 注意:我不能使用 boost 库。
至少有两个问题
oldtypes[1]
未初始化offsets[1]
看起来很奇怪,您可以使用offsetsof()
宏代替
如果您的编译器在 word
严格的末尾添加了一些填充,您可能还必须 MPI_Type_create_resized()
。