并行计算编程技术浅析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并行计算编程技术浅析
范增禄1,薛峰2
(1.河北省气象局河北石家庄0500212.国家气象中心北京100081)
【摘要】:随着高性能应用和运算需求的迅猛发展,单台高性能计算机已经不能胜任一些超大规模应用问题的解决。这就需要将多台计算机资源通过高速网络连接起来,构成计算集群,共同解决大型应用问题。并行程序的编程模型、运行环境和调试环境,以及如何选取适合需求的开发与运行环境,等等,都要比串行程序复杂得多,而这些问题无疑都是值得我们认真考虑的。本文将试图就此展开讨论。
【关键词】:并行计算模式集群高性能计算机测试
1.并行计算技术概述
60年代初期,由于晶体管技术与存储器技术的发展导致并行计算机的出现,这一时期的典型代表就是IBM360。创建和使用并行计算机的主要原因是因为并行计算机是解决单处理器速度瓶颈的最好方法之一。并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机体系结构的发展也主要体现在计算节点性能的提高以及节点间通信技术的改进两方面。
就单台计算机系统而言,采用SMP技术是扩展其性能的比较有效的方法,它可以将系统中的多个操作系统分布在多个处理器上执行以获得并行处理的效果。SMP技术可以通过多线程并行来提高性能。通过采用并行多线程技术,服务器可以通过SMP技术同时处理多个应用请求,使得这些程序获得了更好的运行效果,而且在台式机的专业应用软件中,并行多线程技术的采用也日益增多。
伴随SMP技术的出现,带来另外的问题,那就是当应用增加时,虽然可以通过增加处理器的方法来扩展系统能力,但是,一方面需要有扩展连接处理器的系统总线的高超技术,并不是每个系统厂商都能做到,另一方面由于对共享资源的竞争所造成的系统瓶颈,使得单机系统的性能呈非线性增长。因此,当应用增加超过单机系统的承受能力时,就采用集群系统(CLUS-TER)。在集群系统中,每台服务器处理各自的工作,提供各自的服务。当需要更高的的性能以适应更多的应用时,既可以升级原有的服务器(增加更多的处理器、内存和存储等),又可以在集群系统中增加新的服务器。更进一步,集群系统在平衡和扩展整个计算机应用系统的工作负载的同时,也为用户提供了高性能和高可用性。
1977年,DEC公司推出了以VAX为结点机的松散耦合的集群系统,并成功地将VMS操作系统移植到该系统上。20世纪90年代后,随着RISC技术的发展运用和高性能网络产品的出现,集群系统在性能价格比(Cost/Performance)、可扩展性(Scala-bility)、可用性(Availability)等方面都显示出了很强的竞争力,尤其是它在对现有单机上的软硬件产品的继承和对商用软硬件最新研究成果的快速运用,从两方面表现出传统MPP无法比拟的优势。
这里所介绍的高性能计算环境,从程序开发角度主要分为以下两类:一大类是共享内存系统,包括并行向量机(PVP,Par-allelVectorProcessor)、分布式共享存储多处理机(DSM,Dis-tributiedSharedMemory)和对称多处理机(SMP,SymmetricalMultiProcessing)等结构,其特点是多个处理器拥有物理上共享的内存,如HP的SuperDome,我国曙光1号,SGIPowerChal-lenge等;另一大类是分布存储系统(DMP),如大规模并行处理机(MPP,MassivelyParallelProcessor)和集群系统(Cluster),其特点是系统由多个物理上分布的结点组成,每个结点拥有自己的内存,结点通过高速以太网或专用高速网络连接。
由于以上两类并行环境差别较大,其采用的并行编程方法也不同的。我们将分别介绍这两类系统上的开发环境与开发工具,同时也略带介绍一下其他类型的并行编程开发模式:HPF、并行库、串行并行化与多模式混合使用等。
2.并行程序的开发模式
2.1.共享内存模式
共享内存并行模式编程相对较为简单,程序员不用考虑数据在内存中的位置,进程管理及同步操作由系统完成。但是用这种方式编制的程序通常并行效率不高,因为它属于细粒度并行,主要针对循环进行并行处理。另外共享内存并行模式只能运行在共享内存类型的计算机系统上。
在共享内存模型中,一个并行程序由多个共享内存的并行任务组成,数据的交换通过隐含地使用共享数据来完成。此编程模式一般仅需指定可以并行执行的循环,而不需考虑计算与数据如何划分,以及如何进行任务间通信,编译器会自动完成上述功能。
2.1.1.OpenMP
目前业界流行的共享内存模型开发标准是OpenMP。OpenMP定义了一套编译指导语句,用于指定程序的并行性、数据的共享/私有等信息。其目标是为SMP系统提供可移植、可扩展的开发接口。Intel,DEC,SiliconGraphics,Kuch&Associates和IBM早在15年前就联合定义了OpenMP早期标准。新的OpenMP标准由OpenMPArchitectureReviewBoard于1997年推出,现在已发展到2.0版。
作为一套可移植可扩展的标准OpenMP为程序员提供了一个简单和灵活的接口,可以方便地为共享内存的多处理器平台增加并行机制。大部分高性能计算机厂商和软件厂商,例如。OpenMP在所有的架构上都支持使用C/C++和FORTRAN进行共享内存并行编程,包括基于Microsoft?WindowsNT?和UNIX?操作系统的构架。OpenMP还使用编译器指令和库函数,帮助并行应用程序员使用C/C++和FORTRAN创建多线程应用。
对于包含有多个耗时的循环的应用,OpenMP特别有用,它可以将工作划分为多个线程。任一应用中划分粗糙的循环级别的并行机制的数量往往比较有限,限制了应用程序的可扩展性。一个并行区域可能嵌入在其它并行区域之内,但是它们缺省的执行方式是必须使用一个线程组来串行执行。OpenMP使用fork-join并行机制,程序首先顺序执行,然后转换成为并行程序。
OpenMP允许程序员使用划分良好的循环级并行机制来扩展应用,实现多处理。它们可以添加划分粗糙的并行机制,同时仍然能保留以前在扩展方面所做的投资。使用这种增量式的开发战略,程序员可以避免转向消息传递或其它并行编程模型时所具有的风险。
要开发新的应用,程序员必须分析原始问题,将它分解为多个使用共享和本地数据的任务,确定数据之间的依赖性,然后重