在 MPI 中发送具有动态分配数组的结构

Send structure with dynamically allocated arrays in MPI

我想就我发现自己在我的项目中的情况发表意见。我基本上有一个由一个整数、一个整数数组和一个字符数组组成的结构。我需要将这个结构发送到另一个进程。问题是结构中的这两个数组是动态分配的(实际上它们是指针)。执行此操作的最佳方法是什么?

我有两个主要想法:

  1. 使用打包和解包,但这很重(经常重复发送)。
  2. 将所有三个数据连接到一个数组中,然后通过简单的发送将其发送。
  3. 使用MPI_Type_struct但我不知道这个数组的具体大小(它在所有发送中经常变化)。

有人可以帮助我。我不上传代码,因为很复杂很长。

在这三个选项中,Pack/Unpack 可能是最佳选择。 (2) 基本上就是 Pack/Unpack 所做的。 MPI_Type_struct 如果结构中的元素是动态分配的,将无法工作。

另一种选择是简单地在单独的消息中发送数组。避免额外的缓冲区和 packing/unpacking 但当然会发送更多消息,因此在性能方面可能更好或更差。如果数组非常小,它可能会更糟,否则可能不会有太大的不同甚至更快。试试看,看看什么是最好的。