>
首页 » 业界动态 » 微处理器向多核技术发展

微处理器向多核技术发展

作者:《日经电子》记者 进藤智则 竹居智久 本刊编译自《日经电子》  时间:2005-07-19 14:02  来源:本站原创

微处理器面临危机提高性能依靠多核结构

微处理器技术将会发生重大转变。几年后,一个芯片上含有多个CPU核的多核结构可能成为普遍使用的微处理器体系结构(见图1)。
到目前为止,多核微处理器只面向部分服务器和网络设备开发过产品,并没有广泛应用的迹象。服务器领域以IBM公司2001年2月开发了集成2个CPU核的Power4为开端,2003年10月Sun 微系统公司也开发了集成2个CPU核的UltraSPARCⅣ,多核结构逐渐成为提高性能的重要方式。Intel公司2004年5月做出的策略性决定,是表示这种状况即将发生重大变化的象征。
该公司调整了研发方针,对于核心产品86系列微处理器,中止所有单核产品的开发,转向集中开发多核产品。几乎与此同时,AMD公司也表明,已停止集成单CPU核的86系列微处理器的设计。相信几年后市场销售的大多数PC机将采用多核微处理器。
多核微处理器也开始渗透到嵌入式计算机领域。索尼计算机娱乐公司于2004年底销售的便携游戏机PSP,集成了2个MIPS结构CPU核的微处理器。此外,NEC电子公司正在开发的手机芯片,采用了与ARM公司共同研制的多核微处理器MPCore,计划于2005年实现商品化。

多核转变的影响
向多核结构的转变,将给设备开发带来迄今微处理器任何一次进步都无法相比的巨大影响。为了将多核微处理器的性能充分发挥出来,硬件开发非常重要,而软件设计人员的全面协作更是必不可少。以微处理器体系结构的变化为契机,几年后可能电子设备的开发体制都将发生变革。
微处理器由于体系结构的多次发展和制造技术的微细化,工作频率获得了提高,因而产品性能得以不断改善。
但是,以前微处理器的体系结构改变几乎都没有对软件结构造成影响。例如,市场推出同时执行多个命令的超标量型微处理器,以及给微处理器追加新命令时,使用相应的自动编码器再次进行程序编译,不必修改软件就使性能得到了提高。
然而这次情况大为不同。因为,在多核微处理器中,各CPU核平衡地并行执行命令,软件设计人员如果不将程序分为任务级和线程级进行编写,就不能充分发挥运算性能。
除了多处理器结构服务器等部分例外情况,在大多数软件开发现场,具有并行处理的程序设计方法面临着很大挑战。与单核微处理器软件相比,多核微处理器软件的程序结构与调试都变得极为复杂。日本生产多核微处理器的半导体厂家与软件开发企业保持着协作关系。微处理器厂家正是因为十分了解这种并行化程序设计工作的复杂程度和难度,所以过去一直没有选择多核结构。“多核结构是提高性能的最后王牌。”已开发出嵌入式设备多核微处理器样品的瑞萨公司系统核技术统括部部长清水彻说。
转向开发多核微处理器,软件设计人员将面对更重的任务。为了提高微处理器的性能,众多微处理器厂家仍然开始推进多核化的发展(见图2)。
除服务器和PC机外,嵌入式设备在产品出货后也开始添加软件。“微处理器上将执行什么软件,大多在产品开发阶段无法全部确定,因为很多软件是在产品出货后提供的。因此,微处理器的运算性能应确保足够高。现在需要与过去的嵌入式设备完全不同的设计思想。”NEC电子公司第四系统事业总部移动IC事业部新井智久表示。
功能的不断增加,使软件变得越来越复杂。为了使软件设计抽象化,降低其复杂度,微处理器的处理性能必须留有余地。
嵌入式设备中使用的操作系统正由过去的实时操作系统转变为像Linux这样的大规模操作系统,以进一步提高软件的开发效率。频繁使用的固定专用功能,并不是每次开发新机型都作为软件程序库和应用软件进行安装,而是作为操作系统上构建的平台加以嵌入。
甚至连高速处理多媒体数据的专用电路,为了在性能方面保持平衡,也要求必须提高微处理器性能。这种专用电路,同时驱动的运算器数越多,获得的性能越高。随着半导体制造技术的进步,只要可用的芯片面积增加,今后性能将迅速提高。当电路承载的功能较多时,能有效利用芯片面积的动态可重组技术可实现与专用电路同样的性能。为了有效利用这些高性能专用电路,执行操作系统和设备驱动软件的微处理器需要更高的运算性能。

单核微处理器接近极限
为了满足需求,使微处理器性能持续提高,微处理器厂家已达成了推进多核化的共识。单核微处理器已接近极限,最有力的证据是功耗不断增大。无论芯片是否正在工作,漏电流增大的趋势越来越显著,因而无法再像以前那样提高微处理器的工作频率(见图3)。
用于PC机的微处理器中,构成1级流水线的门数已接近削减的极限。在超级流水线体系结构方面,提高工作频率已不再有效。美国德克萨斯州立大学奥斯汀分校的Doug Burger教授指出,Intel公司的微处理器中,构成最短流水线级的门数为9个(扇出为4时)。
例如,采用90nm工艺的PC微处理器,漏电流的功耗约占100W总功耗的一半。便携设备待机时的栅漏电流也明显增加。如果继续提高单核微处理器的工作频率,将导致温度超过封装的耐热极限,设备的电池驱动时间也会明显缩短。
在无法提高工作频率的情况下,也可以增加每个周期执行的命令数,使性能提高。但是对于单核微处理器,这种方法也已接近了极限。因为一个命令流无法包含大量可同时执行的命令。实际上,超标量微处理器在多数情况下,可同时执行的命令最多也仅为4个。用于嵌入式设备的超标量微处理器有NEC电子公司的MIPS系列微处理器VR5500,以及瑞萨公司的应用处理器SH-Mobile3等产品。
单核的极限也表现在开发成本方面。例如,ARM公司关于CPU核的开发成本,1997年的ARM940T为240人月,而最新的ARM1136J-S是936人月,几年之间增长为过去的4倍左右。这表明,靠改变CPU核体系结构提高性能,需要高昂的成本。

期待多核微处理器
单核面临的种种问题,可以通过采用多核结构予以减轻。如果根据制造工艺的发展增加CPU核的数量,微处理器有可能保持固有的性能提高速度(见图4)。迄今,微处理器一直以每年1.5~2倍的速度提高性能,然而由于漏电流等原因,近几年性能提高的速度降低到1.2倍左右。这种性能提高速度变慢的现状可通过增加CPU核的数量进行改变。假设几个任务分别由各CPU核独立执行,那么每个CPU核应具备的运算性能,大约只需要CPU核个数的几分之一。例如,早稻田大学研究多核微处理器自动并行化程序编译器的笠原博德教授指出,MPEG的编码处理,如用4个CPU核进行处理,运算性能大约可比相同工作频率的单核提高4倍。瑞典皇家KTH技术研究院进行手机基准检测的结果表明,使用4个200MHz的CPU核进行处理时,所需时间与800MHz的单核相同(见图5)。KTH与从2004年5月开始提供多核微处理器的ARM公司有协作关系,共同开发了用于循环处理并行化的程序编译器等。
能够大幅度降低CPU核的工作频率,对于功率效率也有利,可以用较低的电源电压实现与单核相同的运算性能。实际上,KTH的实验还得出一个数据,4个CPU核的功率效率比单核高3倍左右(见图5)。采用多核结构,整体功耗与CPU核的个数成正比。但是如果使用单核实现相同的运算性能,则必须提高工作频率和电源电压。由于功耗与电源电压的平方及工作频率成正比,所以单核的功耗应该比多核高。另外多核结构还有一个优点,由于不必使用高速晶体管,因而可以增厚CMOS的栅绝缘膜,芯片待机时的栅漏电流可得到大幅度降低。

应用推动普及
并行处理的应用逐渐增多,也是促进多核微处理器普及的推动力。一个设备同时执行的任务和线程数越多,用多个CPU核并行处理就更为合适。
以多媒体数据的处理为例。因为像素之间的运算较少存在依赖关系,所以大多采用并行处理。这种处理在通常情况下采用专用电路和可配置处理器执行(见图6)。但专用电路还有待完善。假如将编码处理程序分为多个线程,用多核微处理器进行处理,不必提高工作频率即可实现所需的功能。另外,在通过网络获取流数据的同时,进行解码处理,这种同时处理多个任务的应用方式,正是多核微处理器的优势。

可集成于10%的面积上
多核微处理器与采用相同工艺制造的单核微处理器相比,CPU占芯片面积的比例将会增加。这对强调降低成本的嵌入式设备中的微处理器可能造成瓶颈问题。然而,随着制造工艺的发展,这个问题正在逐渐解决。
一般来说,含有CPU核的SoC所需成本大约是500日元左右(100日元约合8人民币)。因此,多数这种芯片的面积并未随着工艺的发展而缩小,而是保持在7mm2左右。
例如,ARM公司CPU核所占面积的比例,在包含一级缓存时,一直都是10%左右(见图7)。这表明,在SoC上,除专用电路和DSP外,CPU核占有的面积保持这个比例比较合适。若使用多核结构,并保持所占面积约10%来设计SoC,在与目前单核产品成本相同的条件下,采用90nm工艺可集成2个CPU核,65nm工艺可集成3-4个CPU核。对用于嵌入式设备、芯片面积较小的RISC型CPU核,如ARM公司的CPU核系列和瑞萨公司的M32R,现在之所以能够向多核化发展,是因为采用了90nm工艺,在不占用其它电路面积的前提下,可以加入多个CPU核。
不仅是制造成本的降低,对于开发成本的降低,多核结构也是恰当的选择。与其花费巨额成本改造CPU核的体系结构,不如像“复制”那样,同时使用多个相同的CPU核,以很低的开发成本获得较高的运算性能(见图8)。

软件的内部划分很重要
开发多核微处理器用的软件,可以利用硬件设计师在专用电路设计中积累的专业经验(见图9)。目前,用多个CPU核进行并行处理,一直是专用电路设计人员从事的工作。
过去,系统开发中功能的软/硬件设计,是由对两个领域都精通的工程师凭经验决定的。今后多核设备的软件设计也会出现类似情况。由于需要在多核中加入许多软件,届时,软件的内部划分及分配给各CPU核的工作,是必不可少的环节,因而确定软件结构的设计人员更为重要。即使是完全相同的硬件结构,也会由于软件并行化的程度不同,给性能造成很大差别。如果在这个环节能充分利用硬件设计师的经验,对于提高多核微处理器软件的开发效率会有很大帮助。
开发多核微处理器的应用软件时,必须实现各任务独立工作,以及把一个任务分给多线程处理(见图10)。对于单核设备使用的软件,目前没有要求设计人员必须进行并行处理设计。
软件工程师利用开发速度很快的Linux系统,花了8年时间才开发出了满足多重处理要求的软件(见图11)。

改革软件开发方法Linux是有效解决方式

设计出能充分发挥多CPU核性能的软件,对于使用多核微处理器的设备是决定产品性能的关键因素。在并行化方面居领先水平的服务器基准检测结果表明,使用8个微处理器工作时,处理速度大约是使用1个微处理器时的7倍。以上是根据“171.swim”的执行时间得出的数值。“171.swim”是基准测试SPEC CPU2000用于浮点运算的构件群CFP2000中的一个。使用IBM公司的服务器RS6000,对用1个微处理器处理和用8个微处理器并行处理的情况进行了比较。并行化的实现使用了早稻田大学笠原博德教授研究组开发的并行化自动编译器。在提高设备性能方面,软件工程师的作用很大。
多核微处理器的软件设计师,首先必须研究可实现SMP(symmetrical multiprocessing:对称多处理)的操作系统(见图12)。其次要努力推进软件的优化,使之可以最大限度地实现并行处理。
向多核微处理器的转移,也是改革现行软件开发的一个契机。例如,在单核工作时并不明显的多任务程序的错误,在多核并行工作时需要特别加以注意。
“嵌入式软件有些情况下规定禁止中断,以避免存储器资源发生争用;而且赋予任务优先级,以控制执行顺序。”名古屋大学信息科学研究系信息系统学高田广章教授说。单核微处理器执行多任务时,即使任务之间共享的变量没有进行互斥控制,也不会出问题。但是,使用多核微处理器时,如果没有互斥控制,操作就会出现错误(见图13)。为了避免这种情况,最根本的办法是,设计软件时应尽可能地确保各CPU核能够独立地进行处理。同时还需要改变查错排错的方式。

实现SMP的
操作系统成为主流
为了发挥多核微处理器的性能,设备厂家大多改变了操作系统。例如,一直在许多设备中使用的mITRON标准的操作系统,不能继续在采用多核微处理器的设备中使用,确切地说,只能使用多个CPU核中的一个进行处理。也可以采取新的方式,即分割存储器区域,用多个CPU核分别执行mITRON标准的操作系统。
因此,软件设计人员可以选择在多CPU核中并行执行线程功能的可实现SMP的操作系统,或者选择同时使用几个操作系统的混合结构。其中,可实现SMP的操作系统似乎是比较主流的选择。已开始在部分嵌入式设备中使用的Linux SMP版操作系统,逐渐受到青睐。
目前,可实现SMP的操作系统中,能够选用的比较少(见图14)。一种是由于在多核结构服务器中使用而实现了SMP的Linux 操作系统,另一种是对并行处理要求极高的通信领域嵌入式设备的操作系统。mITRON标准的各种操作系统,以及美国风河公司的VxWorks和微软公司的WindowsCE等产品没有实现SMP。推进嵌入式操作系统向多处理器环境下不使用共享存储器的分散执行发展工作取得了一定进展。已实现分散执行的操作系统有风河公司的VxMP和瑞典Enea 嵌入式技术公司的OSE。mITRON标准的开放源代码操作系统“TOPPERS/JSP”正由名古屋大学研究生院信息科学研究专业嵌入式实时系统研究室的本田晋也进行分散执行的实现。
实现SMP的操作系统要求的主要功能有:CPU核之间的互斥控制;CPU核之间的中断;以多个CPU核为前提的线程及处理的排序等。线程是多线程环境中最小的执行单位,1个以上线程工作的环境称为处理。处理拥有相互独立的地址空间,处理内的线程共享地址空间。例如在Windows上,1个执行文件(.exe文件)是处理。
互斥控制是为了防止多个CPU核之间的共享变量和核心程序的临界区互相竞争。CPU核之间的中断是指某个CPU核向其它CPU核非同步地提出要求。具有这种功能,CPU核之间就可实现信息的传递。排序是指,将处于可执行状态的线程和处理安排给某个CPU核进行处理。此外,还需要一种SMP独特的启动处理功能,即用一个CPU核执行了系统的初始化后,其它CPU核可以顺序启动。

采用混合结构过渡
多核环境下可以选用的较好的操作系统有Linux和PC用的操作系统等。但是目前,嵌入式设备用的操作系统存在着中断响应延迟时间最差值较大的问题。例如,Linux响应时间的最差值长达100ms左右,无法用于对实时性要求较高的应用。
因此,使用多核微处理器,同时又希望在短期内实现较高的实时性,最好选择混合结构。例如,瑞萨公司含有两个M32R CPU核的多核微处理器,采用的就是混合结构,一个CPU核运行mITRON标准的实时操作系统,另一个CPU核运行基于Linux的操作系统(见图15)。
瑞萨公司开发的多核微处理器中也采用了Linux核心程序的SMP版。含有该处理器的开发版,在打开多个窗口的情况下进行了再现MPEG-2视频流的测试,已证明使用2个CPU核比只用1个CPU核具有拖尾现象明显减少的效果。用一个CPU核运行实时操作系统,执行启动处理和中断处理,负责执行必须实时处理的任务。运行实时操作系统的CPU核发出CPU核之间的中断,Linux执行的处理就会通知另一个CPU核。单核微处理器上采用混合结构操作系统的设备已经存在。例如,日本DENSO公司和东芝公司共同开发的汽车导航电子设备等。多核微处理器通过采用混合结构操作系统,可以并行执行分配给各CPU核的处理。
采用混合结构时,CPU核使用的存储器区域需要完全分开。“使用未实现SMP的操作系统时,必须以CPU核不改写操作系统的数据和状态等管理信息为前提进行设计。”瑞萨公司系统解决方案统括本部系统核技术统括部CPU核开发部SoC控制器开发组经理近藤弘郁说。
所以,采用多核版M32R的样机,只有存储控制器和中断控制器是两个操作系统共用,而SDRAM及快闪EEPROM已按存储器地址分开。由于采用这种结构对接入接出的设备进行互斥控制比较困难,因此采取了相应的解决方案,即并联方式输入输出接口只由实时操作系统使用,而以太网接口只由Linux使用。按照日本嵌入式Linux联合体(Emblix)制定的关于Linux与RTOS混合结构的标准(第1版),操作系统间的通信采用了FIFO和共享存储器块两种方式。这样,中断响应时间的最差值达到12ms,平均值为3ms,从而实现了较高的实时性。但有时还会出现因使用状态只能驱动一个CPU核的问题。

中断响应性能
正在提高的Linux
为了只用Linux就能充分发挥多核微处理器的性能,业界出现了提高多核环境下Linux核心程序响应性能的趋势。Monta Vista 软件公司和美国Time-Sys 公司在产品中使用了保护核心代码内临界区的新程序,目的是避免低优先级的任务先于高优先级的任务被执行。这样,Linux 操作系统有可能迅速应用于含有多核微处理器的设备。
Linux核在2.4版本中的响应时间最差值和平均值共约100ms,在2.6版本中,响应时间的平均值缩短为约10ms。2.6版的执行系统调用过程中,当中断处理程序有排序要求时,将立即执行处理的排序(预占)。但即使这样,也不能应用于要求响应时间在几十ms以内的嵌入式设备。
MontaVista公司和TimeSys公司采用了带有优先级继承功能的MUTEX结构。当优先级高的任务要进入临界区时,可以提高已锁定该临界区的任务优先级,避免发生优先级逆转现象(见图16)。以前SMP版Linux采用的自旋锁定结构,有时执行的任务发生了优先级的逆转。
使用带有优先级继承机能的MUTEX后,让高优先级任务等待的任务就不会被其它任务干扰,所以可缩短响应时间。两公司的SMP版Linux 操作系统,响应时间的最差值达到约50ms,平均值达到约10ms,实现了接近于实时操作系统的性能(见图17)。

提高并行性
采用可实现SMP的操作系统实现了利用几个CPU核并行处理线程的环境。但是,如果线程没有被分割成能并行执行的形式,系统只能简单地顺序执行程序。这使软件设计人员在开发应用软件和中间件时,必须尽可能地将处理和线程分割为能够并行处理的形式。这是决定多核微处理器的运算性能是否能够充分发挥的关键。
为了提高并行性,应用软件的开发人员需要与过去一样,把浏览器、照相机等具有的每一种功能都分别处理。例如,用C语言开发软件时,通过使用某处理生成子处理的系统调用“fork()”,以及处理装入指定程序执行的“exec” 系列系统调用群进行程序设计,使并行执行的处理在源代码上明确显示。如果执行fork(),则子处理在单线程状态下生成,初始处理的数据区域被完全复制给子处理。如果在被生成的子处理执行exec系列的系统调用,则数据区域将被置0。这样,设备可以同时、且不降低处理速度地执行多种功能。但也出现了因必须具有多个存储器空间致使存储器使用量增加,以及处理规模较大时,fork()的处理需花费较多时间等问题。
因此,需要一种程序设计方法,将单独开发设备各种功能的处理,进一步分为多个线程。与处理相比,线程启动和结束所花费的时间较短,进出共享存储器区域进行处理的线程之间的通信速率更快,因此,可以采用多任务程序的思想设计软件,按照该设计,用“POSIX线程程序库(Pthreads)”生成和废弃线程,并指定线程之间的同步等,同时进行程序设计。Pthreads作为IEEE POSIX1003.1c-1995已实现了标准化。在商用UNIX 操作系统中,遵守Pthreads的程序库被标准提供,另外,针对Linux 操作系统有“Linux Threads”。
需要注意的是,线程之间保持同步的方法避免用太长时间等待其它线程结束;以及线程共享变量的互斥控制。为了实现更高水平的并行化,还需要以并行工作为前提,改变线程的大小。同时,开发环境的优化也是必要的。

使一个处理自动实现并行化
如果多核微处理器的多个CPU核能同时执行处理,那么,实际应用中运算性能可提高到接近于CPU核数量的倍数。如果用于执行由专用电路负责的负载大的处理,用户就可以最大限度地享受多核微处理器的优异性能。自动并行化程序编译器技术对于这种处理的软件开发十分有效。
使用自动并行化程序编译器时,C语言及Fortran的源代码中,应输入符合“OpenMP”标准的提示行,该标准用于提示需要实现并行化的部分。C语言使用以“#pragma omp”开始的提示行,Fortran使用以“!$OMP”开始的提示行,软件设计人员利用这些,提示负责执行循环处理的部分,以及并行执行任务的部分。如果将这种源代码输入符合OpenMP的程序编译器,就会生成抽出了并行性的目标代码(见图18)。为了按照CPU核的个数分别进行数组的处理,软件设计人员可以明确地分割线程。
提供多核微处理器MPCore的ARM公司,测试了使用符合OpenMP标准的程序编译器OdinMP对MPEG-2视频流的解码处理软件进行并行化的效果(见图19)。这是在将含有4个ARM9 CPU的微处理器电路与开发板上的FPGA连接后测试的结果。开发板含有128MB的SDRAM和1MB的SRAM,FPGA在12MHz下工作。
16×16像素的宏像块水平连接后形成了带状区域“片”,以“片”为单位进行并行化时,与只有1个线程时相比,以QCIF(四分之一公用中分辨率图像格式)衡量时,帧速率最大达到3.47倍,以CIF(公用中分辨率图像格式)衡量,最大可达到4.64倍。另外,以可用一个图像作为基准进行解码的图像群GoP为单位进行并行化,以QCIF衡量时,帧速率最大达到3.44倍,以CIF衡量时,最大可达到4.05倍(见图19c)。

以各种粒度实现并行化
到目前为止,可以实际运用的自动并行化程序编译器,还仅限于对循环处理进行并行化,以及对用户使用OpenMP指定的任务进行并行化。因此,早稻田大学理工系教授笠原博德的研究组,正在研究以各种粒度的并行化开发能抽出更高并行性的规则系统。其优点是,软件设计人员不再需要像OpenMP那样必须提示抽出并行性的地方,而且还可以抽出用人工很费精力的细粒度的并行性。
笠原等人提出的多粒度并行化方案,首先对以子程序、重复处理部分、伪赋值块为任务单位分割的粗粒度进行并行化。然后,按照分割的任务种类进行粗粒度并行化、重复处理并行化、及伪赋值块内赋值语句间的并行化。反复进行上述操作,从而分为小单位的任务(见图20a和b)。因为有时仅执行称为操作系统调度程序的系统调用,就需要几万个时钟周期,所以采取在实现并行化的代码中嵌入调度程序的方式提高处理效率。
同时,为了尽量减少CPU核之间的数据交换,以及提高超高速缓存的命中率,还进行了缓存的优化(见图20c)。为此,执行有数据依存关系的多个循环处理时,有依存关系的数据应尽可能地由同一个CPU核执行,并尽量不使用共享存储器。另外,为了提高缓存的命中率,还对数组的声明排列规模进行了优化。如果指定限于64和256的数组规模是良好值,则数据只会多次被分配给部分地址,在缓存上容易发生线路争用。为了减少实际使用的数组数据被写入缓存的次数,需使并行化程序编译器可以自动改变数组规模。
在QCIF的MPEG-2视频流的编码处理中,与使用1个CPU核执行的情形相比,使用8个CPU核的处理速度可达到6.82倍(见图20d)。与用OpenMP指定循环处理部分,以及用程序编译器进行并行化的情况相比,处理速度也达到了1.64倍。

推动Java的应用
多核微处理器的发展会有力地推动Java的应用。Java采用扩展线程级等方法,可以比较容易地进行多线程环境下的程序设计。虽然还没有嵌入式设备用的Java虚拟机,但在服务器方面,例如惠普公司的HP JVM,采用将Java线程添加到操作系统核心线程执行的方式,这类的Java虚拟机有很多,结构都是由操作系统调度程序分配执行Java线程的CPU核。
而且,Java程序可以采用JIT(just-in-time)程序编译器,将称作“字节代码”的中间代码编译为目标代码后执行。某中间件开发企业技术人员认为:“如果在JIT程序编译器中加入自动并行化的设计思想,就可以按照可使用的CPU核个数,执行并行化后的目标代码。”

必须改变查错排错方式
对于多核微处理器的软件开发,工作量加大了很多。例如,一旦由操作系统负责排序,线程的执行顺序就变为随机方式,因此查找错误原因就会比较困难。另外,如果共享变量等的互斥控制过剩,则处理的数据流量降低,需要对线程及处理结构的设计进行深入研究。
对于开发工作量的增加,重点要解决查错排错时无限制地同步控制多个CPU核的问题(见图21)。目前,多处理环境的查错排错,大多用1台PC机上的调试程序,通过用1个JTAG接口连接的ICE控制并监视多个处理器。“当某个处理器发生错误,即将关闭其它处理器时,由于需向调试程序传送一次事件报告,再向其它处理器发出中止指令,所以会发生几ms的延迟。”横河数字计算机advice事业部部长山田敏行表示。该公司用电缆连接2台advicePOCKET ICE,从而使同步延迟时间缩短至几ms,并表示将提供用于多核的查错排错环境。
另外,ARM公司开发了在含有多个CPU核及DSP核的微处理器上的查错排错电路Core Sight(见图21b)。横河数字计算机公司的山田表示:“CPU核之间的同步延迟时间大概可缩短至几ns。”

优化线程的粒度
进行多线程程序设计时,决定性能的一大要素是线程的粒度。如果多处发生线程长时间等待执行,多个CPU核的优势便无法发挥出来。然而,由于软件非常庞大,要在各种执行状态下精确查清各线程的等待时间,将是非常耗时的工作。
美国Metrowerks公司目前正在强化性能分析工具CodeTEST Performance的功能(见图22)。当执行应用软件时,用这种分析工具从操作系统收集并统计在哪个线程发生了何种程度的等待等信息,并归纳出来以供研究。根据这些统计结果,软件设计人员能比较容易地验证线程的粒度是否合适。

充分发挥芯片优势高速总线和存储层是关键

1 多核微处理器一览表

应用领域

公司名称

产品名称

CPU个数

CPU的体系结构

最大工作频率

功耗

工艺

手机

ARM 公司

MPCore

最多4

8级流水线

550MHz

750mW*1

——

瑞萨公司

多核版M32R

2

2个命令同时执行的超标量型,7级流水线

600MHzz

800mW

150nm

台式个人计算机

Intel公司

Pentium M的下一版(正在开发)

2

不详

不详

不详

AMD公司

Athlon 64 FX的后续产品(Toledo)

2

不详

不详

不详

90nmSOI

网络设备

Broadcom公司

BCM1250

2

4个命令同时执行的超标量型

BCM1400

4

PMC-Sierra公司

RM9000×2

2

2个命令同时执行的超标量型,7级流水线

服务器

IBM公司

Power5

2

8个命令同时执行的超标量型,2SMT

不详

Power4

2

8个命令同时执行的超标量型

1.3GHz左右

120W

*1采用90nm工艺设计、含有4CPU结构的情况

对于多核微处理器的开发,服务器等领域的专业技术将起到很大的推动作用。这些技术主要包括:集中型共享存储器、snoop方式的缓存一致性协议、共享输入输出、可实现SMP的分散型操作系统等。
对于单芯片上集成了多个CPU核的多核微处理器,芯片总线及存储器结构等确保CPU核平衡工作的外围技术,将使微处理器性能产生很大差别。这些是设计多核微处理器时可利用的基础技术(见表1)。例如,瑞萨公司从事多核版M32R设计的系统解决方案统括本部系统核技术统括部部长清水彻预测:“在SuperH、H8及M16C等CPU实现多核化时,可以采用在开发多核版M32R中的技术。”

4项重点技术
在提高多核微处理器运算性能方面必须具有4项重点硬件技术:确保芯片总线的实际数据传输速度;安装二级缓存;缓存的一致性控制;降低功耗(见图23)。
芯片总线需要128位左右,位宽比单核时扩大了很多。这样,当多个CPU核同时访问主存储器及外围电路,及维持各CPU核拥有的一级缓存的一致性时,可防止数据传输速度降低。对于现有的单核32位微处理器,32位的总线宽度已经足够。
例如,瑞萨公司在多核版M32R中,通过使芯片总线宽度达到128位,实现了最大达4.8GB/s的传输速度(见图24)。使缓存的1条线路达到与总线宽度相同的128位,实现了1个周期一次可装入4个寄存器的数据。ARM公司采用了使MPCore可连接2条64位的芯片总线AXI,在166MHz工作时,实现了2.6GB/s的数据传输速度。
多核微处理器采用的芯片总线,为了并行处理多个事务,必须具有将数据传输要求和实际的数据传输分开进行的分割处理功能。当多个CPU核成为总线主控器,同时发出传输要求时,该功能可以将处理延迟抑制在最小限度内。
例如,瑞萨公司多核版M32R的芯片总线,采用了4级流水线处理结构;ARM公司在AXI上采用了5级流水线处理结构,将处理要求和与其相对应的响应分开。如果没有分割处理功能,1个总线主控器等待开始传输数据期间,其它总线主控器就无法提出传输数据的要求,因而造成时间的浪费。瑞萨公司指出,使用2个CPU核的情况下,实际发生的数据传输速度在采用4级流水线结构时达到最高,约是不采用流水线处理的1.5倍,达到1.7GB/s。如果采用5级以上流水线处理,则传输速度反而会降低。
ARM公司为了进一步提高数据传输速度,还给AXI增加了可不按提出顺序响应多个传输要求的乱序(out-of-order)执行功能。

需要安装二级缓存
即使采用数据传输速度高的芯片总线,如果访问存储器需要太多时间,也难以保证性能的提高。特别是在使用多个CPU核执行不同任务时,主存储器上的各种地址区都发生访问行为,命令和数据可能会来不及提供。因此,需要给多核微处理器安装256KB到几MB的二级缓存。
二级缓存的使用,虽然对PC中的微处理器来说已经很普通,但对于嵌入式设备中的微处理器还不很普遍。目前这种状况也在发生着变化。例如,ARM公司开发MPCore的同时,在2004年6月开始提供二级缓存控制器L220(见图25)。如果安装了256KB的二级缓存,MPEG-4解码处理所需的时间可比没有二级缓存时缩短一半。256KB的二级缓存使用了中国台湾地区TSMC公司的130nm工艺,面积是6mm2,“制造成本约为0.41美元,”ARM公司解释说。L220采用8路相联方式,与直接映像方式相比,发生缓存错误的概率降低了50~75%。

采用snoop方式
8个CPU核是极限
各CPU核独立拥有的一级缓存之间的一致性控制,对于缓存的有效利用也十分重要。许多提供多核微处理器的厂家,都采用多处理器结构服务器等一直使用的MESI(modified, exclusive, shared, invalide)协议的snoop方式。
在snoop方式下,各CPU核监视总线上的地址,并查看该地址数据是否存在于本CPU核缓存中,从而使各缓存中存入的数据保持同步。当某CPU核的命令缓存线路和TLB(translation look-aside buffer:翻译后援缓冲器)执行处理时,其它CPU核发生中断,使相同地址行无效,保持缓存之间的同步。
目前,多数微处理器厂家采用的snoop方式也有极限。“如果一个芯片集成的CPU核数增加到8~10个,则达到总线连接CPU核的极限,可能导致snoop方式无法使用。”庆应义塾大学理工系信息工程学天野英睛教授表示。采用集中共享存储器方式时,多个CPU核不能同时访问主存储器。如果CPU核增加到8~10个,那么处于等待状态的CPU核也会随之增加。
当制造工艺发展到45nm时,也可以考虑在一个芯片上集成10个以上的CPU核。存储器主要考虑两种体系结构:一是不用总线,改用开关连接CPU核和主存储器;另一种是用总线连接CPU核,同时主存储器由各CPU核分散控制的CC-NUMA(cache coherent non-uniform memory access:高速缓存一致性非统一内存访问)结构。如果微处理器数量超过8个,则大多采用CC-NUMA结构及NUMA结构。NUMA结构需要使用不同于SMP的操作系统,而Linux 操作系统的2.6版可应用于NUMA结构。
两种情况都不是用单一总线连接各CPU和主存储器,所以不能像snoop方式那样统一监控总线上的地址。因此,必须具备一种索引信息,对哪个缓存存有哪些数据进行逐一管理。例如, IBM 公司的Power5,芯片上的2个CPU核虽然采用通常的总线连接方式,但组合多个芯片的CC-NUMA结构采用了索引方式。

自适应关断技术
将来可能会出现只有多核结构才能实现的降低功耗方式。单核结构已经使用了根据处理的负载动态控制工作频率和电源电压的技术。多核结构可能会进一步发展该技术,通过接通或关断特定CPU核的电源,按照处理的负载,改变处于工作状态的CPU核数量。ARM公司将其称为自适应关断(Adaptive Shutdown)技术,已应用在MPCore中。自适应关断技术,对于高速缓存也具有控制电源电压及工作频率,降低功耗的功能。在多核结构中,如果只凭借控制工作频率和电源电压抑制功耗,功耗只能比在最大工作频率下工作时降低约50%。如果采用自适应关断技术减少处于工作状态的CPU核数量,功耗最大可降低85%(见图26)。
采用多核结构时,通常各CPU核的负载比单核轻,所以即使在相同运算性能的情况下,也能够通过抑制电源电压降低功耗。瑞萨公司的清水说:“当所有CPU核在最大频率下工作时,功耗有可能短时间内超过单核,因而必须降低单个CPU核的功耗。”
瑞萨公司在M32R实现多核化时,对CPU核内部的电路设计进行了重新评估,找到了降低功耗的解决方案。具体地,在进行逻辑地址向物理地址高速转换的TLB中采用“分别比较的方式”(见图27),并采用根据数据要求的紧急程度动态改变一级缓存延迟时间的“延迟时间可变更高速缓存”。另外,在门时钟和时钟布线的分配方面,使每个在600MHz工作时的CPU核功耗达到341mW,降低了24%。

与SMT实现融合
多核微处理器不久也会对CPU核本身的体系结构产生影响。随着多核结构的普及,将不断开发实现几个CPU核并行工作的分割为线程的软件,并建立相应的开发环境。而且,和多核微处理器一样,采用同时多线程技术(SMT:simultaneous multithreading)的单核微处理器的开发将加速推进。随着SMT技术的逐步成熟,多核与SMT也许会在1个微处理器上实现融合(见图28)。SMT在1个CPU核上只按线程数准备寄存器文件,提高多线程的执行效率。例如,Intel公司在86系列微处理器Pentium4中,应用了称为“Hyper Threading”的SMT技术。
多核与SMT的融合有先例可循。IBM公司在Power5中,采用了双CPU核结构,并在2个CPU核中分别嵌入了并行执行2个线程的功能。微处理器在封装上是1个,但从操作系统来看,似乎有4个CPU核在工作。
开发SMT的微处理器厂家主要有IBM公司和Intel公司,目前包括嵌入式设备用的微处理器都出现了采用SMT的趋势。MIPS 公司于2003年10月开发了SMT的概念MT ASE,该技术可用于提高处理效率。据MIPS公司介绍,因MT ASE而增加的CPU核电路面积只有10%左右(见图29)。MIPS系列CPU核采取了适应多核结构的方案,随着MT ASE的普及,嵌入式设备领域将出现多核结构与SMT的融合。
MIPS公司根据软件结构开发了两种SMT。一种是VPE(虚拟处理单元)型,从软件可以看到2个虚拟CPU核,针对使2个独立应用并行工作的粒度比较粗的并行执行。另外一种是线程型,从软件可以看到1个CPU核,操作系统上的任务可以分配给这个线程处理,针对比VPE粒度细的并行处理。但是,线程型需要使用生成线程的专用命令,现有多核和多线程用的软件,不能完全照搬使用。 [NIKKEI ELECTRONICS ?2004. Nikkei Business Publications, Inc. All rights reserved.] (成英编译)

参考文献
1 大石等,“降低漏电流的技术现状与未来展望”,《日经电子》,2004年4月26日
2 Nikitovic M. et. al., “An Adaptive ChipMultiprocessor Architecture for Future Mobile Terminal,” CASES 2002, Oct. 2002
3 小高等,“数据定域的同时进行MPEG-2解码的并行处理”,日本信息处理学会研究报告‘计算机体系结构’,No.156,pp.13-18,2004年2月

文章图片下载

相关推荐

评论:智能仪器仪表现状及发展趋势分析

英特尔CPU份额85.2%创10年新高

英特尔  微处理器  2013-04-23

高管再流失 AMD资深副总裁高达德转投三星

AMD  芯片  微处理器  2012-12-27

Intel处理器份额小幅上升难改X86整体颓势

Intel  微处理器  X86  2012-11-15

Intel x86处理器第三季度销量骤降

Intel  微处理器  x86  2012-11-12

英特尔发布2011企业社会责任报告

英特尔  微处理器  2012-05-30
在线研讨会
焦点