1

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

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

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

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

4

1 回答 1

3

是的,您可以使用 MPI 执行此操作,但不,MPI 不能自己为您执行此操作。

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

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

于 2011-10-19T15:27:18.667 回答