The Way of the great learning involves manifesting virtue, renovating the people, and abiding by the highest good.

2008年12月20日星期六

芝麻开门——发现多核并行计算的宝藏

芝麻开门——发现多核并行计算的宝藏

 

  “我有一位在金融行业的朋友,他在股票和证券领域成绩斐然。有一次我去参观他的工作室,发现他正在运用大量的计算资源对市场上的交易数据进行计算,他告诉我,日常交易大约需要采用400台PC服务器对实时产生的大量数据进行计算。”平素总是面带微笑的王文汉博士给记者讲这个故事时眼神中不无忧虑。“今天看来,计算需求似乎永远也无法完全满足。”

    英特尔副总裁兼亚太研发中心总经理理王文汉博士提出:多核时代下,并行编程是开发人员需要解决的最重要的问题之一。

爆炸增长的计算需求

    正像Herb Sutter先生在2005年发表的《免费的午餐已经结束》一文中指出的那样,原来似乎取之不尽、用之不竭的计算资源,今天已经随着应用复杂度的级数式增长被吃得干干净净。尽管英特尔、AMD、Sun、IBM等众多处理器领域的厂商仍然在不断努力,这些庞大的应用需求仍然无法得到满足。

    过去,我们看到只有在一些对计算量需求量极大的领域会有类似问题,比如大规模、超大规模网络应用、DNA计算、3D模型渲染和展示以及一些其它的科学计算领域对计算资源有极大的需求,然而这些需求的驱动方,已经逐渐转向个人应用。当我们在Google Map上寻找美味可口的午餐时,当我们在银屏上看到憨态可掬的史莱克时,当我们利用GPS寻找旅游最佳线路时,当我们即将迈进可以根据个人DNA配置感冒药方时代时,当我们通过形形色色的B2C、C2C网站购物时,那些花花绿绿的界面背后,往往是由数百、数千乃至数万计算机所组成的计算矩阵。

    然而,生产更多处理器和服务器并不是问题的难点。关键在于,如何将这些具备计算能力的处理器充分利用起来。要让计算资源充分发挥作用,绝不是在一个小小的硅晶体中塞进更多晶体管可以解决问题的。对于图灵机计算模型有清晰认识的程序员明白,我们需要更加2.0的方式来应对人类庞大的应用体系。传统的硬件串行处理既然已经达到了瓶颈,那么,通过软件的方式来解决这一问题成为必然。

    就像我们曾经提到的:多核的并行计算时代来临了!

解决计算需求问题的2.0方法

    尽管我们可以在一个处理器中塞入更多的计算内核来创造更多计算资源,然而如何让这些资源真正被应用程序所利用,却并非易事。它不仅需要处理器在架构上进行提升,而且还需要软件发挥更独特的作用。是的!让软件和硬件并肩携手,才是解决这一问题的最佳方案。

    软件架构师比一般程序员更清楚地了解一个系统的关键所在。其实无论是正交分解、松耦合还是组件化,各种各样的模型和思想在同时表达一个意思:让效率更高的组件去统一解决更加重复性的简单问题。

    毫无疑问,CPU是效率最高的单元,因此我们看到越来越多的复杂功能被集成到CPU当中,网络处理、加密解密等一系列功能正在处理器上出现,更多需要在处理器上执行的功能带来了处理器架构上的变化。如果这还不能充分表达计算机的进步,让我们看看英特尔处理器在功能上完成的一系列变化。

80386:处理器集成缓存功能

80486:处理器指令流水线技术

奔腾:双通道流水线技术

奔腾 Pro:CPU指令乱序执行

奔腾III:单指令流多数据流

奔腾IV:分支预测技术

酷睿2:多核技术

    “同样是一块硅晶体,在1.0时代,我们追求更快的速度(性能),在2.0时代,我们更充分的利用密度完成更多功能。” 提到这些英特尔处理器技术变化的时候,王文汉博士的兴奋之情溢于言表。从这些技术中,我们可以明显地看到,处理器技术本身也在不断为如何提高处理能力而努力,同时亦为了让软件工程师能更好地工作。

    多核处理器带来了强大的计算能力,如果无法实现软件程序的并行,那么我们将面临大量计算资源被闲置。毫无疑问这是一次全新的挑战。面对挑战,一批新的技术纷纷崛起:并行计算语言平台(如Erlang)、并行库(如Open MP)、并发编程(如Java Concurrency)、多核计算工具(Intel C++ Compiler等Intel软件产品)成为计算2.0的基础软件架构。而这些新的技术和处理器共同形成了新计算环境的底层平台,起到了“地基”的作用。

    这一组最接近底层硬件的软件无疑是未来构建软件系统的基础。而他们所关注的重点,是如何充分将程序并行化,让更多的处理器内核充分发挥计算能力。

英特尔的2.0创新思路

    作为对处理器计算直接负责的英特尔,如果仅仅提供硬件平台,对于整个计算环境的搭建不免显得有些不负责任。正因如此,英特尔的软件部门为下一代计算环境搭建做了很多实际工作。大体上,我们可以将英特尔软件产品分成如下几个产品线:

编译器

性能分析器

性能库

线程分析工具

集群工具

    此外,英特尔还针对一些特定领域开发了通用软件产品,包括数学函数库以及SOA组件库等。这些软件产品为开发人员迈进多核创新时代打下了良好基础。一些原来无法实现的事,如今在新计算平台上成为可能。例如新的C++编译器,将对程序代码进行针对多核的优化,以达到更高的性能。

    在这个过程中,中国的技术人员也做出了卓越的贡献。就编译器而言,就是英特尔在中国的创新。2001年初,英特尔中国首席工程师黄波博士牵头的项目组承担了第一个编译器的开发任务。这是英特尔编译器实验室放在英特尔中国软件实验室研发的第一个项目,黄博士至今非常清晰地记得,当时整个团队5名成员全力以赴地工作,最后一刻调通LIBC之后的狂喜,比原计划更好地完成了任务,这一切无疑向英特尔编译器实验室证明了中国年轻工程师的实力,也为踏入2.0时代做好了充分的准备。

    经历了这个过程之后,王文汉博士将英特尔中国软件开发中心的发展历程分成三个阶段,即从代工外包软件开发到自主技术开发,再到现有的产品创新,真正进入了软件开发的2.0时代。

    “多核时代的编程是一种艺术,如果说我们在1.0时代进行软件开发是黑白的,那么在2.0的时代,我们所做的软件开发就是彩色的。”王博士在提到编程艺术的时候如是说。他指出,现有软硬件平台提供的功能,需要程序员在其之上不断创新,如果能在软件开发的过程中找到并行的机会,那么也就意味着你正在走进新的编程时代。

程序员奔赴2.0计算时代

    当然,走进2.0时代是需要代价的,对于个人开发者来说,学习成本确实将会再度大幅提高。传统模式的一些编程思想和模型在多核时代下将面临更替,掌握更多工具和程序库也成为了软件开发更高的门槛。但这也为不断学习、勇于创新的开发人员提供了新的机会。

    尤其是对于系统软件的开发人员来说,除了现有的技能以外,还需要对并行计算的原理有更清晰的认识。如果能将这种认识建立在更高的层次上,将会让个人得到更大的成长。多核所带来的机会就如同上世纪90年代末的Java一样,看清这个趋势,只要领先半步,就可以更好的把握多核时代的脉搏。

    当然,并非每个开发人员都需要了解底层代码的细节,理解并利用类似线程化构建块(Treading Building Blocks,简称TBB)这种能从更高抽象层次理解多核计算的方式,会让程序员更快成长。其实一切软件技术的思想并不复杂,学会使用程序库和构件模块,也许可以帮助你更顺利地迈进新时代。


记者/欧阳

没有评论: