另一个与@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年后,我没有做过太多OpenMP,直到大约2年前,当时多核处理器真的开始无处不在。现在,我可能两者都做相等的量。
就你的进一步(自我)教育而言,我认为Chapman et al所著的书籍《使用OpenMP》比Chandra的书籍更好,仅因为它更加时新。我认为Chandra的书籍先于OpenMP 2,而Chapman的书籍则先于值得学习的OpenMP 3。
在MPI方面,Gropp等人所著的书籍
Using MPI 和
Using MPI-2 是必不可少的;这可能是因为它们是 (就我所知) 唯一的教程介绍MPI,而不是因为它们的卓越性。但我不认为它们很差,要知道它们并没有太多竞争。我也喜欢Karniadakis和Kirby所写的
Parallel Scientific Computing in C++ and MPI,但根据您在科学计算方面的了解程度,您可能会发现其中大部分内容过于基础。
但是,我认为该领域完全缺乏(希望有人能证明我错了吗?)关于并行执行程序设计的好教材(或一些教材),这些教材可以帮助有经验的Fortran程序员从串行程序设计向并行程序设计跨越。有很多关于如何并行化循环或循环嵌套的信息,但是关于在结构化正半定矩阵(或其他)上并行化计算的选项却不多。为了获取这种水平的信息,我们必须深入研究研究论文(如果您在学术机构工作,ACM和IEEE数字图书馆绝对值得适度年费 —— 您的图书馆可能已经订阅了这些以及更多内容,我很幸运,因为我的雇主支付我的专业学会会员资格和附加部分,但如果他们没有,我就必须自己支付)。
至于您计划使用24个处理器(CPU?还是核心?其实并不重要,只是问一下)的新实验室,那么您应该根据您的钱包深度来决定。如果您有负担得起的能力,我建议:
— 考虑一台共享内存计算机,一年前Sun、SGI和IBM都可以提供具有这种数量处理器核心的共享内存系统,我不确定当前市场状况如何,但既然您有时间到二月份作出决定,那么值得去了解一下。共享内存系统为您提供了共享内存并行处理的选项,而集群则没有,并且在共享内存平台上进行消息传递应该会非常快速。(顺便说一句,如果您走这条路,请对系统的这方面进行基准测试,共享内存计算机上有一些糟糕的MPI实现。)在共享内存计算机上良好的MPI实现(我最后一次使用的是512处理器的SGI Altix)不发送任何消息,只是移动一些指针,并且因此快得惊人。Altix的问题是,超过128个处理器时,内存总线往往会被所有流量淹没;那时需要切换到集群或MPP盒子上的MPI。
— 再次,如果您有负担得起,我建议找一个系统集成商为您交付一个运行良好的系统,避免自己构建集群(或其他什么)。如果您和我一样,首先是程序员,其次才是不情愿的系统集成商,这种方法更容易,并且可以为您提供一个可以上手编程的工作系统。
如果你负担不起昂贵的选项,那么我建议选择尽可能多的4核或8核每个机箱的机架式服务器(选择取决于价格,甚至今天考虑每个机箱16核也是值得的),而且现在,我会计划每个核心至少4GB RAM。然后你需要最快的互连技术,你能负担得起千兆以太网就可以了,但Infiniband(或者其他一个我忘记名字的)更好,尽管价格上涨明显。你还需要一台PC作为新集群的主节点,运行作业管理系统和其他东西。在互联网上有大量关于构建和运行集群的优秀材料,通常在Beowulf的标题下,它被认为是第一个“自制”集群的名称。
现在,既然你有到2月的时间来启动实验室,就解雇两个同事并将他们的PC变成一个小型Beowulf。下载并安装一个看起来合适的MPI安装程序(OpenMPI很好,但还有其他选择,你的操作系统可能会指定另一种选择)。现在你可以开始准备实验室了。
PS如果你能以其他方式找到2台PC,就不必解雇2个人。这些PC可以是旧的、不足以用于桌面的,它们只是你和你的同事(如果还有)的培训平台。它们越相似,就越好。