本节涵盖的内容适用于 Linux 的所有四种并行处理模型。
我主要以编译器研究员而闻名,因此我很想说有很多非常出色的编译器可以为 Linux 系统自动生成高效的并行代码。 但遗憾的是,事实是,在 C 代码中使用各种显式通信和其他并行操作来表达您的并行程序,然后通过 GCC 编译,这种方式获得的性能很难被超越。
以下语言/编译器项目代表了从高级语言生成相当高效代码的一些最佳尝试。一般来说,每种语言/编译器对于其目标编程任务类型都相当有效,但没有一种是功能强大的通用语言和编译器系统,能够让您永远停止编写 C 程序并使用 GCC 编译... 这也没关系。 按照这些语言和编译器的预期用途使用它们,您将获得更短的开发时间、更轻松的调试和维护等等好处。
除了这里列出的语言和编译器之外(按字母顺序排列),还有很多其他的语言和编译器。 免费提供的编译器列表(其中大多数与 Linux 并行处理无关)位于 http://www.idiom.com/free-compilers/。
至少在科学计算领域,Fortran 将永远存在。当然,现在的 Fortran 与 1966 年 ANSI 标准中的含义已不相同。 基本上,Fortran 66 非常简单。 Fortran 77 添加了大量功能,最显着的是改进了对字符数据的支持以及 DO
循环语义的更改。 PCF(并行计算论坛)Fortran 试图为 77 添加各种并行处理支持功能。 Fortran 90 是一种功能齐全的现代语言,本质上是在 77 语言中添加了类似 C++ 的面向对象编程功能和并行数组语法。 HPF(高性能 Fortran,http://www.crpc.rice.edu/HPFF/home.html)本身经历了两个版本(HPF-1 和 HPF-2),本质上是我们许多人过去所知的 CM Fortran、MasPar Fortran 或 Fortran D 的增强标准化版本;它通过各种并行处理增强功能扩展了 Fortran 90,主要侧重于指定数据布局。 最后,Fortran 95 代表了对 90 的相对较小的增强和改进。
通常适用于 C 的方法也适用于 f2c
、g77
(http://linux.uni-regensburg.de/psi_linux/gcc/html_g77/g77_91.html 上提供了不错的 Linux 特定概述)或 http://extweb.nag.co.uk/nagware/NCNJNKNM.html 的商业 Fortran 90/95 产品。 这是因为所有这些编译器最终都归结为 GCC 后端中使用的相同代码生成。
来自 http://www.kai.com/ 和 http://www.psrv.com/vast/vast_parallel.html 的商业 Fortran 并行化器可以为 SMP 生成代码。目前尚不清楚这些编译器是否适用于 SMP Linux,但考虑到标准 POSIX 线程(即 LinuxThreads)在 SMP Linux 下工作,这应该是可行的。
The Portland Group,http://www.pgroup.com/,拥有商业并行化 HPF Fortran(和 C、C++)编译器,可以为 SMP Linux 生成代码;它们还有一个版本针对使用 MPI 或 PVM 的集群。 http://www.apri.com/ 的 FORGE/spf/xHPF 产品也可能对 SMP 或集群有用。
可能适用于并行 Linux 系统的免费并行化 Fortran 包括
我相信我遗漏了许多可能对各种 Fortran 方言有用的编译器,但编译器太多了,很难追踪。 未来,我希望只列出已知适用于 Linux 的编译器。 请将意见和/或更正发送电子邮件至 hankd@engr.uky.edu。
GLU(粒度 Lucid)是一个非常高级的编程系统,基于混合编程模型,该模型结合了内涵型(Lucid)和命令型模型。 它同时支持 PVM 和 TCP 套接字。 它是否在 Linux 下运行? 更多信息请访问 http://www.csl.sri.com/GLU.html。
Jade 是一种并行编程语言,它扩展了 C 语言,以利用顺序命令式程序中的粗粒度并发性。 它假设分布式共享内存模型,该模型由 SAM 为使用 PVM 的工作站集群实现。 更多信息请访问 http://suif.stanford.edu/~scales/sam.html。
Mentat 是一个面向对象的并行处理系统,可与工作站集群配合使用,并且已移植到 Linux。 Mentat 编程语言 (MPL) 是一种基于 C++ 的面向对象编程语言。 Mentat 运行时系统使用类似于非阻塞远程过程调用的机制。 更多信息请访问 http://www.cs.virginia.edu/~mentat/。
Legion http://www.cs.virginia.edu/~legion/ 构建在 Mentat 之上,在广域网络机器上提供单个虚拟机的外观。
不要与 Mentat 的 MPL 混淆,这种语言最初是作为 MasPar SIMD 超级计算机的本机并行 C 方言开发的。 嗯,MasPar 实际上已经不再从事该业务(他们现在是 NeoVista Solutions,http://www.neovista.com,一家数据挖掘公司),但他们的 MPL 编译器是使用 GCC 构建的,因此仍然可以免费获得。 在阿拉巴马大学亨茨维尔分校和普渡大学的共同努力下,MasPar 的 MPL 已被重新定向为生成带有 AFAPI 调用的 C 代码(请参阅第 3.6 节),因此可以在 Linux SMP 和集群上运行。 但是,该编译器有些错误...请参阅 http://www.math.luc.edu/~laufer/mspls/papers/cohen.ps。
Myrias 是一家销售名为 PAMS(并行应用程序管理系统)的软件产品的公司。 PAMS 为虚拟共享内存并行处理提供非常简单的指令。 尚不支持 Linux 机器网络。 有关更多信息,请访问 http://www.myrias.com/。
Parallaxis-III 是一种结构化编程语言,它使用“虚拟处理器和连接”扩展了 Modula-2,用于数据并行性(SIMD 模型)。 Parallaxis 软件包括用于顺序和并行计算机系统的编译器、调试器(gdb 和 xgbd 调试器的扩展)以及来自不同领域的大量示例算法,特别是图像处理。 这在顺序 Linux 系统上运行...旧版本支持各种并行目标,新版本也将支持(例如,针对 PVM 集群)。 更多信息请访问 http://www.informatik.uni-stuttgart.de/ipvr/bv/p3/p3.html。
pC++/Sage++ 是 C++ 的语言扩展,它允许使用来自某些基本“元素”类的“对象集合”进行数据并行风格的操作。 它是一个预处理器,生成可以在 PVM 下运行的 C++ 代码。 它是否在 Linux 下运行? 更多信息请访问 http://www.extreme.indiana.edu/sage/。
SR(同步资源)是一种并发编程语言,其中资源封装了进程及其共享的变量;操作提供了进程交互的主要机制。 SR 为调用和服务操作的机制提供了新颖的集成。 因此,支持本地和远程过程调用、会合、消息传递、动态进程创建、多播和信号量。 SR 还支持共享全局变量和操作。
它已移植到 Linux,但目前尚不清楚它可以执行哪些并行性。 更多信息请访问 http://www.cs.arizona.edu/sr/www/index.html。
ZPL 是一种基于数组的编程语言,旨在支持工程和科学应用。 它生成对名为 IronMan 的简单消息传递接口的调用,构成该接口的少量函数可以使用几乎任何消息传递系统轻松实现。 但是,它主要针对工作站集群上的 PVM 和 MPI,并且支持 Linux。 更多信息请访问 http://www.cs.washington.edu/research/projects/orca3/zpl/www/。
很多人花费大量时间对特定的主板、网卡等进行基准测试,试图确定哪个是最好的。 这种方法的问题在于,当您能够对某些东西进行基准测试时,它不再是最好的可用产品; 它甚至可能已从市场上撤下,并被具有完全不同属性的修订模型所取代。
购买 PC 硬件就像购买橙汁。 通常,无论标签上是什么公司名称,它都是用非常好的原料制成的。 很少有人知道或关心组件(或浓缩橙汁)来自哪里。 也就是说,您应该注意一些硬件差异。 我的建议很简单,您只需了解您可以从 Linux 下的硬件获得什么,然后将注意力集中在快速交付、优惠的价格和合理的退货政策上。
在 http://www.pcguide.com/ref/cpu/fam/ 中给出了不同 PC 处理器的出色概述; 事实上,整个 WWW 站点 http://www.pcguide.com/ 都充满了关于 PC 硬件的良好技术概述。 了解特定硬件配置的性能也很有用,《Linux 基准测试 HOWTO》http://sunsite.unc.edu/LDP/HOWTO/Benchmarking-HOWTO.html 是一个不错的起点。
英特尔 IA32 处理器有许多特殊的寄存器,可用于非常详细地测量正在运行的系统的性能。 英特尔 VTune,http://developer.intel.com/design/perftool/vtune/,在一个非常完整的代码调整系统中广泛使用了性能寄存器……但不幸的是,它不能在 Linux 下运行。 用于访问奔腾性能寄存器的可加载模块设备驱动程序和库例程可从 http://www.cs.umd.edu/users/akinlar/driver.html 获得。 请记住,这些性能寄存器在不同的 IA32 处理器上是不同的; 此代码仅适用于奔腾,不适用于 486、奔腾 Pro、奔腾 II、K6 等。
关于性能的另一个评论是合适的,特别是对于那些想要构建大型集群并将其放置在狭小空间中的人。 至少一些现代处理器集成了热传感器和电路,如果工作温度过高,这些传感器和电路用于减慢内部时钟速率(试图降低热量输出并提高可靠性)。 我并不是建议每个人都应该去购买珀尔帖器件(热泵)来冷却每个 CPU,但您应该意识到,高工作温度不仅会缩短组件寿命 - 它还会直接降低系统性能。 不要以会阻碍气流、将热量困在封闭区域内等的物理配置来布置您的计算机。
最后,性能不仅仅是速度,还有可靠性和可用性。 高可靠性意味着您的系统几乎永远不会崩溃,即使组件发生故障也是如此……这通常需要冗余电源和热插拔主板等特殊功能。 这通常并不便宜。 高可用性是指您的系统几乎所有时间都可供使用的概念……系统可能会在组件发生故障时崩溃,但系统会很快修复并重新启动。 有一份高可用性 HOWTO 讨论了许多基本问题。 但是,特别是对于集群,高可用性可以通过拥有一些备件来简单地实现。 我建议至少有一个备件,最好在大集群中每 16 台机器至少有一个备件。 丢弃有故障的硬件并用备件更换可以比维护合同带来更高的可用性和更低的成本。
那么,是否有人在使用 Linux 进行并行处理? 是的!
不久之前,很多人都在怀疑,许多并行处理超级计算机公司的倒闭是否意味着并行处理正在走向衰落。 我当时并不认为它已经死了(有关我认为真正发生的事情的有趣概述,请参阅 http://dynamo.ecn.purdue.edu/~hankd/Opinions/pardead.html),现在看来很明显,并行处理再次兴起。 甚至最近停止制造并行超级计算机的英特尔也对其 MMX 和即将推出的 IA64 EPIC(显式并行指令计算机)等技术中的并行处理支持感到自豪。
如果您使用您喜欢的搜索引擎搜索“Linux”和“并行”,您会发现很多地方都在使用 Linux 进行并行处理。 特别是,Linux PC 集群似乎在各地涌现。 Linux 的适用性,加上 PC 硬件的低成本和高性能,使得使用 Linux 进行并行处理成为预算有限的小型团队和资金充足的大型国家研究实验室进行超级计算的流行方法。
本文档中其他地方列出的各个项目维护着具有类似并行 Linux 配置的“同类”研究站点的列表。 但是,在 http://yara.ecn.purdue.edu/~pplinux/Sites/ 上,有一个超文本文件,旨在为使用 Linux 系统进行并行处理的所有不同站点提供照片、描述和联系信息。 要将有关您站点的信息发布在那里
当前列表中有 14 个集群,但我们知道全球至少有几十个 Linux 集群。 当然,列出并不意味着任何认可等; 我们的希望只是提高人们对使用 Linux 进行并行处理的认识、研究和协作。