我希望在 Beowulf 集群中并行化一些代码,这样所涉及的 CPU 就不会共享地址空间。我想在外循环中并行化一个函数调用。函数调用没有任何“重要”的副作用(尽管它们确实使用随机数生成器、分配内存等)。
我看过像 MPI 这样的库,我看到的问题是它们似乎使得在节点之间传递复杂的对象图变得非常重要。我的函数的输入是指向一个非常复杂的对象图的 this 指针。我的函数的返回类型是另一个复杂的对象图。
在与语言无关的级别(我正在使用 D 编程语言,我几乎可以肯定这里没有可用的罐装解决方案,但我愿意创建一个),是否有一种“典型”的方式来传递复杂的处理跨节点的状态?理想情况下,我希望完全抽象出如何复制状态的详细信息,并使调用看起来几乎像正常的函数调用。我不在乎通过网络复制这么多状态并不是特别有效,因为所讨论的并行级别是如此粗粒度,以至于它可能无关紧要。
编辑:如果没有简单的方法来传递复杂的状态,那么通常如何使用消息传递?在我看来,任何涉及通过网络复制数据的事情都需要粗粒度的并行性,但粗粒度的并行性通常需要传递复杂的状态,以便可以在一个工作单元中完成大量工作。