个人集群 走近你的办公桌
几年前,当第一款双核处理器出现在市场上的时候,我曾经和一家CPU厂商的技术人员谈起过:双核对HPC会带来什么样的影响?我看好的是HPC scale up(向上扩展)的方式,即每块主板上集成越来越多的CPU内核,而不是scale out(向外扩展)的方式,即一个集群里集成越来越多的服务器节点。这里我们来看一下,对于一个双路或四路的服务器来说,如果使用双核,就可以在一个系统中集成4-8个内核,如果使用四核,就可以把CPU内核数扩展到8-16个。要知道,在几年前,使用2U机架双路单核服务器,一套16个节点的X86集群就需要占据一个机柜中32U的空间;如果再加上交换机、KVM、UPS等设备,42U的机柜很容易就被挤得满满的了。而多核的发展,使得在一个系统内集成更高计算性能变得更为容易。
今天,四核CPU已经成为HPC服务器的标配,六核处理器也在去年出来了,明年还会出现8核的处理器。多核技术的发展开始推动人们考虑把HPC的应用从传统的数据中心机房里迁移到一台部门级服务器上,或者甚至迁移到桌边的工作站中。这个趋势,我们已经无法再忽视了。其中起作用的因素有几个,首先也是最明显的因素就是多核——一台服务器里集成了越来越多的内核,已经有足够的计算性能满足大多数HPC应用的需求;其次,就是供电和散热制冷技术的发展,使得针对办公室环境的HPC成为可能;最后一个因素也许会让你大吃一惊:大多数人并不需要那么多内核!小规模的HPC足以担当你的应用扩展。
下面,我们就逐一来讨论一下,看看他们对部门级HPC系统、个人HPC系统会带来什么样的影响。
多核推动HPC小型化
今天,CPU内集成的内核数越来越多。四核处理器已经是HPC的标配。英特尔和AMD都推出了性能不错、高效节能的四核产品。六核心至强7400处理器在去年也已经推向市场。备受关注的英特尔Nehalem EP至强服务器处理器也将在今年3月份正式发布,预计会大幅提升四核平台的性能。今天,一块四路服务器主板上可以集成多达16-24个内核。而且,英特尔八核心Nehalem EX至强处理器也有望在今年底或明年初推向市场。
除了X86处理器,流处理器或GPU处理技术(即通用图形处理单元,General Purpose - Graphics Processing Units,简称GP-GPU)也得到了快速发展。测试表明,对于许多特定的应用,这种硬件可以获得比传统通用处理器更大的性能加速比。全球主要的显卡制造商象NVidia和AMD/ATI,都已经设计了相应的产品来给HPC用户使用。这些系统都是通过使用大量的主频较小的内核(比如800个以上内核)来并行计算某一个特定的问题。它们可以作为1U服务器安装在机柜中,也可以作为台式机放在你的工作台上或你的脚下。
不管是什么样的外形,总之,多核技术的发展使得我们可以在一个小的空间里实现相当高的计算能力。这一点使得HPC系统再也不必象以前那样总是呆在数据中心机房的机柜里了。
大多数HPC软件用不到32核
谈到高性能计算,人们总会提起全球高性能计算机性能TOP500排行榜。每当新一届TOP500发布时,我总是会做一些小调查,比如“今年TOP500系统用到了129600个CPU核,你的典型应用能够用到多少个核?”借此我想提醒大家TOP500中的系统毕竟是全球最快的超级计算机,主要是专门为一些大问题来设计的,象天体物理、核爆炸,关心这类问题的人毕竟是少数。对于大多数HPC用户来说,并不需要这么多的核。一般来说,我听到的答案是,以8核或16核的居多,能用到32核以上的就很少了。
IDC在SC08(2008年国际超算大会)上也公布了对78个ISV软件扩展性的调查结果。发现,只使用一个核的应用软件占了24%,使用2-8个核的应用占了32%,9-32核之间的比例是26%,能使用到32个以上核的应用不到20%。也就是说,适合32个以下内核的软件仍然是当前ISV市场的主流,比例高达82%。
最近,我自己也对106个HPC从业人员进行了一项小规模的调查,我问了他们一个相同的问题:“针对MPI任务,你使用的核心数量范围是多少?”结果如下图所示。接近一半的受访者用不到16个核。注意,这个调查没有进一步细化,因此结果中既涉及到了从ISV购买软件的用户,也包括自己写代码的用户和那些使用开源软件的用户。
这一系列的调查都证明,当前大部分的HPC应用所使用的内核数都少于32个。#p#page_title#e#
市面上的“个人超级计算机”
要让个人HPC进入办公室,除了性能,供电、散热、静音、尺寸大小等因素也非常重要。近年来,英特尔和AMD在开发多核处理器时都尽量不增加额外的功耗。比如,当前的四核产品的功耗水平与上一代的双核相当,尽管主频会低一点。这种设计使得无论是机架式服务器还是刀片式服务器都可以大幅地提升CPU核的集成密度,同时减少空间占用和散热压力。
这里以IBM公司的Blade Center S刀片服务器为例。它可以安装在机柜中,也可以放在办公桌边。由于使用的是110-220伏的标准电源,在一个刀片机箱里最多可以插入6块刀片,总内核数达到48个。该系统集成了共享内部存储模块,存储容量高达12TB SATA或12TB SAS。另外,Blade Center S可以选配一个下面带有轮子的防护罩,不仅可以防灰防尘防水,还可以方便移动,因此,非常适合办公室应用场合。此外,Blade Center S的噪音也较低,这对于办公室环境来说是非常必要的。HP、DELL和超微也推出了类似这样的系统。
还有值得一提的是CRAY公司去年推出的CRAY CX1“超级计算机”。CX1可以被看作是下面带有轮子的刀片服务器。对于这类规模的系统而言,移动性是很人性化的设计,也许其他厂商的刀片服务器也应该加上这一点。CX1最大支持64个英特尔处理器核,同时可以配置InfiniBand网络。与其他刀片系统类似,它也可以共享存储刀片和标准的办公室用电源设备。在中国,曙光公司去年也推出了类似的所谓个人高性能计算机的PHPC100。
也许有人会质疑这种为办公环境设计的刀片服务器是否真的适合HPC应用?其实这一点不必担心。比如,Blade Center S QS22刀片可以提供两颗 IBM PowerXCell 8i 处理器和双通道DDR InfiniBand网络连接。QS22刀片的单精度计算性能高达6.4 TFLOPS,双精度性能也可以达到3.0 TFLOPS,在性能上已经相当不错。其他大多数刀片也都支持InfiniBand网络。CX1还支持NVidia Telsa GP-GPU刀片,支持流计算应用。
软件编程和操作系统选择
多核技术对于服务器系统的设计也产生了重要影响。我们知道,除了普通的集群之外,还有很多小系统实际上应该被归为星群“Constellations”。根据Beowulf集群创造人Tom Sterling 的定义,“星群是一种使用大型SMP节点的集群,其中每个节点的处理器数要大于节点本身的数量。”今天的很多小“集群”其实都适合这个定义。打个比方,一套32核的系统,如果由分别安装有8个内核的4个节点组成,那么,它就是星群;而如果由分别安装4个内核的8个节点组成,那么,它才是真正意义上的集群。从上层软件的角度来看,在进行应用开发设计时是需要对此进行考虑的。
HPC的并行软件代码,通常是用MPI写的,可以在多核服务器上运行;当然它们也可以跨越几台多核服务器。上面提到,有许多小型的部门级系统实际上是星群,所以需要考虑一些不同的软件设计方法。 在并行计算领域,MPI和OpenMP是最为流行的编程模型。程序员面临的最大问题就是:我写的代码是在集群系统上跑,还是在星群上运行,或者是针对SMP系统?这个问题的答案取决于应用,以及你希望能实现的最大系统扩展性。如果因为受Amdahl定律限制,很难获得8倍以上的性能提升,那么你最好针对SMP设计,使用类似OpenMP的方法。如果你需要更多的内核,那么可以试试MPI。或者,为了充分利用SMP集群层次存储结构的特点,可以考虑将上述两种编程模型相结合,实现MPI/OpenMP的混合编程,由MP I负责节点间并行,OpenMP负责节点内的多线程并行。不管是那一种,你在做软件开发时都需要事先做好决策。不幸的是,现在还没有一种编程语言适合所有的场合。
OpenMP并行模型 | MPI并行模型 | |
原理 | OpenMP使用Fork-Join的并行执行模式。开始时由一个主线程执行程序,该线程一直串行地执行,直到遇到第一个并行化制导语句后才开始并行执行。过程如下: ①Fork:主线程创建一队线程并行执行并行域中的代码;②Join:当各线程执行完毕后被同步或中断,最后又只有主线程在执行。 | 消息传递编程模型是使用显式方式控制并行性的分布存储模型,MPI是这一模型的事实标准。MPI可移植到分布和共享存储体系结构上,而且允许静态任务调度。显式并行通常提供了一个更好的性能和可移植性。特别适用于粗粒度的并行,使用MPI实现单程序多数据(SPMD)并行模型时,每个进程只能读写本地内存中的数据,对远程数据的访问则通过进程间显式的消息传递(库函数调用)来完成的。MPI包含了多种优化的组通信库函数,可供编程人员选择使用最佳的通信模式。 |
并行粒度 | 线程级 | 进程级 |
存储方式 | 共享存储 | 分布式存储 |
数据分配方式 | 隐式 | 显式 |
编程复杂度 | 相对简单,充分利用了共享存储体系结构的特点,避免了消息传递的开销。数据的放置策略不当可能会引发其他问题;并行化的循环粒度过小会增加系统开销等。 | 编程模型复杂:需要分析及划分应用程序问题,并将问题映射到分布式进程集合;细粒度的并行会引发大量的通信,需要解决通信延迟大和负载不平衡两个主要问题;调试MPI程序麻烦;MPI程序可靠性差,一个进程出问题,整个程序将错误。 |
并行化 | 虽然它也支持粗粒度的并行,但主要还是针对细粒度的循环级并行。将串行程序转换为并行程序时无须对代码作大的改动。 | 并行化改进需要大量的修改原有的串行代码。 |
可扩展性 | 可扩展性差: OpenMP采用共享存储,意味着它只适应于SMP、DSM机器,不适合于集群。 | 可扩展性好:适合于各种机器 |
还有一个软件问题是对操作系统的选择。今天,高端HPC大多采用Linux,但对于低端系统(个人级或部门级),已经有了另外一种选择——微软Windows HPC Server 2008。上文提到的几乎所有系统都可以支持微软的HPC方案。考虑到微软目前在桌面系统上占据霸主地位,随着HPC个人化趋势日益明显,用户应该会看到,选用基于Windows的HPC方案能更好的与现有环境集成在一起。当然,Linux也是一种选择,但需要考虑好一下互操作性。
小结:个人HPC走近你身边
总结一下,上面我们讨论了部门级HPC和个人HPC的新趋势,今天应用软件扩展性限制、高效设计的刀片、占用空间较小的系统等因素,加上多核计算技术的蓬勃发展,已经给HPC用户带来了一些非常有意思的新选择,使得我们今天可以考虑把HPC应用从传统的数据中心机房里迁移出来,放在桌边的小机器上来运行。
这种迁移需求也许会引起一些争议。我们要注意的是,把计算资源放在什么地方,主要取决于你的现有环境。如果你机房里的空间和电力还够用,那么买一台小型部门级刀片集群,搁在机房里会更有好,毕竟有专门的IT人员会来管理它;但如果你的数据中心正面临电力不足、空间不足、散热能力不足等困境,那么把机器放在办公室环境里也确实是个不错的选择。