作者:肖文鹏 性能并行计算所处理的问题具有程序规模庞大、编写困难、计算量大、运行时间长,以及数据量巨大等特点,因此选择一个好的并行计算平台和并行编程工具非常重要。Linux是一个非常优秀的操作系统,其上的MPI和PVM是目前最流行的并行编程语言。本文将介绍如何借助Linux来构建并行计算系统,以及如何在Linux平台下开发MPI和PVM并行程序。 并行计算环境 并行计算是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台独立计算机构成的集群。 并行计算基于一个简单的想法:n台计算机应该能够提供n倍的计算能力,不论当前计算机的速度如何,都可以期望被求解的问题将在1/n的时间内完成。显然这只是一个理想的情况,因为被求解的问题在通常情况下都不可能被分解为完全独立的各个部分,而是需要进行必要的数据交换和同步。尽管如此,并行计算仍然可以使整个计算机系统的性能得到实质性的改进,而改进的程度取决于欲求解问题自身的并行程度。 并行计算的优点是具有巨大的数值计算和数据处理能力,能够被广泛地应用于国民经济、国防建设和科技发展中具有深远影响的重大课题,如石油勘探、地震预测和预报、气候模拟和大范围天气预报、新型武器设计、核武器系统的研究模拟、航空航天飞行器、卫星图像处理、天体和地球科学、实时电影动画系统及虚拟现实系统等等。 目前,并行计算已经成为计算机科学研究和应用中的热点,各种并行计算系统层出不穷,其中发展最快的当数基于Linux平台的并行计算环境。使用Linux来构建并行计算平台具有许多优点: ◆ 廉价 Linux最大的优势就是价格,通常只需少量的软、硬件投资就可以拥有一个PC工作站或服务器。相比之下,Linux对硬件的要求比Windows要低得多,即使是普通用户也可以利用Linux来构建一个高性能的并行计算环境,从而替代以往开销昂贵的大型计算机。 ◆ 开放 自由和开放是Linux最吸引人的特点,同时也为提高并行系统的性能提供了更加广阔的空间。开发者可以很容易地深入到系统的核心,从而使在操作系统一级提高性能成为可能。 ◆ 高效 在相同软硬件配置情况下,Linux与其他操作系统相比具有更高的效率,尤其是网络性能和稳定性,而这些正是衡量并行计算平台优劣的关键所在。 并行编程模型 为了简化并行程序的设计,需要采用合适的并行编程模型。目前两种最重要的并行编程模型是数据并行和消息传递。数据并行编程模型的编程级别较高,编程相对简单,但只适用于解决数据并行问题;消息传递编程模型的编程级别较低,编程相对复杂,但却有着更加广泛的应用范围。 数据并行指的是将相同的操作同时作用于不同的数据,从而提高问题求解速度。数据并行很早就被应用于向量计算机。长期的实践表明数据并行可以高效地解决大部分科学与工程计算问题。数据并行模型是一种较高层次上的并行计算模型,它提供给程序员一个全局的地址空间。通常这类模型所采用的语言本身就提供有并行执行的语义,因而程序员只需要简单地指明执行什么样的并行操作和并行操作的对象,就实现了数据并行的编程。例如,对于矩阵运算,要使矩阵B和矩阵C中的对应元素相加后赋给矩阵A,则通过语句: A = B + C 这样就能够完成相应的功能。正因如此,数据并行的表达是相当简单和简洁的,它不需要程序员关心并行系统是如何对该操作进行并行处理的。 数据并行模型虽然可以解决许多科学与工程计算问题,但对于非数值计算类问题,如果仍通过数据并行的方式来进行,则难以取得较高的效率。目前,数据并行模型面临的主要问题是如何实现高效的编译。只有具备了高效的编译器后,数据并行程序才可以在共享内存和分布式内存的并行计算机上取得高效率,才可能提高并行程序设计的效率和可移植性,从而进一步推广数据并行程序设计技术。 在消息传递模型中,各个并行执行的任务之间通过传递消息来交换信息、协调步伐、控制执行。消息传递一般是基于分布式内存的,但同样也适应于共享内存的并行计算机。消息传递模型为程序员提供了更加灵活的控制手段和表达形式,一些用数据并行模型很难表达的并行算法,采用消息传递模型则可以很容易地实现。机动灵活和控制手段的多样化,是消息传递模型能提供很高执行效率的重要原因。 消息传递模型为程序员提供了尽可能大的灵活性,但同时也将各个并行任务之间复杂的信息交换及协调控制交给了程序员,从而在一定程度上加重了程序员的负担。尽管如此,消息传递模型的基本通信模式仍然是简单和清楚的,目前大量并行程序采用的都是消息传递并行编程模型。 并行编程语言 由于消息传递并行编程模型的广泛应用,目前已经出现了许多基于该模型的并行编程语言,其中最流行的是PVM(Parallel Virtual Machine)和MPI(Message Process Interface)。第一个将工作站集群作为并行计算平台并被广泛接受的并行编程语言是PVM。它由美国的Oak Ridge国家实验室、Tennessean大学、Emorg大学、CMU大学等联合开发而成,能够将异构的Unix计算机通过异构网络连接成一个“虚拟”的并行计算系统,为其上运行的应用程序提供分布式并行计算环境。 PVM是一种基于局域网的并行计算环境。它通过将多个异构的计算机有机地组织起来,形成一个易于管理、易于编程、并且具有很好的可扩展性的并行计算环境。目前PVM支持C和Fortran语言。程序员首先参照消息传递模型编写好并行程序,然后将编译后的程序以任务为单位在网络中特定类型的计算机上运行。PVM能够在虚拟机中自动加载任务并运行,并且还提供了任务间相互通信和同步的手段。由于所有的计算任务都被分配到合适的计算节点上,多个节点并行运算,从而实现了任务一级的并行。 PVM为利用现有计算资源进行并行程序的开发与研究提供了一种有效的解决方案。由于PVM免费、开放和易于使用的特性,使得它成为一个被广泛接受的并行程序开发环境,目前几乎所有的并行计算系统都支持PVM。 MPI是为开发基于消息传递模型的并行程序而制定的工业标准,其目的是为了提高并行程序的可移植性和易用性。参与MPI标准制定的人员来自欧美40多个组织,大部分主要的并行计算机制造商、大学研究所、政府实验室、工业组织等都投入到MPI标准化工作。有了统一的并行编程语言标准,并行计算环境下的应用软件及软件工具就都能够实现透明的移植,各个厂商就可以依据标准提供独具特色和优势的软件实现和软件支持,从而提高了并行处理的能力。 MPI是一种基于消息传递模型的并行编程接口,目前已经发展成为消息传递模型的代表和事实上的工业标准,而不是一门具体的语言。迄今为止,所有的并行计算机制造商都提供对MPI的支持,因而从理论上说任何一个正确的MPI程序可以不加修改地在所有并行计算机上运行。 MPI只是一个并行编程语言标准,要编写基于MPI的并行程序,还必须借助某一MPI具体实现。MPICH是Linux平台下最重要的一种MPI实现,是一个与MPI规范同步发展的版本。每当MPI标准推出新的版本时,MPICH就会有相应的实现版本。LAM(Local Area Multicomputer)是Linux平台下另一免费的MPI实现。它由Ohio州立大学开发,主要用于异构的网格计算并行系统。
[1] [2] 下一页
(出处:http://www.sheup.com)