处理器多核时代:软件研发人员的新挑战

服务器在线11月7日报道 面对多核处理器的横空出世–比如目前已经普遍用于台式机的英特尔酷睿2双核处理器,软件研发人员必须学会应对新的难题,就是让软件适应多核处理器下的处理进程,来确保实现软件的最大性能。但是说起来容易做起来难,研发人员要解决软件同步和潜在的性能瓶颈难题。根据IDC咨询公司最近的调研结果显示,有71%的企业目前都在为多核处理器硬件研发多线程应用软件。

IDC的分析师梅琳达.鲍罗建议说,研发人员必须做出调整来顺应多核软件的发展趋势。"研发人员必须更好的进行企业实践,从项目的角度来部署研发过程中的质量管理和变动管理"。

由于单核芯片的散热和性能都已经达到设计的上限,因此多核处理器逐渐成为芯片制造的趋势。能耗的因素也推动了多核芯片的发展。诸如英特尔公司这样的芯片制造商都在增加中央处理器的核心数量。微软公司并行计算平台部门的总经理林恩.希尔表示"在计算行业发展的过去20年间,我们通过提升频率让计算能力从真正意义上获得了飞跃"。但是现在,能耗的难题像一面墙壁挡在了前方,如果用户希望台式机的处理能力继续提高,那么硬件设备必须做出改变。

事实上硬件产品正在发生着改变,软件研发人员面对这种压力也必须调整他们的应用软件来顺应硬件的改进。研发人员必须学习新的技术和研发新的工具来保证软件性能的最大化。

由于多核处理器的工作原理与单核处理器是不同的,多核处理器是采用并行方式来处理多重指令的。这就意味着软件也必须分离这些指令让他们并行处理。为多核研发提供应用工具的Coverity公司的首席技术官Ben Chelf表示"当你使用多核时,你的程序必须能利用所有这些核心,必须能同步运行这些核心上的指令"。多核工具的另外一家供应商RapidMind的首席执行官雷.迪保罗认为"由此带来的挑战就是软件不是根据多核的并行处理原理来设计的。它只能在单核上运行"。

Azul Systems公司著名的工程师克里夫.克里克对这种大型同步并行程序做出了技术分析,他强调了编译这种多线程程序的难度。他表示"这确实非常有难度,但并不是不可能"。

诸如英特尔,微软和SUN微系统公司这样的企业都在为多核挑战和并行程序提供协助。

英特尔的多核软件研发协助行动

英特尔公司产品研发部门的市场总监James Reinders表示"多核软件的研发绝对是个挑战,而且是个很大的挑战"。他强调说,同步是研发中遇到的主要问题"当你编写一个并行程序时,程序很容易陷入不确定的状况,这意味着会出现不同的结果,或者是逻辑路径,这都有可能"。多核应用软件的研发需要更为复杂和深思熟虑的软件设计流程,多数研发人员是不具备这种能力的。Reinders还认为"基本上,多数程序员都没有这方面的设计经验,他们需要设计工具和相关培训等来帮助他们来利用多核"。

英特尔公司正在协助那些缺乏相关设计经验的程序员。公司推出了Threading Building Blocks模板库来帮助使用C++语言的程序员来编写并行程序。英特尔的Thread Checker能帮助程序员找出不符合要求的程序错误,英特尔的Thread Profiler能帮助程序具体化来检查每个核心正在进行的工作。英特尔还有一款名为Ct的代码库计划,可用于C语言,为常规数据并行程序提供创建模块。

Reinders强调说,指令同步对于避免并行程序的紊乱情况是很重要的。如果出现指令紊乱就无法正常实现同步,因此完成的顺序会直接影响到编程的结果。程序死锁也可能发生:比如每个同步执行的指令都要等待别的指令去完成,那么这个循环就无休止了。

微软的多核软件研发协助行动

微软公司也在致力于并行计算的努力。希尔表示"我们正在将并行集成到我们的主流应用软件产品当中"。举例来说,微软的Concurrency Runtime能提供常规进程层,可以让应用软件更好的控制分配给他们的资源。这项技术将是计划内的Visual Studio 2010平台的组成部分,会包含在平台的Community Technology Preview预览版中。

还有对编程语言的支持,对于并行即可以使用本地语言也可以使用管理代码。微软将为研发人员寻找合适的代码库和服务。除此之外,微软还开发了PLinq和集成了查询技术,新增了PLinq语言来开发并行软件。公司还推出了能用于Concurrency Runtime的并行语言扩展。

SUN的多核软件研发协助行动

SUN微系统公司也在考虑多核技术来改进Java虚拟机。SUN的客户端Java首席架构师丹尼.考沃德表示"这是对全部Java虚拟机的优化,我们已经这么做了,我们会从中得到更多回报"。

为了应用软件能充分利用多核和多重处理器,Java应用软件层能支持程序模式的功能。为了实现并行处理,SUN采取了两个步骤:对虚拟机实行并行,支持采用同步模式的应用软件。这种同步模式在应用软件执行大规模连续性工作负载时很有用处,比如大型数据处理应用软件就适用于同步模式。

SUN公司2004年推出的Java平台标准版包括了同步框架,这个框架下的应用编程接口能允许研发人员处理大容量数据。考沃德还强调说,这个框架还能允许研发人员将一项任务分解成若干更小型的任务来便于在不同的并行线程上执行。

SUN公司执行Java SE 7的Java Developer Kit 7正在规划当中,SUN公司正在考虑一种用于内存管理的新型碎片帐集,这样能更易于实现并行和同步。考沃德表示,目前的Java碎片帐集收集器在多核上不能达到最优。这个套装计划在2009年底推出,计划中的JDK 7也是诸如fork/join模式这样的同步应用编程接口。

多核应用软件研发工具逐渐增多

IDC的鲍罗介绍说,如今企业的研发人员通过使用IDE和一些自动化质量保证,逐渐适应了多核或者多线程应用软件的发展。他们使用不断推出的应用软件研发工具来获得多核支持,同时也增长了编程经验。

Azul的克里克在SUN工作时曾经参与过Java虚拟机的研发,他表示目前有一些尝试解决多核问题的编程语言。一种叫做Clojure的语言能帮助研发人员来进行多线程Java虚拟机编程。还有种编程语言叫做Scala,能和Java兼容使用。克里克推荐程序员使用Java和JDK同步效用和代码库,在实践中可以参阅Brian Goetz的Java Concurrency一书来获得指导。