几分钟前我偶然发现了一些文字,这让我想起了一段时间以来一直在想我的想法,但我无处可问。
所以,希望这可能是人们亲自动手的地方 两者的经验,我想知道是否有人可以解释 OpenMP和MPI有什么区别?
我已经完整阅读了维基百科的文章,了解它们 细分,但我还在思考; 希望有一天能够进入这个世界的Fortran程序员 paralellism(现在只是学习OpenMP的基础知识),还有更多 面向未来的方式?
我很感激你的所有评论
答案 0 :(得分:10)
OpenMP主要用于紧耦合多处理 - 即同一台机器上的多个处理器。它主要用于旋转多个线程来并行执行循环。
MPI主要用于松散耦合多处理 - 即,一组计算机通过网络相互通信。 可以在一台机器上作为一种简并形式的网络使用,但它利用它作为一台机器(例如,在“之间具有极高的带宽通信)相对较少。节点“)。编辑(回应评论):对于24台机器的集群,MPI成为明显的选择。如上所述(类似于@Mark的评论),OpenMP主要用于共享内存的多个处理器。当你没有共享内存时,MPI就成了明智的选择。
与此同时,假设您将要使用多处理器计算机(还有其他什么吗?),您可能希望使用OpenMP在每台计算机的所有处理器之间分配负载。
但请记住,OpenMP通常比MPI更快/更容易投入使用。根据您需要多少加速,扩展而不是扩展(即每台处理器数量更少的机器)可以使软件开发足够快/更便宜,即使它很少给出每核心最低价格。
答案 1 :(得分:8)
答案 2 :(得分:2)
如上所述,由于增量并行化,与MPI相比,OpenMP当然是更容易编程的方式。 OpenMP主要用于细粒度并行(循环级别),而MPI更多的是粗粒度并行性(域分解)。两者都是获得并行性能的好方法。
我们有一个OpenMP和我们软件的MPI版本(Fortran),客户可以根据他们的需要使用它们。
随着多核架构的当前趋势,混合OpenMP-MPI是另一种可行的方法。