gpt4 book ai didi

c++ - MPI 如何发送和接收未知数据类型

转载 作者:行者123 更新时间:2023-11-30 03:05:17 27 4
gpt4 key购买 nike

我们用 C++ 开发了一个算法库,它允许用户实现自己的数据类型,以便在各个算法(也由用户实现)之间共享数据。这工作正常,但我们想在库级别提供并行化。各个算法应该在分布式存储机器的不同节点上并行执行。

我们决定使用 MPI 进行并行化,因为它无需更改代码即可用于分布式和共享内存机器。不幸的是,我们现在正在解决如何在节点之间分配用户实现的数据类型的问题。我们有以下问题:

  • 我们不知道数据有多大,它甚至可能会随着运行而变化。
  • 我们不知道数据结构中有什么数据。
  • 数据量可以很大到1GB(用MPI应该没问题)
  • 用户在实现并行执行的数据类型或算法时应该看不到任何差异(对于算法实际上没有问题)

是否有可能使用 MPI 在节点之间共享这些数据,或者是否有可用的方法,这可能更适合此类问题。我们希望有一个至少可以在共享内存机器上运行的解决方案,但是我们希望有一个无需更改代码即可在共享和分布式内存机器上运行的解决方案。

最佳答案

是的,您可以使用 MPI 做到这一点,但是不行,MPI 不能自己为您做到这一点。

无论您是将此数据发送到另一个节点,还是将其写入磁盘,在某些时候您需要明确描述内存中的数据结构布局,以便它可以是serialized。 .如果您向 MPI(或任何其他通信库)传递一个指针,它不知道该指针的另一边是什么,因此它无法遍历数据结构来复制其内容。

您可以将参数编码为普通的旧数据(手动,或使用 MPI_PACK 之类的东西),或者您可以创建一个 MPI 数据类型来描述该特定实例的内存中数据布局,并将数据复制过来。此外,您需要重定向数据结构中的所有指针。 Boost serialization也许能够帮助您解决所有这些问题。

关于c++ - MPI 如何发送和接收未知数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com