并行算法研究现状及其相关问题的综述

 
        并行程序的编程模型、运行环境、调试环境等都要比串行程序复杂得多。提供良好的高性能计算开发环境,一直是学术界和工业界所追求的目标。这里的开发环境既包括并行计算机体系结构,计算机网络拓扑结构等硬件环境;也包括并行程序的开发模式,网络通信协议和通信方式等软件环境。并行算法研究要以硬件,即并行计算机为依托,并行计算机性能的发挥要依靠优秀并行算法的设计的实现。
所以本文,并行算法研究现状及其相关问题的综述,将对与并行紧密相关的并行计算机体系结构,并行程序开发环境,通信技术三个问题依次进行讨论。
一、 并行计算机体系结构
“ 并行计算机是由一组处理单元组成的;这组处理单元通过相互之间的通 信与协作,以更快的速度共同完成一项大规模的计算任务。”这就是并行计算机 的经典定义。这个定义并没有包含更多的细节,但是从中我们也不难看出并行计算机的两个最主要的组成部分:计算节点和节点间的通信与协作机制。
并行计算机体系结构的发展变化非常快,而这种变化主要体现在计算节点 性能的提高以及节点间通信技术的改进两方面。长期以来,超大规模集成电路技 术一直在按照摩尔定律高速发展,芯片的元件密度以及时钟频率在不断提高,从 而大大提高了作为并行计算机基本处理单元的微处理器的性能。而在通信技术 方面, 传统的交叉开关的切换速度不断提高,而新的高速网络技术也不断应用 到并行计算机中,从而大大提高了节点间通信的速率。
(一)体系结构的分类
     1972年,Micheal Flynn根据指令和数据流的概念对计算机的体系结构进行了分类,这就是所谓的Flynn分类法。 
 Flynn将计算机划分为四种基本类型,即SISD、MIMD、SIMD、MISD。
        传统的顺序执行的计算机在同一时刻只能执行一条指令(即只有一个控制 流)、处理一个数据(即只有一个数据流),因此被称为单指令流单数据流计算 机(Single Instruction Single Data即SISD计算机)。而对于大多数并行计算机而言,多个处理单元都是根据不同的控制流程执行不同的操作,处理不同的 数据,因此,它们被称作是多指令流多数据流计算机,即MIMD(Multiple Instruction Multiple Data)计算机。
        曾经在很长一段时间内成为超级并行计算机主流的向量计算机除了标量处 理单元之外,最重要的是具有能进行向量计算的硬件单元。在执行向量操作时, 一条指令可以同时对多个数据(组成一个向量)进行运算,这就是单指令流多数 据流(Single Instruction Multiple Data,SIMD)的概念。因此,我们将向量 计算机称SIMD计算机。
        第四种类型即所谓的多指令流单数据流(Multiple Instruction Single Data)计算机。在这种计算机中,各个处理单元组成一个线性阵列,分别执行不 同的指令流,而同一个数据流则顺次通过这个阵列中的各个处理单元。这种系统 结构只适用于某些特定的算法。
        相对而言,SIMD和MISD模型更适合于专用计算。 在并行计算机中,MIMD模型最为通用,SIMD次之,而MISD最少用。
(二)体系结构的发展过程
         并行计算机40年的发展过程中出现过许多著名的机器。
         60年代初期,由于晶体管以及磁芯存储器的出现,处理单元变得越来越小, 存储器也更加小巧和廉价。这些技术发展的结果导致了并行计算机的出现,并迎 来了它的第一个黄金时代。
这一时期的并行计算机多是规模不大的共享存储多处理器系统,不过,当时 它们可是被当作大型主机(Mainframe)来看待的。Burroughs B5000, D825以及IBM System 360是这一时期的典型代表。其中,IBM System 360在过渡到370系列时引入了多处理机的概念,而CDC 6600则在中央处理器与多个I/O处理器 之间采用了异步共享存储器的机制。与这些机器有所不同的是,RW400则是最早 采用消息传递机制的大型主机。
到了60年代末期,同一个处理器开始设置多个功能相同的功能单元,流水 线技术也出现了。与单纯提高时钟频率相比,这些并行特性在处理器内部的应用 大大提高了并行计算机系统的性能。
伊利诺依大学和Burroughs公司此时开始了一项庞大的工程,即Illiac IV 计划。他们认为,当时已有的技术已经走到尽头了,因此决定另辟蹊径。根据这 一规划,Illiac IV 应该是一台64个CPU的SIMD主机系统,它涉及到从最底层 的硬件技术、体系结构、I/O设备、操作系统、程序设计语言直至应用程序在内 的众多研究课题。不过,当一台规模大大缩小了的16 CPU系统终于在1975年露 出了它的庐山真面目的时候,整个计算机界已经发生了巨大的变化。
首先是存储系统概念的彻底革新。虚拟存储和缓存这两个概念现在已经应 用在了几乎所有的计算机系统里,但在70年代初期,它们却带来一场真正的革 命。 IBM 360/85系统与360/91是属于同一系列的两个机型,360/91的主频高于360/85,所选用的内存速度也较快,并且采用了动态调度的指令流水线;但是,360/85的整体性能却高于360/91,唯一的原因就是前者采用了缓存技术,而后者则没有。
其次是半导体存储器开始代替磁芯存储器。最初,半导体存储器只是在某些 机器中被用作缓存,而CDC 7600则率先全面采用这种体积更小、速度更快、可以直接寻址的半导体存储器,磁芯存储器从此退出了历史舞台。与此同时,集成 电路也出现了,并迅速应用到了计算机中。元器件技术的这两大革命性突破,使 得Illiac IV的设计者们在底层硬件以及并行体系结构方面提出的种种改进都 大为逊色。
Illiac IV原本是想解决数值计算中向量运算密集的问题的,不过,这个任 务却是由这一时期诞生的最早的向量流水线计算机CDC STAR 100完成的。而到 了1976年CRAY 1问世以后,一个长达15年的新时代开始了,向量计算机从此牢牢地控制着整个高性能计算机市场。CRAY 1对所使用的逻辑电路进行了精心 的设计,采用了我们如今称为RISC的精简指令集,还引入了向量寄存器,以完成向量运算。这一系列全新技术手段的使用,使CRAY 1的主频达到了令时人不可思议的80 MHz。
微处理器的出现则使并行计算机的体系结构迈出了另一大步。最早的微处 理器性能并不是很理想,但是随着机器的字长从4位、8位、16位一直增加到32位,其性能也随之显著提高。正是因为看到了微处理器的这种潜力,卡内基梅隆大学开始在当时流行的DEC PDP 11小型计算机的基础上进行共享存储多处 理器系统的研究。C.mmp就是这一研究项目的具体成果。它是一台由16个PDP 11/40处理机通过交叉开关与16个共享存储器模块相连接而成的。
从80年代开始,微处理器技术一直在高速前进。稍后又出现了非常适合于SMP方式的总线协议,而伯克利加州大学则对总线协议进行了扩展,提出了Cache 一致性问题的处理方案。从此,C.mmp开创出的共享存储多处理器之路越走越 宽;到了10年之后的今天,这种体系结构已经基本上统治了服务器和桌面工作 站市场。
同一时期,基于消息传递机制的并行计算机也开始不断涌现。80年代中期, 加州理工成功地将64个i8086/i087处理器通过超立方体互连结构连结起来。此 后,便先后出现了Intel iPSC系列、INMOS Transputer系列,Intel Paragon以及IBM SP的前身Vulcan等基于消息传递机制的并行计算机。
向量计算机渐渐衰落下去。数据并行方式的计算机在相对沉寂了一段时间 之后,到了80年代中期又开始逐渐复兴。这一时期数据并行方式的计算机主要 有Goodyear MPP,Thinking Machines的CM 1、CM 2以及MasPar等。在互连机 制方面,这一代机器不仅仅限制在相邻的节点之间,而是可以根据需要在任意节 点之间进行通信。CM 2则更是具备了大量的浮点单位并行(Bit parallel)运算单元。
80年代末到90年代初,共享存储器方式的大规模并行计算机又获得了新的 发展。IBM公司在RP 3计划中希望能将大量早期RISC微处理器通过蝶形互连网 络连结起来。而BBN公司则先后推出了两个型号的这类机器,即采用Motorola 68000芯片的BBN Butterfly以及采用88100芯片的TC2000。通过这些尝试,人 们开始考虑如何才能在实现共享存储器缓存一致的同时,使系统具有一定的可 扩展性(Scalability)。90年代初期,斯坦福大学提出了DASH计划,它通过维护一个保存有每一缓存块位置信息的目录结构来实现分布式共享存储器的缓存一致性。后来,IEEE在此基础上提出了缓存一致性协议的标准。MIT的Alewife 计划则试图简化为保持缓存一致性而带来的硬件开销。
90年代以来,主要的几种体系结构开始走向融合,这种趋势有其内在的必 然性。为了获得更好的性能,在Alewife以及FLASH等共享存储类型的项目中也 引入了消息传递机制;而属于数据并行类型的CM 5除大量采用商品化的微处理 器以外,也允许用户层的程序传递一些简单的消息;CRAY T3D是一台NUMA结构 的共享存储型并行计算机,但是它也提供了全局同步机制、消息队列机制,并采 取了一些减少消息传递延迟的技术;Meiko CS 2采用的是消息传递机制,但是, 一个节点上用户程序虚地址空间内的数据却可以直接复制到另一个节点上另一 个程序的虚地址空间里去,实际上这正是共享地址空间机制的特点。
不过IBM近年来大获成功的SP 1、 SP 2系列机群系统走的则是另外一条路 线。在这些系统中,各个节点采用的都是标准的商品化Unix工作站(RS 6000), 它们之间通过高速网络连接起来。各节点内存系统之间没有多少联系,网络连接 的可靠性也不高,面向的是通用的应用领域。因此,从总体上说,SP 1、SP 2基本上属于消息传递型系统。
目前的并行计算机系统主要有四类:第一类是多向量处理系统, 如Cray YMP 90、NEC SX 3 和Fujitsu VP 2000 等;第二类是基于共享存储的多处理机(SMP) 系统,如SGI Power Challenge、曙光1号等;第三类是基于分布存储的大模并行处理(MPP)系统,如Intel Paragon、IBM SP2、曙光1000等;第四类是基于RISC 工作站或高档微机通过高速互连网络连接而构成的机群计算机系统,如清华同 方探索集群计算机等。
展望
实现上述第一和第三类系统由于受研制费用高、售价高等因素的影响,其市 场受到一定的限制。第二类系统由于共享结构的限制,系统的规模不可能很大。 由于机群系统计算机具有投资风险小、可扩展性好、可继承现有软硬件资源和开 发周期短、可编程性好等特点,目前已成为并行处理的热点和主流。据专家预测:“未来的高性能计算机和超级服务器都将基于机群系统结构”。
二、 并行程序开发环境
目前比较流行的高性能计算系统,大体可以分为两类:一类是共享内存系统(SMP),如IBM的P690,HP的SuperDome等,其特点是多个处理器拥有物理上共享的内存;一类是分布存储系统(DMP),如MPP和集群系统,其特点是系统由多个物理上分布的结点组成,每个结点拥有自己的内存,结点通过高速以太网或专用高速网络连接。下面将介绍这两类系统上的开发工具。
(一)并行程序的开发模式
1. 共享内存模型
在共享内存模型中,一个并行程序由多个共享内存的并行任务组成,数据的交换通过隐含地使用共享数据来完成。此编程模式一般仅需指定可以并行执行的循环,而不需考虑计算与数据如何划分,以及如何进行任务间通信,编译器会自动完成上述功能。
由于分布式存储系统与集中式存储系统各有优缺点, 所以目前的趋势是将两者结合:系统含有上千个的处理器,虽然内存物理上分布于各个处理器上,但在逻辑上给用户提供统一的共享地址空间。这就是分布式共享存储系统(Distributed Shared Memory: DSM)[14]。简单的说,分布式共享存储系统就是在逻辑上给用户提供统一的共享地址空间,提供共享存储的编程模式,无须考虑在物理上各个存储模块是分布的。分布式共享存储系统以其方便的编程接口及良好的可扩展性而越来越受到学术界和工业界的极大关注,从而成为高性能计算机体系结构发展的主流。
分布式共享存储系统包括两类: 一类是由底层硬件实现的,具有统一的物理地址空间的系统。目前的共享存储型MPP机器多采用这种结构。另一类是由上层软件实现的, 具有统一的虚拟地址空间的系统,这一类称为称为虚拟共享存储系统(Shared Virtual Memory:SVM), 又称为软件分布式共享存储系统(Software DSM:SDSM)。其中有代表性的系统有Yale 大学的Ivy,Rice大学的 TreadMarks, Munin,Maryland 大学的 CVM,Carnegie Mellon 大学的 Midway,中科院计算所高性能计算机研究中心的JIAJIA 系统。
一个简单的虚拟共享存储系统如图1所示。 所有的处理机可以共享由虚拟共享存储系统提供的统一地址空间, 从程序员的角度来看,任何处理机可以访问整个地址空间的任何变量而无需考虑该变量位于哪个处理机上。每个处理机都有一个虚拟共享存储层,这个虚拟共享存储层不仅要负责本地存储器与虚拟共享地址空间的映射, 而且还要在本机发生共享数据不命中时, 到远地将所需数据取回, 图1:一个简单的虚拟共享存储系统
并及时维护整个地址空间的一致性。
目前流行的共享内存模型开发标准是OpenMP。OpenMP定义了一套编译指导语句,用于指定程序的并行性、数据的共享/私有等信息。其目标是为SMP系统提供可移植、可扩展的开发接口。OpenMP由OpenMP Architecture Review Board于1997年推出,现在已发展到2.0版。OpenMP支持的编程语言包括Fortran、C和C++。
OpenMP得到了工业界的广泛支持,有大量的商业编译器和其他开发工具支持OpenMP的开发,如IBM、HP、Sun、SGI、Intel等硬件厂商均有支持OpenMP的编译器产品,另外还有一些第三方厂商的OpenMP编译器。
2. 消息传递模型
在消息传递模型中,一个并行程序由多个并行任务组成。每个并行任务拥有自己的数据并对其进行计算操作。任务之间数据的交换是通过显式的消息传递语句来完成的。
现在广泛使用的消息传递模型有两个:PVM和MPI。PVM即Parallel Virtual Machine(并行虚拟机)与MPI即Message Passing Interface(消息传递界面)。PVM与MPI所提供的功能大致相同,但两者的侧重点有所不同。PVM强调在异构环境下的可移植性和互操作性,程序之间可以互相通信,并支持动态的资源管理和一定程度的容错;而MPI更强调性能,不同的MPI实现之间缺乏互操作性,本身也不支持容错(可以通过专门的容错软件来支持容错)。一般而言,使用MPI比较适合于开发MPP或同构集群上的并行应用,可以有较高的通信性能;而PVM更适合于异构的集群系统。
几乎所有的高性能计算系统都支持PVM和MPI。
3. HPF
HPF(High Performance Fortran)的思想与OpenMP类似,都是通过定义编译指导语句来帮助编译器生成并行代码。HPF的目标系统与OpenMP不同,它支持DMP系统。因此,除了指定并行性的编译指导语句外,HPF还指定数据划分的编译指导语句。HPF与消息传递模型的不同之处则在于:HPF通过编译器来生成通信语句,不需要程序员手工编写。
HPF得到了工业界的广泛支持,如IBM、HP、Sun都有HPF编译器。第三方产品则有PGI的PGHPF、APR的Forge xHPF等。其不足是对于某些问题无法得到与手工编写的消息传递程序相同的性能。
4. 并行库
使用并行库开发高性能计算程序的基本思想是:用户不需要自己编写通用的并行算法代码,而由程序库提供并行算法,并对用户透明。用户只需要根据自己的需求,调用相应的库函数,就可以编写出并行程序。由于库函数的编写者一般经验丰富,而且库函数会采取较为优化的算法,并采用优化编译,使得库函数的执行效率很高。对于大量使用通用计算算法的用户来说,使用并行库是一种高效的开发模式。并行库的缺点是无法帮助那些需要自己书写非通用并行算法的用户。
目前的并行库很多,包括PBLAS(Parallel Basic Linear Algebra Subroutines),以及建立在其基础上的LAPACK和ScaLAPACK,提供了一些线性代数问题的并行求解算法,如求特征值、最小二乘问题等。LAPACK是为SMP系统优化的,ScaLAPACK是为DMP系统优化的。大多数高性能计算系统都提供在本系统上优化的PBLAS、LAPACK、ScaLAPACK。
另一个著名的并行库是PETSc。PETSc是一套基于MPI的数据结构和库函数,用于解决基于偏微分方程的典型科学计算问题。另外,MATLAB是很常用的科学计算软件。很多公司和研究机构也在进行并行化MATLAB的工作,如RTExpress。
5. 串行程序并行化
另一种并行程序的开发模式是将串行程序并行化。此模式的优点在于,可以将现有的很多串行代码转换成并行代码。
并行化分为全自动并行化和交互式并行化两种模式。全自动并行化的并行过程不需要人的干预,可以自动发现程序中可并行的部分,生成并行代码。现在,高性能计算系统提供商的Fortran和C编译器大都能提供面向SMP系统的自动并行化的编译选项。对于少数程序,全自动并行化编译器可以达到较好的效果;但对大多数程序来说,并行化的效果还不理想。
交互式并行化工具通过给用户提供程序中的有效信息,包括相关性分析结果、程序调用图、性能预测结果等帮助用户进行并行化工作,但是如何更好地结合用户和并行化工具的能力还需要进一步研究。目前产品化的交互式并行化工具主要有APR的Forge,该系统支持Fortran77的并行化,并同时支持SMP系统和DMP系统。
(二)开发工具
1. 调试器
调试是程序开发的重要部分,并行程序尤其难调试,更需要调试器的支持。高性能计算系统中大多会带有并行调试器,如IBM的pdb(命令行方式)、pedb(Xwindow图形界面)、HP的DDE(XWindow图形界面)和LaDebug(用于Alpha系统)、Sun的Prism等。
Etnus的TotalView是最著名的第三方并行调试器。它提供对C、C++、Fortran程序的图形化符号调试,可以调试MPI、PVM、HPF、OpenMP程序,支持SGI、Sun、HP、IBM等几乎所有的高性能厂商的产品,还提供对Linux的支持。
KAI的Assure Thread Analyzer是一个支持OpenMP的程序正确性检测工具,用于自动发现程序中的常见错误。它目前仅支持IA32和IA64上的Linux。
2. 性能分析和预测
程序性能分析(profiling)可以帮助用户找到程序中最费时的部分,从而集中精力进行改进和优化,是改进程序性能的有效手段。传统的性能分析工具一般仅提供子程序级的性能分析,但对于高性能程序来说,对于循环程序的性能分析是必不可少的。现有的大部分高性能计算系统中大都具有能够进行循环级性能分析的性能分析器,有些还提供了友好的用户界面,如Intel的VTune、IBM的Xprofiler等。
一些第三方厂商也提供性能分析工具,比如Pallas的Vampir,它支持从Linux PC到IBM、HP、Sun、SGI等几乎所有的高性能厂商的产品。
3.资源管理和负载平衡系统
严格地说,负载平衡系统是运行时环境,而不是开发环境,但对于开发者来说,了解负载平衡系统是有必要的。
负载平衡技术在编译阶段不需要知道程序在运行时的任何信息,相反,它主要依靠系统运行时各处理节点的信息做出相应的决策。负载平衡将任务以动态启发式的方式在处理节点间分布,以达到减小总的执行时间、最大化系统吞吐量或最大化系统利用率等为目标。负载平衡强调适量的信息在节点间的有效通信,主要分为静态(static)和自适应(adaptive)两大类。通常认为随机放置(Random)和节点轮询(Round Robin)策略属于典型的静态负载平衡。而自适应性负载平衡通过集中的或分布式的通信,使用一个或多个阈值(threshold),即在系统参数到达阈值前后使用不同的策略。
目前动态的负载平衡算法的主要缺点是运行时的通信开销较大,未来还将向着简单有效的方向发展,并通过层次化的信息交换方式与适量的人为控制进一步提高通信的效率。
某些高性能计算系统主要用于提供共享的多任务处理环境。对于SMP系统来说,操作系统内置的任务调度器可以完成任务的调度功能。对于DMP系统来说,需要专门的软件来进行任务调度,达到负载平衡。负载平衡系统通过了解系统中各个结点的负载状况、计算能力、内存状况等,可以合理地分配任务的执行结点,必要时迁移现有的任务到其他结点,从而达到提高系统吞吐量的作用。
著名的负载平衡系统包括Platform公司的LSF(Load Sharing Facility)和Veridian的PBS(Portable Batch System)。这两个系统都支持多种操作系统和硬件平台,能够管理异构的集群系统。另外开放源代码的OpenMosix主要支持Linux集群系统。
展望
OpenMP将成为支持SMP系统编程的主要标准,将来的工作在于研究和开发更加有效的OpenMP编译器,以及更加强大友好的开发、调试工具。MPI和PVM将仍然是DMP系统的主要标准。
并行库是很有前途的开发方式和研究方向,随着更多的并行程序库的出现,并行化编程会越来越容易。
串行程序并行化必须以某种软件环境作为依托。例如,HPF(Hign Performance Fortran)可以提供共享内存模式的并行程序;MPI、PVM、PVMe、MPL和 NX 等消息传递库则提供消息传递模式的并行程序。编写共享内存模式的并行程序比较简单,用户的工作量比较小,但性能提高不大;消息传递模式的并行程序虽然编程考虑的问题比较多,相对比较麻烦,但只有这种方式才能将并行性能发挥到极致。程序自动并行化技术也能大大缩短并行程序的开发时间,但目前的技术即使对SMP系统也没有达到实用的水平,还需要技术上的突破。
网格计算是现在的热门话题,也是将来高性能计算的发展方向之一。为网格计算制定标准,提供所需的开发环境和运行环境将是未来的发展方向。
三、通信技术
最理想的情况下,高性能计算机的性能是所有节点计算性能的简单相加,实际上系统的整体性能根本达不到理想情况,主要原因是各节点之间存在通信时延。围绕减少通信时延,发展了独具特色的HPC通信技术。
高性能计算机往往采用多个处理节点。其根本思想就是将要完成的任务尽量分布到各个处理节点并发执行,在最理想的情况下高性能计算机的性能是所有节点计算性能的简单相加。但是由于节点间存在着通信延时和各个节点间的同步关系,使得系统的整体性能通常达不到理想情况。比如在某些MPP上其持续速度只是峰值速度的3%~10%。
另一方面,随着单个工作站(或微机)的性价比越来越高以及商业宽带网络的高速发展,集群系统(Cluster)得到了广泛的应用。同时,高性能计算也逐步向着松耦合(loosely Coupled)和复杂化的方向发展。大量的SMP集群(CLUMPs)的出现,使得高性能计算机内部节点与节点间的通信瓶颈愈发明显。因此,解决高性能计算机的通信问题也就成为了一个研究的热点,包括减小通信延时、任务粒度划分、负载平衡和调度等。
(一)基本互联方式和通信协议
在高性能计算机内部,各个节点通过互联网络进行连接并通信,以实现协同工作。根据高性能计算机内部节点耦合方式的不同,节点与节点间的通信连接方式也不同:
紧耦合(Tightly Coupled)计算机,如SMP系统,各个节点通常以共享内存的方式完成互联通信操作。这种共享内存的联接方式允许单一节点获得较高的内存访问吞吐量,且易于编程。但是随着节点数目、节点间通信量的增加以及操作系统切换进程等额外开销的增加,共享内存将成为系统性能的瓶颈,例如一个双路SMP系统,单节点拥有足够的处理能力但却经常出现内存或I/O总线竞争的情况。为此,现在一些SMP系统除了共享内存总线外还增加一些专用的消息通路,以减少共享内存的竞争和增加节点间的通信能力。不过,这种紧耦合的通信方式仍然限制了整个计算机节点数目的规模,一般的SMP系统只采用2~4个节点且扩展性差。
松耦合(Loosely Coupled)计算机,如集群(Cluster),其每个节点拥有自己的存储器,节点之间使用一些专用的或者通用的互联网络进行连接。它避免了共享内存所出现的资源竞争,有助于提高节点利用率,但节点间的互联网络速度较慢并有较大的通信延时。
目前一些商用集群的节点间连接通常使用快速以太网(Fast Ethernet)、千兆以太网(Gigabit Ethernet)、Myrinet等。其中快速以太网可以提供100Mbps的链路带宽,千兆以太网可提供1Gbps带宽,这两者可以通过交换机或路由器直接到桌面;而Myrinet由一系列交换开关组成,交换开关内部使用流水线机制,目前其带宽已经达到2Gbps以上。在通信网络的协议选择上可以使用普通的TCP/IP协议,也可以使用等效TCP/IP协议的精简协议,如Active Message、Fast Message、VIA(Virtual Interface Architecture)等。

(二)网络拓扑结构与基本通信方式
由于网络通信延时的关系,通信网络的拓扑结构对高性能计算机的性能有着非常重要的影响。不同拓扑结构的功能特性、网络时延、带宽、硬件复杂性、可扩展性和可靠性也不相同。下面是三种基本的连接方式:
● 2D或3D网络(2D、3D Mesh):连接方式非常简单,在同时对节点与其邻近节点交换数据频繁的应用场合非常有效。这种网络的性能主要取决于网络中路由器的性能。
● 超立方体(Hypercube)网络:这种连接的主要思想是减小任意两个节点间通信的“Hop”数。它的扩张性能较差,随着超立方体维数的增加所需要的节点数目按指数增长。

  ● 交换网络:所有的节点都直接与一个或多个高速交换开关相连,属于动态连接方式且速度很快。
在大型计算机中通信网络的拓扑结构可能更为复杂,因此在节点通信时往往使用一些寻径算法,这好比在IP网上面的分组路由操作。这些典型算法有存储转发、虚拟直通、线路交换、虫蚀寻径等。此外,与IP路由类似,在寻找路径时往往会遇到死锁、冲突、消息拥塞等现象。
不过,无论网络拓扑结构如何,高性能计算机节点间通信对于用户是透明的。其通信模式无外乎以下4种:
● 单播(Unicast):一个源节点到一个目的节点;
● 多播(Multicast):一个源节点到多个目的节点;
● 广播(Broadcast):一个源节点到全体节点;
● 会议(Conference):多个源节点到一个目的节点。
(三)任务粒度划分
在很多情况下,对于一个给定的并发程序,并不是增加更多的处理节点就可以获得更多的性能,因为随着节点数目的增加,节点间通信开销、同步的开销等都会增加。因此为了提高整个系统的性能,需要在任务通信时做以下几点的均衡考虑:
● 所需处理节点的数目;
● 执行任务模块或划分的数目(如是否将一些小规模的任务组合在一起串行执行);
● 系统通信开销。
而对这些诸多因素的权衡分析就是通过对任务粒度(task granularity)的分析而得到的。一个比较通用的任务粒度的定义如下:

式中G是任务粒度,R代表程序执行的时间,C是以通信时延为主的额外开销。G越小则粒度越细,数据流计算中的程序指令就是一个细粒度的典型例子;另一方面,如果G越大则粒度越粗大,其典型的例子有任务的子程序、函数等。通常的细粒度的任务并行度高,但是通信开销大;粗粒度任务的并行度低,但通信开销小。
为了最大限度发挥高性能计算机的并行度,我们往往把减小系统通信延时作为任务划分的依据,即将一些任务划分到一个节点上串行执行,使得通信延时的减小效果超过串行执行对性能的影响。
(四)静态调度与负载平衡
为了进一步减小并发程序的执行时间,在使用高性能计算机时往往要对所执行的任务做一定的调度。调度主要分为静态调度和动态负载平衡两种。静态调度主要是通过预先划分任务,减小节点间的通信开销,以达到提升系统性能的作用;而动态的负载平衡则是充分利用运行时节点与节点的通信,交互必要的系统信息,以提高整个系统的吞吐量。
对于静态调度,通常在程序编译阶段预测程序的执行时间与通信延时,并将小的任务汇集为较粗粒度(coarser-grain)的任务。这种调度主要分为完全优化(optimal)和部分优化(suboptimal)两大类。其中完全优化方案一般属于NP问题,只有当给定某些限制时才能进行完全优化的求解。由于完全优化方案的复杂性问题,大部分研究工作都是集中在部分优化方案上,即求得一个“较优”解(或可以接受的解)。部分优化方案的求解主要由近似式(approximate)和启发式(Heuristic)两种方法构成,其中包括模拟退火、线性或非线性规划、状态空间搜索等技术。不过它也存在很多缺点,如缺乏对任务执行和通信延时的有效预测,忽略对异地数据存取时带来的通信延时。
为了弥补这些缺点,目前对高性能计算机的执行时间预测器(execution time estimation)的研究广泛开展,如对用户预测、模拟预测和基于Profile预测的研究。
负载平衡技术已经在第二部分并行程序开发过程中介绍过了,这里不再赘述。
展望
减小通信时延是提高并行计算机性能的一项非常关键的技术,其手段大体上有硬件和软件两种。硬件上:对于通信网络可以通过改进拓扑结构、提高通信速度的手段实现;对于节点可以使用高速缓存、超线程技术等。在软件上可以通过改善任务划分和处理器的分配,以及适量的任务复制(即在不同节点上执行相同的任务)达到通信时延隐藏的效果;另一方面,充分利用节点间的通信,使用负载平衡技术也可以改善系统的性能。
总结
并行计算机体系结构,并行程序开发环境,通信技术三者在并行算法研究中的作用是密不可分的。三者从并行算法的硬件支持和软件环境这两个不同角度,不同层次,提出了对并行算法研究的全方位要求。只有这三个方面齐头并进,共同发展,才能推动并行算法研究波浪式的快速向前发展。

参考文献
并行计算机之路 郑纬民
《网格计算》 都志辉 陈渝 刘鹏 清华大学出版社
通信技术—减少时延 清华大学 林闯 谭章熹
体系结构—创新的步伐不断 中科院计算所 孙凝晖
并行计算模型的层次分析及性能评价 刘方爱 计算机科学
基于共享虚拟存储系统的波导加载谐振腔谐振频率的高效并行计算 施巍松 马积幅
面向共享虚拟存储系统的编译支持的通信优化技术 洪锦伟 计算机学报
并行计算机用户环境的设计与实现 吴明 计算机学报
 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值