0

我想并行化一个程序。在共享内存中处理一个大数据结构的线程并不难。但是我希望能够在集群上使用它,我必须选择一种技术来做到这一点。MPI 是一种想法。

问题是如果我跳过共享内存专用版本的实现并让 MPI 处理所有情况,MPI(或其他技术)会有什么开销?

更新:

我想在多台计算机上同时增长一个大型数据结构(游戏树)。它的大部分将仅在一个集群节点上,但其中一些(树的不规则顶部)将不时共享和同步。

在共享内存机器上,我想通过共享内存来实现这一点。这可以通用吗?

4

2 回答 2

1

所有流行的 MPI 实现都将通过共享内存进行本地通信。只要您不花费所有时间打包和解包缓冲区(即您的设计是合理的),性能就非常好。事实上,MPI 强加给您的设计可以比大多数线程实现执行得更好,因为单独的地址空间提高了高速缓存的一致性。为了始终击败 MPI,线程实现必须了解缓存层次结构以及其他内核正在处理的内容。

借助良好的网络硬件(如 InfiniBand),HCA 负责让您的缓冲区进入和离开网络,以便 CPU 可以做其他事情。此外,由于许多作业都受到内存带宽的限制,因此使用多个节点的每个插槽上的 1 个核心比使用每个插槽的多个核心时它们会执行得更好。

于 2009-11-13T20:49:57.723 回答
0

这取决于算法。无论是作为进程间通信还是进程内的多个线程,Clealy 集群间通信都比共享内存慢几个数量级。因此,您希望最大限度地减少集群间流量,例如通过在可能和可行的情况下复制数据或以最大限度地减少节点间通信的方式分解问题。

对于节点间通信很少的“尴尬”并行算法,这是一个简单的选择——这些问题例如暴力搜索加密密钥,每个节点可以长时间处理数字并定期向中央节点报告,但不需要通信测试键。

于 2009-10-10T01:07:20.700 回答