本文摘自: [url]http://news.ccw.com.cn/elife/htm2007/20070617_273592.shtml[/url]

未来多核芯片将无处不在,针对多核的软件开发将是摆在软件产业界面前的一个大的挑战。
相对而言,多核对台式机、笔记本电脑和移动设备上的软件挑战更大。

6月5日,Google正式对外宣布,它已收购专门提供基于高性能、多核和并行处理器的软件编程工具的专业厂商PeakStream。尽管目前尚不知晓Google关于PeakStream的未来计划,但是业界普遍认为,Google肯定是在为开发多核系统所用的高性能应用软件做准备。

事实上,从2006年以来,在Intel、AMD两大巨头的大力推动下,多核的普及已成为必然。然而,要真正发挥多核的潜能并不容易,因为针对多核或多线程的软件开发要比单核或单线程编程工作艰难得多。而今,随着多核的普及,如何开发与多核相适应的软件日益成为众人关注的热点问题,众多软件供应商,如Google、Microsoft、Oracle、以及Linux的软件供应商都在积极着手准备,向多核时代过渡。

多核时代来临

说到底,出现多核处理器的最根本原因是人们对计算能力永无止境的追求。尽管这些年来,处理器从来没有停止过前进的脚步,但每一次性能的突破,换来的只是对更高性能的需求,特别是在油气勘探、气象预报、虚拟现实、人工智能等高度依赖于计算能力的场合,对性能的渴求更加迫切。

比如,油气勘探作为一个对计算能力需求非常旺盛的行业,其快速准确的计算对油气田的发现起到十分关键的作用。承担冀东南堡油田三维地震勘探计算的中国石油东方地球物理公司,整个研究院装机容量就达到了8000多个CPU,今年年底将达到1万个CPU,每秒可以完成40万亿次的运算; 承担全国天气预报计算任务的×××国家气象中心目前的计算能力也超过每秒20万亿次,但是,目前这些计算能力仍然不能满足他们的需求。还有金融企业,他们希望对金融交易进行更加高性能的分析,医药界希望在开发新药方面能够加快速度,一些商业分析师也希望对零售业分析更加快捷高效,这些工作无一例外严重依赖于计算能力,种种需求有力地推动了计算能力的提升。

过去计算能力的提升一直在摩尔定律的指引下,沿着提升CPU时钟频率的这条道路前进,从初期的几十MHz到不久前IBM的Power 6达到了4.75GHz,设计人员甚至想过提升到7G~8GHz。不过,进入2002年以来,CPU提升主频的困难越来越大,因为主频的提升带来了散热和功耗的大幅增加等问题。在几年前,英特尔和AMD都调整了研究方向,开始研究在同一CPU中放置多个执行内核。到2006年年末,英特尔已在全球同步推出了四核的面向服务器、工作站的至强5300处理器,AMD的四核处理器也是指日可待。

多核的好处非常明显。首先,由于是多个执行内核可以同时进行运算,因此可以显著提升计算能力,而每个内核的主频可以比以前低,因而总体功耗增加不大。其次,与多CPU相比,多核处理器采用与单CPU相同的硬件架构,用户在提升计算能力的同时无需进行任何硬件上的改变,这对用户来说非常方便。正是由于多核的这些优点,所以,多核很快被用户接受,并得以普及。根据IDC的一份报告,到今年年底80%~90%出货的PC其CPU都是多核的。

多核挑战软件开发

毫无疑问,多核给我们提供了更经济的计算能力。但是,这种能力能否善加利用还要取决于软件。软硬件在这里的关系就如同路与车: 如果把多核平台看成是高速公路的话,软件可以看成是高速公路上的汽车,高速公路只是提供了一个基础,而到底能发挥多大运输能力,还要看汽车能跑多快。

更重要的一点是,如果不针对多核进行软件开发,不仅多核提供的强大计算能力得不到利用,相反还有可能不如单核CPU好用。因为采用多核的CPU其每个内核的主频比主流的单核CPU通常要低一些,如果你的程序只能发挥出一个内核效用的话,自然不如单核CPU好用。

“从某种程度上说,对于软件开发者而言,CPU主频提升就像是免费的午餐,此前所有的程序很自然地会从主频的提升中受益,而如今多核出现了,这种免费的午餐没有了。我们必须针对多核重新进行软件设计。”中科院软件所并行计算实验室副主任张云泉对记者表示。

未来多核芯片将无处不在,针对多核的软件开发将是摆在软件产业界面前一个大的挑战。有专家甚至预言,针对多核和多线程的软件开发将是未来十年软件开发的主要挑战。

不过,多核对于不用应用领域的软件影响并不相同。在清华大学计算机高性能所陈文飧苯淌诳蠢矗蒲Ъ扑恪⒒チ衿骱蚉C机及移动用户所使用的软件有很大的不同,因此,多核给它们带来的挑战也不同。

第一类是传统的科学计算用户,他们的软件大部分是高性能计算专家写的,也多是并行的,他们对MPI、OpenMP等并行编程模型也已经掌握。对这类用户而言,多核提供的是更高性能的执行平台,他们下一步工作是对进行高性能计算的系统软件针对多核优化,但这不是当前最主要的问题。所以对这类用户来说,多核的应用基本不存在太大困难。

第二类是一般意义上提到的服务器用户,如银行以及搜狐、Google这样的互联网公司,它们主要的业务特征是并发的访问。这些应用具有天然的并行性,如多用户的访问本身就是并行的。对于这些服务器、数据库处理而言,多核同样也为他们提供了一个便宜而且高性能的计算平台,面临的挑战也不是很大。

第三类是移动用户和桌面用户,他们是面临挑战最大的群体。这些用户的原有大部分程序都是串行的,如大部分串行程序是用Visual Basic语言编写的,怎样为这类用户提供很好的并发编模型和开发环境,以帮助他们开发有效的并行程序,这是多核应用最重大的挑战。

“尽管软件研究人员在编程模型、编译器、自动转换、调试工具等方面做了很多的工作,效果还是不错的,但总体上看把一个现有软件并行化其代价还是很高的。因此,对第三类用户而言,多核对他们的挑战更大。”陈文光说。

实际上,Intel、AMD以及相关软件商们都已经注意到软件方面的问题。“为了加快多核的普及,Intel与软件开发商、软件开发商、操作系统厂商和独立软件开发商和一些高校制定了合作伙伴计划,同时,加快了在相关工具方面的研发力度,推出了一系列的产品,包括编译器、VTun性能分析器、多线程工具等。另外,Intel在全球还有1万多名软件工程师帮助用户完成相关软件的并行化工作。”Intel亚太研发有限公司软件产品部林巍介绍说。

应用软件提供上也在积极准备。用友软件公司U8研发本部总经理邓适宜说:“ERP软件是一种非常复杂的多任务应用软件,利用多线程技术,在基于多核的服务器端可以极大地提高应用程序的响应速度。”

据他介绍,用友在去年11月就已经发布了基于双核调优的U870这个产品,目前,基于四核调优的产品正在研发。

并行程序设计之难

其实,多核软件的开发所遇到的难题并不新鲜,因为本质上多核软件与多CPU软件没有多大区别,这就是并行程序设计的问题。并行程序设计很早就有人开始研究,而且很多人一直在进行这方面的研究。

为什么并行程序设计那么难呢?这是因为大多数计算机和编程语言发明之初就是按照冯?诺依曼理论进行设计的。根据冯?诺依曼的理论,CPU是按照程序指令,一条条取出来并顺序执行的。而在多核或者多CPU的计算机中,同时会有多条指令在执行。与在单个顺序处理器中通过交替执行不同任务来造成并行的假象不同,针对多核和多CPU平台开发的软件是真正的并行软件,有多个执行内核(或者多CPU)参与计算,为了充分发挥多核(多CPU)的能力,就要尽可能地让各个执行内核(或者多CPU)均衡工作。

目前,程序开发人员开发并行程序的主要方法是串行语言加并行库的扩展,也就是增加一个库来帮助进行消息传递和并行,但其程序开发效率很低,难度也比较大。具体方法有两种,一种是共享存储,一种是消息传递。共享存储大家主要是多线程,其主要程序开发环境就是已经成为事实工业标准的OpenMP,目前主要是商业编译器提供对该语言的支持。消息传递开发环境包括MPI和PVM等,此类开发环境是开源的,可以免费下载。其中最常用MPI最流行的两个实现是MPICH和LAM/MPI。此外,由于现有机器体系结构层次非常复杂,还可以把上面几类并行和向量并行混合使用,充分挖掘机器的性能潜力,通常称之为混合并行。

但无论采取哪种方式,并行程序的设计和开发都是十分困难的,困难在于决定何时和如何交替执行可能交互的程序段。首先,运行于不同处理器上的各项任务之间的通信就是个难题。由于通常要涉及到软件的若干层次,因而会增加复杂性和定时开销;其次,由于并行系统缺少明确的全局系统状态,不像串行程序容易理解;第三,因为并行程序执行时,每一次的执行路径并不完全一样,这会给并行程序设计的纠错和调优等带来很大困难。

“对于多核上的软件,如果没有很好的编译器、没有很好的多线程分析以及多线程编程工具的支持,是没有办法很好地解决这个多核以及多路CPU潜力的充分利用问题的。” Intel的林巍说。

编译器与并行语言

既然程序员开发并行程序非常困难,是否可以借助编译器自动完成串行程序的并行化?换句话说,如果程序员还是按照串行程序设计,由编译器自动进行优化,这无疑会降低程序员的工作难度。然而,这条路目前还没走通,更为实际的目标应该是人机交互的自动并行化。这是因为很多程序原本就是串行的,比如,一个动作必须在另一个动作之后完成,这部分程序实际上是无法进行并行化的。目前,比较容易做的还是一些循环语句和大数据量的处理等数据相关性不大的场合,这时编译器能够在一定程度上帮助程序员完成并行化。如今,一些编译器可以借助程序员写在程序中的简单编译指令生成高质量的并行代码,如数组语句的处理等。在目前的多数共享内存架构的系统上,编译器已经可以进行循环级的并行化。

针对并行程序设计也有人提出开发一种新的并行程序设计语言。目前,国际上对新一代并行程序设计语言的研究日渐升温,其中美国HPCS项目资助开发的新的高生产率并行编程语言最受业界关注。

据张云泉介绍,HPCS语言是美国为了支持从千万亿次机器到单个多核芯片的应用范围所研发的高效能计算系统的配套语言,目前有三种,分别属于三个公司,即IBM的X10、Sun公司的Fortress和Cray公司的Chapel,都属于研究型语言,有很多新的设计思想。其主要设计思路是降低并行程序设计的难度,提高软件生产效率,同时提供高性能、可移植和健壮性的支持。比如,IBM 2003年启动的X10其寓意就是要提高性能10倍,目前已经完成了原型系统的开发,估计还需要较长的时间才能投入商业使用,现在只是在小范围内试用。该语言对多核系统与集群系统提供了统一的支持。

“不过,重新开发一种新的并行语言有一个致命的缺点就是需要全部改写原来的程序,成本和风险也很高,且效率没有保证。但是,随着多核的出现,如果面向大众推广并行计算环境的话,需要有一种新的大众容易接受的程序设计语言,否则很难普及。”中科院软件所的张云泉博士说。

总体来说,并行程序设计还将以OpenMP和MPI为主,其困难还难以在短时间内克服。因此,面对多核程序员必须有一个思想上的准备。

“多核出现以后,程序员必须有一个观念上的改变,不能再像以前一样一段代码完成一个任务就可以了,还要想到怎样把代码进行分解、进行并行处理。”Turbolinux(中国)软件公司CTO熊伟说,“比如,以前一个进程下面只有一个线程,而现在可以有2~3个,这时多个线程之间如何共享内存、如何用好锁,在设计之初都需要仔细考虑。此外,程序员还要知道都有哪些工具可以帮助我们,这也很关键。”

“恰当的辅助工具不仅使程序设计更为简单,而且实际上,在大规模的应用系统中,没有这些工具几乎不可能实现稳定的、高性能的并行计算。”熊伟补充说。

多核推动虚拟化

如果说软件开发人员看待多核的心情有几分复杂的话,虚拟技术的供应商对多核的感情则单纯很多。事实上,虚拟化技术的兴起与多核的普及不无关系。

“虚拟化技术的兴起主要原因有两个:一个是PC服务器的广泛应用,一个是计算能力的迅速提高,这其中多核起到了很重要的作用。” Vmware中国区CTO张振伦谈到公司成立8年来能达到如今的规模时说。

Vmware是一家专门从事虚拟软件技术的供应商,从1998年进入市场,其每个季度的增长都超过1亿美元,2003年被EMC收购后,2006年的增长超过了83%。

张振伦认为,由于多核处理器的诞生,让人们可以以更低的价格获得更高的计算能力,从而使虚拟化技术可以得到更多的硬件资源进行分配。当然,除此以外,虚拟化技术还能带来以下好处:减少服务器的数量,提供一种服务器整合的方法,减少初期硬件采购成本;简化服务器的部署、管理和维护工作,降低管理费用;支持异构操作系统的整合,支持老应用的持续运行。

“虚拟化的目的是要能提高运算能力与提高计算资源的利用率,这一点与进行并行程序设计的目的完全相同。所不同的是,软件设计重点在于单个应用或者单个程序,而虚拟化的重点是计算资源在多个应用之间的分配。”Turbolinux的熊伟说。

作为发挥多核处理器性能的一个有效手段,Intel和AMD都在硬件级提供了对虚拟化的支持。如今,不仅仅是在服务器平台上,即使是在工作站和桌面平台上,硬件辅助虚拟化的价值也将越来越明显。而在服务器领域,虚拟化更是让越来越多的用户受益。

“毋庸置疑,多核的普及是一个必然趋势,不管是普通用户还是程序开发人员,所能做的都是如何善加利用多核给我们提供的计算能力,而最终受益大小则取决于我们的准备程度。”软件所张云泉总结说。