技术开发 频道

多核:新芯片设计带来新挑战

  【IT168 分析评论】多核处理器现在已经走到普通用户的身边,例如英特尔的酷睿2双核处理器已经在个人计算机中非常常见,这让软件开发者们面临着一个新的挑战:为了让自己开发的软件能够具有最大的性能,他们必须根据新处理器设计特点来修改自己的软件。但是,说起来容易做起来难,开发者必须解决并发性问题和潜在的性能问题。根据工具厂商Coverity赞助的一项IDC调查显示,目前已经有71%的企业正在为多核硬件开发多线程应用程序。

  IDC分析师Melinda Ballou建议,开发者需要获得组织范围内的支持,才能适应多核软件开发。只有通过致力于企业级别的更好的实践,以及从项目角度来进行质量管理和变更管理,才能真正适应多核软件开发。

  由于单核芯片在散热和性能扩展上已经无法再被改进,因此多核处理器将变得更加重要。另外,能耗问题也推动了多核芯片的发展。诸如英特尔之类的芯片制造商正在增加它们的CPU的核心。微软并行计算平台的总经理Lynne Hill表示,“在最近20年的计算机科学发展历史中,我们的确已经通过升级频率而大大提高了计算能力,”但是现在,能耗问题成为一个障碍,如果想提高计算机的处理能力,硬件必须做出修改。

  而实际上硬件也正在发生改变,这给开发人员带来了新的压力——必须调整自己的应用软件来更好的使用新硬件的能力。开发者们必须学习新的技术,并且使用新工具来编写具有最大性能的软件。

  因为多核处理器在工作原理上与单核处理器有很大的不同,它需要以并行方式来处理多重指令。这意味着,软件必须拆分它的指令,以使它们能够被并行处理。Coverity公司为多核开发提供工具,其首席技术官Ben Chelf表示,“当你使用多核设备时,你的程序必须充分利用所有这些核心,它必须能够在这些核心上同时运行指令。”另外一家多核开发工具提供商RapidMind的首席执行官Ray DePaul则表示,“软件一直是运行在单核设备上的,现在它将被设计为运行在多核的并行处理方式下,这是开发者所面临的挑战。”

  Azul Systems公司的著名工程师Cliff Click曾针对大型病房程序问题做过技术探讨,他强调了编写多线程程序的难度。“这的确非常难,但不至于难到无法实现的层次,”他如是说到。

  为了帮助开发者应对多核挑战,实现并行编程,诸如英特尔、微软和Sun等公司都纷纷提出了相应的协助方案。

  英特尔的多核软件开发支持

  英特尔开发者产品部门的营销主管James Reinders表示,“毫无疑问,多核软件开发是一个挑战,而且是一个相当大的挑战。”并发性是开发中遇到的一个主要问题,他强调说,“当你编写一个并行程序时,很容易让它陷入不确定性中,而这可能意味着会输出不同的结果,或者是逻辑路径。”多核应用程序开发要求对软件设计进行更复杂的考虑,这是多数软件开发者所做不到的,他表示。“多数情况下,大部分程序员没有多核开发的经验,需要相应的工具和培训,来帮助他们充分利用多核开发。”

  对于那些靠自身能力无法完成从单核编程到多核编程转变的程序员,英特尔提供了一些帮助方案。它推出了Threading Building Blocks模板库,来帮助C++程序员实现并行编程。英特尔的Thread Checker可以帮助程序员发现那些不确定编程错误,而英特尔Thread Profiler可以帮助开发者以可视化的方式检查每一个程序,确定每一个核心正在进行的工作。另外,英特尔还有一个叫做Ct的代码库项目,该项目可以为常见的数据并行程序提供创建模块。

  Reinders表示,同步对于并行编程来说是非常重要的,它可以避免竞太条件的发生。在竞太条件下,并发条件不能被合适的同步,因此它们完成的顺序会影响输出结果。程序死锁也可能发生:并行执行的每一个指令都等待其它指令完成后再执行,因此可能导致哪一个指令也无法完成。

  微软的多核应用程序开发支持

  微软也正在进行并行计算方面的努力。Hill表示,“我们将在我们的主流应用程序开发产品中融入并行编程功能。”举个例子来说,微软的Concurrency Runtime提供一个常规进程层,它可以让应用程序更好的控制分配给它们的资源。这个技术是计划中的Visual Studio 2010平台的一部分,将被包含在该平台的社区技术预览版之中。

  另外,为了支持并行编程,微软还对语言进行了扩展,其中既包括本地代码也包括托管代码。微软将为开发者提供代码库和服务,另外,它已经开发了PLing,为它的Ling集成语言查询技术增加了并行特点。另外,该公司还提供了它的并行语言扩展,它可以使用Concurrency Runtime。

  Sun的多核软件开发支持

  Sun公司也正在考虑使用多核观点来改进它的Java虚拟机。Sun的客户端Java的首席架构师Danny Coward表示,“在JVM中有大量的优化之处可以完成,我们已经实现了其中的一些,而且得到了比想象中更多的收获。”

  据Coward表示,为了让应用程序能够充分利用多核和多处理器的设计,Java应用程序层已经具有一些整合到编程模式中的支持功能。为了解决并行问题,Sun采用了一种双交叉方式:并行虚拟机,支持具有同步模式的应用软件。在应用程序执行大量连续性工作时,这种同步模式是非常有用的,诸如大规模数据处理应用程序。

  Sun在2004年推出的Java SE,包括一个并发框架,该框架的一个特点就是,具有API让开发者处理大量数据。另外,这个框架还可以让开发者将一个任务分解成很多小的任务,并让它们并行的在不同线程上被执行。

  Sun的JDK 7是Java SE 7的一个实现,通过它,Sun正在考虑在内存管理方面采取一种新类型的垃圾收集机制,该机制的并发性和平行性将更加突出。据Cowards表示,目前的Java垃圾收集器不能在多核上实现最优化性能。JDK 7预计将在明年年底推出,另外,在JDK 7中计划增加的还包括并发APIs,诸如fork/join框架。

  多核应用开发工具日渐增多

  IDC的Ballou表示,通过使用IDE和一些自动化质量保证,现在企业开发者已经可以适应多核或多线性应用程序的开发。她表示,企业开发者正在使用不断推出的新版开发工具来获得更多的对多核开发的支持,与此同时他们也积累了多核编程方面的经验。

  Azul公司的Click就职于Sun公司时,曾参与了JVM的开发,据他表示,现在也有一些语言正尝试解决多核问题。其中之一是Clojure,该语言可以实现多线程JVM编程。这个领域的另一门语言是Scala,它可以与Java搭配使用。Click推荐使用Java和JDK并发效用和代码库,同时可以参考阅读一些非常好的实践方面的书籍,例如Brian Goetz的《Java Concurrency in Practice》。

0
相关文章