[Csdn.net专稿]早在几年前,Herb sutter就发表​​《免费午餐已经结束,软件历史性的向并发靠拢》​​,引起了业内很大的反应。这几年来Erlang这种老古董也因为多核的发展而逐渐热起来,网上关于普通程序员是否需要掌握多核编程技术也有很多争论,不论大家观点是否正确,至少多核相关技术引起了开发人员的注意。而最近3月25日在北京举行的​​2011年英特尔软件大会​​也再次聚焦并行和应用优化,并获得了众多业内并行编程的行业专家、开发经理和高手的关注。

并行编程渐受关注

接受采访在谈到传统编程模式面临的挑战时,英特尔软件开发产品部全球销售与业务开发总监​​Phil De La Zerda(佘飞)​​认为,“如今的企业级应用从整个IT环境和架构来看都到了需要做一些改变的时候,过去靠提高主频来提高运算性能的方式已经受到了(难以逾越)的问题,从物理学的角度来看,散热(发热量太大且难以驱散)、功耗(太高)、尺寸以及泄露问题,主频速度的提升已经越来越困难。”

从他的观察来看,在5年前做并行计算往往还是一些很高端的客户,主要集中在高性能计算领域,例如天气预报、能源地质勘探、科研计算包括金融公司开发金融衍生品的时候做的投资分析,“当时主要是看到这些客户在做并行计算。但这几年来越来越多的大众主流应用,比如做图像处理、网络游戏也开始采用并行编程等。总体来看,每个软件行业的应用领域里,前十位的应用开发商都在做并行计算。此外,比较明显的就是很多做网络游戏的开发商在使用并行计算方法后,在用户体验、性能提升或者计算资源的提升上都有了更好的反馈。”

在谈到近年来在全球各推广多核编程中最令人兴奋的事情时,佘飞告诉CSDN记者:

越来越多的开发者把英特尔并行开发工具当做标准的开发平台,并在企业内部做推广。而且,业界(当然英特尔也是积极推动者之一)也举办了很多针对软件开发人员的大会或技术研讨会,无论在中国、日本还是印度等等国家,来参加这些技术研讨会的听众大多都是年轻的受众,这些技术人员非常乐意去学习新的并行软件开发技术。从整个产业来看,毫无疑问,跟多的人开始关注并实践起来了。

在如何利用业界提供的并行编程工具方面,佘飞认为首先开发人员要形成一套系统的方法论,包括接受适当的培训。另一方面,要借助于适合的软件工具去入手并行编程,他认为,如果传统的开发者凭着经验和现有知识自己动手来做的话,往往花的功夫会比较大,可能走的路也不定是对的。但是如果通过这些并行开发工具,则能提供一整套的环境来提供恰当的帮助,无论是做编码、测试还是做性能调优的过程中。

      英特尔公司软件开发产品部全球销售与业务开发总监 Phil De La Zerda(佘飞)

佘飞提到,去年英特尔发布了​​Parallel Studio XE2011​​,新增加了一个英特尔Parallel Advisor组件,能帮助很多没有丰富开发经验的人给他们做一些建议,比如如何在软件程序里哪个部分适合加入并行,如何去加。另外一方面可以帮助开发者做一些引入并行算法后具体性能参数对比预测,这些都可以帮助开发者避免一些弯路。

而根据在之前一份面向业界45名各公司程序员/开发经理、战略师关于“什么是实施并行编程的最大障碍”的挑战中:

与会者给出的5大挑战分别是遗留代码(legacy code)、教育(education)、工具(tools)、对众核趋势的恐惧(fear of many cores)以及可维护性(maintainability)。

对此,佘飞着重谈到了传统代码如何实行并行化面临的挑战,他认为最大的挑战来自于架构(传统拓扑架构的变化给软件开发人员带来了颠覆性的挑战),过去基于文本的顺序编程模式已经不再适用,在并行化的过程中确实需要花相当的功夫去改写原来的代码,但从另一个角度来看,业界也通过工具提供了一些简便的方法。重要的是,并不是所有原有的代码全部都要重写,例如,英特尔会首先帮助用户分析哪些代码是需要做改写的,哪些需要做并行。此外,英特尔也提供了其他的方法,可以利用第三方英特尔的库,或者C/C++语言来编写。此外,在算法咨询和工具的免费试用、技术交流大会、支持社区交流上业界也都提供了多种方式。

当然,就并行编译工具的需求上,有业界观点认为:

从成本上来讲,如果能通过一些优秀的编译器(例如Intel的ICC)自动并行化一些遗留代码无疑是最省钱的,但是这种方法最大的缺陷就在于像Intel ICC这种自动型编译器能自动并行化的代码非常少,从而导致它能提供的性能优化非常有限,而且就算是真正能获得speedup的代码也有很多约束条件(例如loop的循环之间没有dependence,并且该loop应该是一个程序热点)。所以目前的现状就是大量的遗留代码并不能有效的被并行化,从商业的角度上来讲,如果能有一种解决方案能在短时间内快速可靠的通过实施并行化让遗留代码在多核平台上获得10%~30%的性能提升,那么它就已经能为公司节省大量成本了。


其实,就开发者如何入手并行编程方面,CSDN此前就对SD2.0大会多核编程专家周伟明进行了采访,周伟明表示:

对于普通程序员来说,掌握多核编程技术并不是一件难事,只要有多线程编程基础的程序员都可以掌握。当然,就像C++标准模板库STL一样,掌握其基本原理和使用它对每个程序员都不是难事,但是要自己去实现它并不是每个程序员能做到的。多核编程技术也一样,普通程序员掌握其基本原理和使用它不是难事。

并行编程会成为主流趋势吗?

  佘飞认为,未来并行编程会走向“神坛”,并成为开发人员职业生涯的核心竞争力之一,就像多年前的(Java)一样。当时,只要你拥有Java编程技能很快就能得到一份具有竞争力的工作。他认为未来并行编程人员会出现像Java一样类似的情形。

  事实上,在之前记者对Erlang之父的采访中,他也认为并行计算将成为绝对主流,而不仅仅是一个阶段并且很快对并行编程感兴趣的人将(又一次)变成高性能社区的一员。这个观点在2011年英特尔软件大会上CSDN记者与英特尔首席工程师Peng Tu的谈话中获得了赞同,但他认为并行编程目前存在的问题是在标准语言和打造(统一的)开发平台方面仍面临挑战。

  从另一个角度来看,并行编程给业界和开发者带来了许许多多新的技术难题,现阶段想要高效利用这些多核平台以获得更好的性能,就必须对计算机的硬件有较深入的理解,而广大程序员却更喜欢能有一些更加便利的编程模型(也许是一门新语言Erlang?也许是新的编程模型)来简单高效地进行并行编程。有人就认为,这也许是新的软件危机的开端,前路满是荆棘。但是,程序员从来都是迎难而上的,只要有问题,就会有机会。

并行时代,开发者该如何应对新的挑战呢?(付江)