OpenMP和MPI解释

Fri*_*ich 5 fortran openmp openmpi

几分钟前我偶然发现了一些文字,这让我想起了一段时间以来一直在想我的想法,但我无处可问.

所以,希望这可能是人们亲身体验这两者的地方,我想知道是否有人可以解释OpenMP和MPI之间的区别?

我已经完整地阅读了维基百科的文章,分段理解它们,但我仍然在思考; 对于希望有一天能够进入瘫痪世界的Fortran程序员(现在只是学习OpenMP的基础知识),还有什么能够面向未来的方向?

我很感激你的所有评论

Jer*_*fin 10

OpenMP主要用于紧耦合多处理 - 即同一台机器上的多个处理器.它主要用于旋转多个线程来并行执行循环.

MPI主要用于松散耦合多处理 - 即,一组计算机通过网络相互通信.它可以在单个机器上用作网络的简并形式,但是它利用它作为单个机器(例如,在"节点"之间具有极高带宽通信)相对较少.

编辑(回应评论):对于24台机器的集群,MPI成为明显的选择.如上所述(类似于@Mark的评论),OpenMP主要用于共享内存的多个处理器.当您没有共享内存时,MPI成为明智的选择.

同时,假设您将要使用多处理器计算机(还有其他什么吗?),您可能希望使用OpenMP在每台计算机的所有处理器之间分配负载.

但请记住,OpenMP通常比MPI更快/更容易投入使用.根据您需要多少加速,扩展而不是扩展(即每台处理器数量更少的机器)可以使软件开发更快/更便宜,即使它很少提供每个核心的最低价格也是值得的.


Hig*_*ark 8

另一个与@Jerry已经编写的内容不一致的观点是,OpenMP用于共享内存并行化,MPI用于分布式内存并行化.在分布式系统上模拟共享内存很少令人信服或成功,但在共享内存系统上使用MPI是一种非常合理的方法.

当然,如今所有(?)多核PC和服务器都是共享内存系统,因此OpenMP的执行模型可广泛应用.MPI倾向于在集群上形成自己的集群,在集群上,处理器通过网络彼此通信(有时称为互连,并且通常比办公室以太网具有更高的规格).

在应用方面,我估计可以使用OpenMP或MPI成功实现大部分并行程序,并且您在两者之间的选择可能最好由硬件的可用性驱动.我们中的大多数人(并行端)会认为OpenMP比MPI更容易进入,并且肯定(我断言)使用OpenMP比使用MPI更容易逐步并行化现有程序.

但是,如果你需要使用比一个盒子里更多的处理器(以及有多少处理器正在稳步增加),那么MPI是你更好的选择.您也可能偶然发现混合编程的想法 - 例如,如果您拥有多核PC集群,则可以在PC之间使用MPI,在PC中使用OpenMP.我没有看到任何证据表明编程的额外复杂性得到了改进性能的奖励,而且我已经看到一些证据表明它绝对不值得付出努力.

而且,正如其中一条评论已经说明的那样,我认为Fortran在并行,高性能,科学和工程应用领域具有足够的前瞻性.该标准的最新版本(2008年)将共同阵列(即,本身分布在具有非本地和本地访问的存储器系统中的阵列)直接包含在语言中.甚至有一两个早期实现此功能.我还没有任何经验,并期望几年内会出现问题.

编辑在OP的评论中提出了许多要点......

不,我认为通过OpenMP处理并行计算并不是一个坏主意.我认为OpenMP和MPI(或者更确切地说,它们实现的并行计算模型)是互补的.我当然使用两者,我怀疑大多数专业的并行程序员也会这样做.自大约6年前离开大学以来,直到大约2年前,当多核真正开始出现在各处时,我没有做过多少OpenMP.现在我可能会做同等数量的两者.

在你进一步(个体经营)教育方面我觉得这本书使用OpenMP的查普曼等人比一个由钱德拉更好,如果仅仅是因为它更是最新的.我认为钱德拉的书早于OpenMP 2,而查普曼的书早于OpenMP 3,值得学习.

在MPI方面,Gropp 等人的着作 " 使用MPI使用MPI-2"是不可或缺的; 这可能是因为它们(据我所知)是MPI的唯一教程介绍,而不是因为它们的优秀.我不认为他们是坏人,请注意,但他们没有很多竞争对手.我喜欢C++中的Parallel Scientific Computing和 Karniadakis以及Kirby的MPI ; 根据您的科学计算知识水平,您可能会发现许多材料太基础.

但我认为该领域完全缺少(希望有人能证明我错了吗?)是的并行执行,什么来帮助经验丰富的Fortran语言(在我们的例子)的程序员使程序设计的好教材(或课本的少数)从串行程序跳转到并行程序设计.有关如何并行循环或循环嵌套的大量信息,而不是关于在结构化正半定矩阵(或其他)上并行计算的选项.对于信息的水平,我们必须比较硬钻进去的研究论文(ACM和IEEE数字图书馆是非常值得的温和的年度成本 - 如果你是在一个学术机构的图书馆可能有订阅这些以及更多的事情,我幸运的是,我的雇主支付我的专业社团会员资格和附加费,但如果他们没有

至于你的计划有,比方说,24个处理器一个新的实验室(的CPU?或核心?,其实并不重要,只是要求),那么你走的路线应该取决于你的口袋里的深处.如果你负担得起,我建议:

- 考虑共享内存的电脑,肯定一年前的Sun,SGI和IBM都可以提供一个共享的存储系统与那种核心的数量,我不知道市场的当前状态,但既然你有直到2月才决定值得研究.共享内存系统为您提供了共享内存并行选项,而集群没有该选项,并且共享内存平台上的消息传递应该以较快的速度运行.(顺便说一句,如果你走这条路线,基准系统的这一方面,已经对共享内存的计算机一些不好的MPI实现.)共享内存的计算机上的一个很好的MPI实现(我这最后的经验是上一个512处理器SGI Altix)不发送任何消息,它只是移动几个指针,因此,速度非常快.Altix的问题在于超过128个处理器,内存总线往往会被所有流量所淹没; 那是在群集或MPP盒子上切换到MPI的时候了.

- 同样,如果你能负担得起,我建议让系统集成商为你提供一个工作系统,并避免自己构建集群(或其他任何东西).如果像我一样,你是第一个程序员而第二个不情愿的系统集成商,这是一个更简单的方法,它将为您提供一个工作系统,您可以更快地开始编程.

如果你负担不起昂贵的选择,那么我会购买每盒4或8个核心的机架式服务器(选择取决于价格,甚至每盒16个核心今天也值得考虑),今天,我计划每个核心至少4GB RAM.那么您需要最快的互连; GB以太网是好的,但Infiniband(或其他名字我忘记了)更精细,虽然价格的跳跃是显而易见的.而且你需要一台PC作为新集群的头节点,运行作业管理系统和其他东西.互联网上有很多关于建立和运行集群的优秀材料,通常在Beowulf的标题下,这是被认为是第一个"家庭酿造"集群的名称.

现在,既然你要到2月份才能启动并运行你的实验室,那么就要解雇你的同事并将他们的PC变成迷你Beowulf.下载并安装一个看起来很可能的MPI安装(OpenMPI很好,但还有其他人要考虑,你的o/s可能会指示另一个选择).现在,您可以在实验室准备就绪时做好准备.

PS如果你可以通过其他方式清除2台PC,你不必解雇2人.PC可能陈旧且不适合桌面使用,它们将成为您和您的同事的培训平台(如果您有任何剩余的话).它们越相似越好.