C ++ MPI创建并发送具有字段char [16]和整数的结构数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++ MPI创建并发送具有字段char [16]和整数的结构数组相关的知识,希望对你有一定的参考价值。

我知道here网站上有一个关于此的问题,但这是在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()宏代替

如果你的编译器在MPI_Type_create_resized() strict的末尾添加了一些填充,你可能还需要word

以上是关于C ++ MPI创建并发送具有字段char [16]和整数的结构数组的主要内容,如果未能解决你的问题,请参考以下文章

MPI在C ++中发送具有向量属性的结构

C-MPI 发送创建的带有字符数组的 typedef 结构

在 MPI 中发送和接收数组

在 C 中的 MPI 中如何创建结构结构并将其发送到多个进程

我可以创建一个用于存储数据的结构并通过 MPI 发送它吗?

在 MPI 和 C 中,如何将结构信息的结构发送到从属进程并接收它们?