服务器 频道

专家:多核时代对软件设计的挑战

多核处理器对软件设计的挑战

    随着处理器体系结构变得越来越复杂,从语言到机器硬件的鸿沟越来越大了,需要程序设计语言对底层体系结构进行高度抽象,使用户的程序设计变得简单高效,同时又不损失过多性能。编译器就需要做很多工作来弥补这个鸿沟。

    很多人也注意到了,现在很多厂家提供的多核处理器,主频是比较低的,主要目的是为了降低散热和功耗。如果买了多核处理器的用户不去用好这几个核,让它们同时合作去完成一个任务,而只用一个核工作的话,摩尔定律就不起作用了。

    对很多多媒体应用,或大量相互之间不相关的Web访问的应用来说,它们之间是没有依赖关系的,用户不必改写程序,就可以自然的通过操作系统的多核调度获得性能提升。但对于计算强度很大的程序来说,里面有大量数据要串行处理,且存在复杂的数据相关性,如果不进行数据分割的话,只能由一个低频的单核来串行处理,执行时间会很长。既使很多应用可以同时运行,多核还会带来一个运行资源冲突的问题,多核同时运行期间很多资源其实是共享的,比如高速缓存、存储体、BUS等,这就需要改进操作系统和用户调度,来加以缓解。

    但多核的一个缺点是存在严重的存储墙(Memory Wall)问题。实际上处理器的管脚是有限,数量增加速度落后于处理器速度的增长,且不可能无限制增加,由此意味着存储访问的带宽增长也有限制。将来数量众多的处理器核,都挤在处理器里面,没办法拿到自己所需要的数据,严重影响性能。

    此外,多层次的缓存,以及核之间共享缓存的方式,再加上访问本地缓存和远程缓存的时间不一致,都给程序设计和性能优化带来困难。当然,多核并非一无是处,它也有优点,这就是核之间的通讯延迟会有量级的减少,核之间的带宽也有量级的增加。怎样利用这些优势来优化并行程序设计,是需要研究的问题。

    多核作为一种新的并行层次原来是没有的,现在出来了,应该怎么应对呢?最简单的就是从硬件底层对多核加以隐藏,让用户感觉不到,这当然是最理想的。用户的指令运行时,硬件底层进行相关性分析,并在多核间进行调度。但这种方法的可扩展性很成问题,适用性是不是很广也成问题,且增加了处理器设计的复杂性,很容易成为性能瓶颈和提高生产成本。对小规模问题和少量的核来说也许可以用,但问题规模更大或核数量更多之后,就不可行了。另外一个很自然想到的办法,就是把高端计算里面并行程序设计的语言和环境如MPI[4]和OpenMP[5]等一起来用。再根据多核的特点,充分利用新的体系结构优势,加以性能优化。这是最自然而然且可行的应对措施。

    实际上并行不是目标,我们并不愿意去并行,而是一种无奈的妥协,是为了继续使性能增长的摩尔定律有效。有些国外专家说过,为一个1 PHz(千万亿赫兹)的处理器编写程序会比为一百万个1GHz的处理器更容易。并行程序设计不但困难而且容易出错。

    我们什么时候能不需要并行呢?当然最好是继续增加处理器的主频,我们看到IBM公司的Power6处理器就突破了4GHz的主频限制,在2007年发布时,其主频最高将达到5GHz,并支持十进制运算(实际上,当计算机将十进制转换成二进制进行计算,然后再将计算结果转换成十进制时,就会出现计算精度问题;但目前十进制计算的速度仍然不及二进制[16]),为继续通过提高主频提升性能打开了突破口[15];还有一个途径就是出现革命性的新的计算技术如量子计算等。

    实际上,当前并行计算的现状是部分程序员可以进行并行编程,且大部分程序是MPI程序,OpenMP有一定比例。服务器程序大部分采用多线程。但大部分普通应用都还是串行的。

0
相关文章