【问题标题】:Send structure with dynamically allocated arrays in MPI在 MPI 中发送具有动态分配数组的结构
【发布时间】:2021-07-23 03:39:15
【问题描述】:

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

我有两个主要想法:

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

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

【问题讨论】:

  • 如果性能问题很严重并且适用,请使用单个malloc() 分配您的数据,并让struct 的第二个和第三个成员指向它。

标签: c mpi


【解决方案1】:

在这三个选项中,打包/解包可能是最好的选择。 (2) 基本上是 Pack/Unpack 所做的。如果结构内的元素是动态分配的,则 MPI_Type_struct 将不起作用。

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

【讨论】:

    猜你喜欢
    • 2019-07-19
    • 2021-06-11
    • 2017-02-07
    • 1970-01-01
    • 2014-04-18
    • 2015-03-09
    • 2020-10-03
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多