共享内存设置中的MPI开销

共享内存设置中的MPI开销,mpi,distributed,shared-memory,cluster-computing,Mpi,Distributed,Shared Memory,Cluster Computing,我想并行化一个程序。线程在共享内存中处理一个大数据结构并不困难。 但我希望能够使用通过集群分发,我必须选择一种技术来做到这一点。MPI是一个想法 问题是,如果我跳过共享内存专用版本的实现,让MPI处理所有情况,MPI(或其他技术)的开销会是多少 更新: 我想在许多计算机上同时生成一个大型数据结构(游戏树)。 它的大多数部分将只在一个集群节点上,但其中一些(树的顶部不规则)将不时共享和同步 在共享内存机器上,我希望通过共享内存实现这一点。 这能一般地做到吗 这取决于算法。Clealy集群间通信比共

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

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

更新:

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

在共享内存机器上,我希望通过共享内存实现这一点。
这能一般地做到吗

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


对于具有少量节点间通信的“令人尴尬”的并行算法来说,这是一个很容易的选择-这些问题类似于强力搜索加密密钥,其中每个节点可以长时间处理数字并定期向中心节点报告,但不需要通信来测试密钥。

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


有了好的网络硬件(如InfiniBand),HCA负责将缓冲区接入和断开网络,以便CPU可以做其他事情。此外,由于许多作业的内存带宽有限,因此在多个节点上使用每个插槽上的一个内核比在每个插槽上使用多个内核时性能更好。

正如Loster所说,请提供您想要并行化的算法的更多细节。