高性能计算的核心关键技术之百家观点

发表于:2008-02-03来源:作者:点击数: 标签:高性能计算
体系结构—创新的步伐不断——中科院计算所 孙凝晖 20世纪80年代,可以说是高性能计算机体系结构和通信技术不断创新的年代,出现了包括MPP、SMP、集群等各种各样的体系,以及各种各样的互联技术;而从20世纪90 年代以来,高性能计算应用进入全面开花阶段,高性
体系结构—创新的步伐不断——中科院计算所 孙凝晖

  20世纪80年代,可以说是高性能计算机体系结构和通信技术不断创新的年代,出现了包括MPP、SMP、集群等各种各样的体系,以及各种各样的互联技术;而从20世纪90 年代以来,高性能计算应用进入全面开花阶段,高性能计算在科学计算、商业计算领域齐头并进,各种促进应用发展的技术如开发环境、存储、测试等技术不断完善;21世纪,我们将迎来高性能计算技术创新的春天,技术创新的步伐将会加快。今天,我们在此介绍高性能计算中的一些关键技术。

  抛开学术上对体系结构的划分,从应用的角度看看高性能计算机的发展规律。

  前美国总统信息技术顾问委员会两主席之一,IBM网格计划领导人Wladawsky-Berger曾认为,按照对国民经济和社会发展的影响程度,科学技术的发展可分为专家使用期、早期流行期、公众认识期、广泛使用期四个阶段。让我们依照这一思路看看高性能计算机的发展情况。

  专家使用期——只有少数专家能用

  在专家使用期,HPC是“大型机—终端”时代,只有少数专家可以使用,并且“会”用大型机(mainframe),解决科学研究中的计算问题。IBM 360系统和Cray-1,中科院计算所的757机、KJ系统、国防科大的银河-1等都是典型的系统。

  早期流行期——百花齐放

  在早期流行期,HPC是“PC—局域网—服务器”时代,专业人士开始广泛使用计算机,高性能计算机除进行科学计算外,还能做工程计算,如飞机设计、数值天气预报;做事务处理,如银行交易、企业管理信息系统等。高性能计算机呈现出百花齐放的局面,一个本质改变是微处理器取代了组合处理部件,高性能计算机的成本大大降低。

  从体系结构上看,以数据为计算原料的事务处理一直稳定在SMP(对称式共享存储多处理机)上,如Sun的Unix系统;在以计算(computation)为目的的高性能计算领域,则精彩纷呈。

  为了在一个时钟周期内做更多计算,人们将许多计算部件放在一个CPU内,成为向量机(vector),又以此为基础发展了共享存储的向量机,能共享远地存储的分布式存储向量机,如NEC SX-5系统。为了让一个应用能使用很大的内存,人们将分布在不同CPU周围的内存合并成一个逻辑的大内存,成为分布共享系统(NUMA),又以此为基础发展了COMA、NCC-NUMA、clearcase/" target="_blank" >cc-NUMA系统等,如SGI的Origin系统等。

  为了让应用能并行地使用尽可能多的CPU解决一个大问题,人们将大量小的处理单元用互联网络连接起来,成为大规模并行处理系统(MPP),又在此基础上发展了可物理地共享存储的MPP系统,和可逻辑地由虚存来共享存储的系统,如Cray T3E、计算所的曙光1000和金怡廉院士设计的神威等。这个时代,用户多在自己的PC上通过网络使用被称为“巨型机”和“超级计算机”(supercomputer)的这些高性能计算机。

  公众认识期——逐渐为人所熟悉

  在公众认识期——我们现在处于的时期,是“Internet”时代,广大的机构、企业和民众开始大量使用信息技术,与高性能计算机打交道,带来这一改变的当然是Internet和Web了。

  对高性能计算机来说,有两个变化改变着游戏规则:一个是以Intel CPU为代表的微处理器,正在飞快地缩小桌面系统与后台系统的处理单元在计算能力上的差距,这是“摩尔定律”在向人们显示的威力;另一个是商品化和标准化不断发挥作用,由此导致了信息产品的量产,大量用户能够使用高端技术,系统的性能价格比迅速提高,由此形成正反馈。以IBM为例,它的eServer的四个系列在CPU、高性能部件、操作系统、数据库等上越来越走向统一。

  这个时代在高性能计算机上的伟大贡献显然是集群(Cluster)体系结构了。Cluster就是用标准化的互联网络(定制或商品化)将量产的高性能部件连接起来,用软件提供单一系统映像。在Cluster平台上,科学计算、事务处理和“Internet”时代特有的信息服务应用都能运行自如。典型的系统有IBM SP、HP AlphaServer SC以及计算所的曙光2000、曙光3000。

  广泛使用期——HPC变成HPS

  在广泛使用期,人们将看不到计算机系统,看到的是各种各样的服务,这就是IBM的按需计算,计算所提倡的网格计算所描叙的美妙未来。这个时代的本质变化是高性能服务(High Performance Service),HPC变成HPS,这时的高性能计算机体系结构是什么,人们尚不知晓。但是我们可以预测一下现有的体系结构的走向。

  在商业计算领域,IBM的大型主机会维持它在以银行交易结算为代表的特定领域的市场,但不会有大的发展了;SMP系统是主流,以大节点SMP系统构成的集群系统将不断进入企业,甚至是银行、证券这些最保守的领域。

  在技术计算领域(technique computing), MPP、cc-NUMA、VPP系统在最追求性能的应用领域会有一席之地,其中MPP/VPP在构造最大系统,最追求应用饱和性能的用户,以及资金充足的政府机构那里依然受到追捧;大型的cc-NUMA系统将逐渐走向衰落,理由有二:一是它的惟一优势是大物理内存,大量CPU共享内存的高效编程对用户是一件困难的事;二是用算法和软件的方式使用大内存,要有效和经济得多。但NUMA技术不会衰落,在IBM P690的板与板的互连中,AMP Opteron的CPU之间的互连中,都采用NUMA方式,只是规模较小而已。SMP系统由于应用的持续性,集群系统由于无可比拟的性能价格比将占据主流位置。

  未来发展

  高性能计算机的体系结构创新的挑战在哪里?我们认为在两个方面:一是满足新需求的技术创新,如电子商务、生物信息、信息安全、网格计算等都提出了新的需求;二是解决存在问题,集群技术无疑是应坚持的技术路线,但这一体系结构存在很多问题,如系统中有许多操作系统映像,天生单一系统映像差;当系统较大时,可扩展性和可靠性较差。计算所智能中心将重点放在四项技术上进行创新,分别是网格零件、数据密集技术、全频谱服务和大规模集群计算。

  开发环境—搭建应用的基础——清华大学 郑纬民 陈文光

  并行程序的编程模型、运行环境、调试环境等都要比串行程序复杂得多。提供良好的高性能计算开发环境,一直是学术界和工业界所追求的目标。

  目前比较流行的高性能计算系统,大体可以分为两类:一类是共享内存系统(SMP),如IBM的P690,HP的SuperDome等,其特点是多个处理器拥有物理上共享的内存;一类是分布存储系统(DMP),如MPP和集群系统,其特点是系统由多个物理上分布的结点组成,每个结点拥有自己的内存,结点通过高速以太网或专用高速网络连接。本文主要介绍这两类系统上的开发工具。

  一、并行程序的开发模式

  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.资源管理和负载平衡系统

  严格地说,负载平衡系统是运行时环境,而不是开发环境,但对于开发者来说,了解负载平衡系统是有必要的。

  某些高性能计算系统主要用于提供共享的多任务处理环境。对于SMP系统来说,操作系统内置的任务调度器可以完成任务的调度功能。对于DMP系统来说,需要专门的软件来进行任务调度,达到负载平衡。负载平衡系统通过了解系统中各个结点的负载状况、计算能力、内存状况等,可以合理地分配任务的执行结点,必要时迁移现有的任务到其他结点,从而达到提高系统吞吐量的作用。

  著名的负载平衡系统包括Platform公司的LSF(Load Sharing Facility)和Veridian的PBS(Portable Batch System)。这两个系统都支持多种操作系统和硬件平台,能够管理异构的集群系统。另外开放源代码的OpenMosix主要支持Linux集群系统。

  三、发展趋势

  OpenMP将成为支持SMP系统编程的主要标准,将来的工作在于研究和开发更加有效的OpenMP编译器,以及更加强大友好的开发、调试工具。MPI和PVM将仍然是DMP系统的主要标准。

  并行库是很有前途的开发方式和研究方向,随着更多的并行程序库的出现,并行化编程会越来越容易。

  程序自动并行化技术也能大大缩短并行程序的开发时间,但目前的技术即使对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预测的研究。

  负载平衡技术在编译阶段不需要知道程序在运行时的任何信息,相反,它主要依靠系统运行时各处理节点的信息做出相应的决策。负载平衡将任务以动态启发式的方式在处理节点间分布,以达到减小总的执行时间、最大化系统吞吐量或最大化系统利用率等为目标。负载平衡强调适量的信息在节点间的有效通信,主要分为静态(static)和自适应(adaptive)两大类。通常认为随机放置(Random)和节点轮询(Round Robin)策略属于典型的静态负载平衡。而自适应性负载平衡通过集中的或分布式的通信,使用一个或多个阈值(threshold),即在系统参数到达阈值前后使用不同的策略。

  目前动态的负载平衡算法的主要缺点是运行时的通信开销较大,未来还将向着简单有效的方向发展,并通过层次化的信息交换方式与适量的人为控制进一步提高通信的效率。

  发展趋势

  减小通信时延是提高高性能计算机性能的一项非常关键的技术,其手段大体上有硬件和软件两种。硬件上:对于通信网络可以通过改进拓扑结构、提高通信速度的手段实现;对于节点可以使用高速缓存、超线程技术等。在软件上可以通过改善任务划分和处理器的分配,以及适量的任务复制(即在不同节点上执行相同的任务)达到通信时延隐藏的效果;另一方面,充分利用节点间的通信,使用负载平衡技术也可以改善系统的性能。

  存储技术—推陈出新——国家高性能计算机工程技术研究中心 肖展业 张建刚

  存储系统在中高端计算机系统价值中所占比例不断升高,现已达到50%以上,有些甚至达到75%。

  现在市场上存在着的三种存储方案 SAS或者DAS、NAS、SAN都满足了不同规模HPC的应用需求。

  DAS——老兵有新用场

  SAS和DAS是同一存储方式的不同名字。这种方式是最为传统的存储方案。磁盘设备通过系统总线适配器直接连到计算机。连接的形式可以是通过IDE、SCSI、光纤通道的直接连接模式。不同的连接方式提供了不同的传输速度。而实际可达到的数据传输速度随着系统的配置及连接方式的不同而不同。其连接速度能达到理论速度的20%~85%。

  DAS的特点是采用直接连接方式。因此,除了直接连接的计算机之外,其磁盘设备是不能与其他计算机物理共享的。共享往往是通过NFS或CIFS等协议实现“软”共享。最近出现的Dual-Ported Disk Array是一个例外。这种磁盘阵列设备可以通过SCSI直接连到服务器。由于它有两个端口,所以,它可以同时连到两个不同的服务器。许多高档的文件服务器系统都使用这种装备。例如,HP的文件服务器及Veritas的VCS系统。Veritas的VCS系统可以用两个文件服务器实现高可用文件服务系统,只不过在任意时刻,只有一台服务器访问磁盘,而另一台服务器则只能等待。

  NAS——支持新的协议DAFS

  NAS是现在较为流行的一种存储方式。由于它的流行性,人们给予它一个特殊的名字:filer。简言之,它是特制的网络文件系统服务器。不同的厂家采取不同的特制方式。特制的方面包括系统硬件、操作系统及系统管理等。

  所支持的协议通常包括NFS和CIFS。此外,支持HTTP和备份服务也是其常见的特点。除此之外,NAS系统是不允许安装和运行任何其他应用的。连接的形式多数是百兆以太网或千兆以太网,实际可达到的最大数据传输速度分别为11MB/s和32MB/s。

  值得注意的是Network Appliance从2001年开始推动DAFS Collaborative。这个联盟现在已有许多公司参加,几乎囊括了所有著名的计算机公司。

  DAFS(Direct Access File System)是一个基于NFS v4的新的网络文件系统协议。它是为本地数据共享(Local Sharing)环境中取代NFS v4而设计的。目标是为高性能的应用提供低延迟共享存储系统。存储系统可以通过光纤通道、千兆以太网或InfiniBand来连接。其核心技术基于VIA(Virtual Interface Architecture)。此外,这个协议还通过高速锁、Fail-Over、隔离、数据恢复等技术提供了数据的一致性和可靠性的保障。也许在不远的将来,NAS系统也需要支持DAFS。

  SAN——不断推陈出新

  SAN是一个相对较新的存储技术。早期的SAN几乎全部是基于光纤通道技术的。光纤通道提供了两种连接方式:Arbitrated Loop (AL)和Switch。由于光纤通道技术的一些原因,SAN发展相对较为缓慢。这些原因包括:

  ● 光纤通道设备的互操作性差。

  ● 采用光纤通道技术的系统造价非常昂贵。

  ● 管理基于光纤通道技术的SAN非常昂贵。

  网络技术的进步,特别是千兆以太网和InfiniBand的出现,为网络存储注入了新的活力。硬件技术和嵌入式技术的发展,也为网络磁盘系统的实现提供了可能性。近来,基于IP的存储系统(IP SAN)呼声越来越高。从存储设备方面,CMU提出了NASD(Network-Attached Secure Disk),Segate也提出了高智能磁盘计划。从网络存储协议方面,iSCSI已经历时多年,最近已经推出最后版本,相关的标准,如iFCP,也在制定之中。此外,Linux系统中NBD(Network Block Device)也为其实现提供了实际的例子。

  NAS与SAN的融合——大势所趋

  近来包括IBM、HP、Dell在内的一些公司先后推出了与其SAN产品相结合的NAS Head产品。如Auspex的公司的产品NSc 3000的前端通过传统的IP网络与客户端相连,后端通过FC SAN与网络存储设备相连。NSc 3000向其客户端提供传统的服务,如NFS或CIFS。客户端将所有的请求送给NSc 3000,其系统相应也通过NSc 3000送还给用户。通过NSc 3000这样的NAS Head,NAS系统与SAN系统可以共享存储空间。

  NAS Head系统虽然在一定程度上解决了NAS与SAN系统的存储设备级的共享问题,但在文件级的共享问题上却与传统的NAS系统遇到了同样的可扩展性问题。当一个文件系统负载很大时,NAS Head很可能成为系统的瓶颈。

  一些分布式文件系统也是NAS与SAN融合的产物,其中,一些系统使用的是FC SAN存储设备,而另一些却以IP SAN存储设备为主。EMC公司也在2001年推出了一个新的存储系统——HighRoad MultiPlex File System。HighRoad系统中包含一个或多个名为Celerra的系统服务器、多个Unix和Windows的客户端,以及多个名为Symmetrix的网络存储设备。系统服务器和客户端都是通过光纤通道与存储设备相连,而系统服务器与客户端则通过传统的IP网络连接。在HighRoad系统中,系统服务器是惟一需要理解文件系统结构的部分,其他的系统组成部分都与文件系统无关。系统服务器通过IP网络向客户端提供文件元数据服务;客户端在获取元数据信息之后,通过光纤通道直接访问网络存储设备。文件的数据位置信息和并发文件访问都是通过FMP(File Mapping Protocol)协议实现的。一个HighRoad系统中可以含有多个文件系统,但每个文件系统必须与一个系统服务器相对应。此外,在该系统中,文件系统必须支持预留(Reservation)、预分配(Pre-Allocation)、延迟提交(Delayed Commit)等资源管理技术。

  在HighRoad系统中,由于一个系统服务器负责一个文件系统的全部元数据服务,因此系统服务器的性能对于整个系统的性能有着很大的影响。在系统负载很重时,系统服务器有可能成为系统的瓶颈,因而系统的可扩展性较差。

  杜克大学的SFS也是一个分布式的NFS。在这个系统中,存在着三种子系统:应用服务器、系统服务器和存储设备。所有的文件被静态地映射到相对应的系统服务器。客户服务器完全通过系统服务器访问文件。为了给用户提供一个完全透明的使用环境,一个特殊的网络设备——μproxy,也被加入到系统中。μproxy是一个文件系统代理,它将文件请求变换后,分送到不同的系统服务器上。

  SFS的问题在于它的可扩展性和动态处理能力相对较弱。这个系统基本上采用哈希方式将文件请求映射到系统服务器,静态的文件绑定使得系统缺乏动态的应变能力。在可扩展性方面,也由于静态绑定变得极不灵活。此外,SFS只是一个文件系统,它并不具有很强的数据管理功能。

  国家高性能计算机工程技术研究中心目前与曙光公司等单位承担863项目——“海量存储系统技术与集成”。通过该项目的研究与开发,工程中心已研制成功了多项关键性技术,包括“蓝鲨”网络存储设备、“蓝鲸”网络存储系统等。

  测试技术—什么样的系统适合你——中科院软件所并行计算实验室 张云泉

  评估和测试PC的性能有BenchMark,而对高性能计算系统而言,其评估和测试的BenchMark是什么呢?

  计算机的性能评估与测试就是我们通常所说的BenchMark,普通的计算机用户对于BenchMark并不陌生。相比较而言,HPC的性能评估与测试要复杂得多,需要加上专家的知识才能真正地对一个系统进行客观、公正的综合评价。

  随着HPC系统的逐渐普及、体系结构的统一和并行程序设计环境的标准化,已经有几个经过多年开发和改进的Benchmark软件包逐渐获得厂商、用户和研究者的认可,这些软件包或测试程序是Linpack测试、NAS Parallel Benchmark、SPEC HPC测试、IDC Balanced Rating等。这些测试软件包能从3个方面推动高性能计算的发展:在机器采购过程中扮演不可替代的角色;帮助应用科学家对生产用软件在特定高性能计算系统上可能达到的性能水平进行估计;帮助计算机科学家对不同计算机硬件、软件和算法的改进方案进行定量的评估。

  目前,根据所测试的层次不同,通常把测试程序分成以下几个层次,对应HPC系统的不同性能水平,所测得的性能从高到低为:机器峰值;Linpack测试,核心测试,机器实际可达到的性能的上限;NASA NPB,紧凑应用程序测试,8类实际应用核心和模拟应用程序,分辨机器适应的应用种类;SPEC HPC测试,机器在运行大型应用程序时的性能;用户的实际应用程序测试。

  Linpack

  由Jack Dongarra教授编写的Linpack是在高性能计算领域最出名和使用最广泛的基准测试。Linpack使用线性代数方程组,利用选主元高斯消去法在分布式内存计算机上按双精度(64 bits)算法,测量解线性方程的稠密系统所需的时间。Linpack的结果按每秒浮点运算次数(flops)表示。第一个Linpack测试报告出现在1979年的Linpack用户手册上。

  Linpack原始版本的问题规模为100×100的矩阵,目前的Linpack测试分成三个层次的问题规模和优化选择:

  ● 100×100的矩阵 在该测试中,不允许对Linpack测试程序进行任何哪怕是注释行的修改。

  ● 1000×1000的矩阵 在该测试中,允许对算法和软件进行修改或替换,并尽量利用系统的硬件特点,以达到尽可能高的性能。但是所有的优化都必须保持和标准算法如高斯消去法相同的相对精度,而且必须使用Linpack的主程序进行调用。

  ● 针对大规模并行计算系统的测试,其名称为High Performance Linpack (HPL) HPL 1.0版于2000年9月发布,是第一个标准的公开版本并行Linpack测试软件包,一般用于TOP500超级计算机上的并行超级计算机。HPL与其前辈不同,使用者可以选择矩阵的规模(问题规模)。

  很多人把用Linpack基准测试出的最高性能指标作为衡量机器性能的标准之一。这个数字可以作为对系统峰值性能的一个修正。通过测试求解不同问题规模的实际得分,我们不仅可以得到达到最佳性能的问题规模,而且可以得到达到最佳性能值的一半的求解问题规模,这些数字与理论峰值性能一起列在TOP500列表中。总体来说, Linpack是一个比较成熟的测试标准。

  NAS并行基准测试

  数值空气动力学模拟 (NAS)并行基准测试NPB (NAS Parallel Benchmark)已经广泛地应用于并行计算机的测试和比较中。NPB是由NASA Ames于1991年研究开发的,并在当年发布NPB 1.0版本,于1996年发布了带有具体MPI实现的NPB2软件包。目前NPB2的最新版本是2002年11月19日发布的2.4 beta版本和NPB3 alpha版本。

  NPB是应用核心基准测试。NPB套件由8个程序组成,它来源于计算流体动力学(CFD)的代码。这8个不同的程序从不同的方面反映了CFD计算的特点。8个程序中的每一个——5个核心和3个模拟CFD应用,代表航空、物理学应用高性能并行计算的全貌。5个核心(EP、FT、MG、CG和IS)代表在CFD应用中使用的5种不同数值方法的计算核心。目前每个基准测试有4类问题规模:A、B、C、D,其中的Class D是最近增加的。A是规模最小的,D是最大的。

  NPB2的测试结果报告可以有3种形式:0%(无任何改变)、小于5%(小于5%的源代码修改)和大于5%(大于5%的源代码修改)模式。

  SPEC HPC测试

  SPEC成立于20世纪80年代末,它的目的就是“建立、维持和认证相关的基准测试以应用于新一代的高性能计算机”,它的主要工作有两个:开发测试计算机性能的测试工具,这些工具以代码的形式发布;在SPEC网站(http://www.spec.org)上发布通过认证的测试结果。

  High Performance Computing Group (HPC)是其一个分组织,主要测试高性能计算机。主要测试程序有SPEC HPC96、SPEC HPC2002和SPEC OMP 2001系列,其中的SPEC HPC96已经于2003年2月被SPEC HPC2002取代。

  SPEC HPC软件包有三大组成部分:SPEC CHEM(化学)、 SPEC ENV(环境)、SPEC SEIS(地震)。

  SPEC HPC2002软件包支持MPI和OpenMP并行程序设计环境,包含3个测试程序,每个都有小规模和中规模测试数据集。

  (1)SPEC ENV2002: 该程序基于气象研究和预报模型WRF之上,有SPECenvM2002和 SPECenvS2002两个评价指标;

  (2)SPEC CHEM2002:基于量子化学计算软件GAMESS,有SPECchemM2002和SPECchemS2002两个评价指标;

  (3)SPEC SEIS2002: 基于寻找天然气和石油工业过程的时间和空间叠前偏移计算,有SPECseisM2002和 SPECseisS2002两个评价指标。SPEC HPC2002的评价指标说明了一个系统在24小时能运行的性能测试次数。

  SPEC HPG计划发布一个更为全面的HPC测试软件包。该软件包将包括新版本的地震资料处理和量子化学计算程序,并考虑增加其他领域的测试程序。

  IDC 平衡评价指标

  IDC新推出的平衡评价指标(Balanced Rating)通过测试计算系统的处理器、内存和可扩展性能来评定系统的性能。该系统只能对已安装在客户场地运行的系统进行测试,而不是在厂家那里进行测试。对于处理器,该系统使用Specfp_rate_base2000基准来测试其浮点运算能力,使用SPECint_rate_base2000来测试整数计算能力,而使用“Linpack Rmax”来测试解决密集线性方程的能力。

  内存系统容量测试包括在给定期间内可以将多少数据移入和移出内存;可扩展性能测试则通过使用全部处理器计算、全部系统内存和连接的带宽来确定。 该系统目前包括6项测试,但是IDC希望在未来几年将测试数目增加到12项。

  IDC平衡评价指标排行包括4个独立的排行:一个综合排行;另外3个按处理器、存储系统和可扩展性进行的排行。

  IDC 平衡评价指标测试的目标并不是完全替代为了某种特定购买目的而进行的专门测试。IDC已经和San Diego超级计算机中心联合开始了一个更加综合并面向用户需求的测试软件包的研究工作,以便用户可以根据自己的特定需要对计算机进行满足需要的个性化排名。

原文转自:http://www.ltesting.net