我们用C ++开发了一个算法库,允许用户实现自己的数据类型,以便在各个算法之间共享数据(也由用户实现)。 这很好,但我们想在库级提供并行化。各个算法应该在分布式内存机器的不同节点上并行执行。
我们决定使用MPI进行并行化,因为它可以用于分布式和共享内存机器而无需更改代码。 不幸的是,我们现在争论如何在节点之间分发用户实现的数据类型。我们有以下问题:
是否有可能使用MPI在节点之间共享这些数据,或者是否有可用的方法,这可能更适合此类问题。 我们希望有一个至少在共享内存机上运行的解决方案,但我们希望有一个解决方案,无需在共享和分布式内存机器上进行代码更改。
答案 0 :(得分:3)
是的,你可以用MPI做到这一点,但不,MPI不能单独为你做这件事。
无论您是将此数据发送到另一个节点,还是将其写入磁盘,您都需要在内存中明确描述数据结构布局,以便它可以serialized。如果您传递MPI(或任何其他通信库)指针,它不知道该指针另一侧的内容,因此它无法遍历数据结构以复制其内容。
您可以将参数编组为普通旧数据(手动或使用MPI_PACK之类的东西),或者您可以创建一个MPI数据类型,该数据类型描述该特定实例的内存中数据的布局,并将数据复制过来。此外,您还需要重定向数据结构中的任何指针。 Boost serialization可以帮助您完成所有这些工作。