很荣幸在计算机事业五十周年的时候有机会做这个报告,我的报告题目是龙芯3号多核处理器设计及其挑战。我报告还是涉及多核处理器的发展趋势,龙芯处理器总体情况,主要介绍一下龙芯3号设计目标和设计挑战。
让我说多核处理器的发展趋势,就一句话,就是处理器结构正处在转折期,主频至上的时代已经结束,摩尔定律关于主频部分的终结,晶体管资源还在增加,性能功耗比继性能价格比后成为重要的设计指标,网络和媒体的普及导致计算机应用的变化,处理器经历了简单到复杂,再到简单
//
UltraSPARC T1是升阳电脑所研发的微处理器,而处理器还在开发阶段时的研发代号称为“Niagara,尼亚加拉瀑布”,之后在2005年11月14日正式研发完成并发表。UltraSPARC T1是一颗多核心(执行核)、多绪(执行绪)的CPU,且针对服务器运算的运用需求而强化省电设计,在1.2GHz运作时脉下的典型用电为72W(Watt,瓦、瓦特)。
UltraSPARC T1衍生自UltraSPARC系列微处理器,它是升阳电脑公司的第一颗多核多绪处理器,这颗处理器内可以有4个、6个、8个CPU核心,且每个核心最多可同时执掌、处理4个执行绪,如此UltraSPARC T1处理器在最理想状态下可同时执行32个执行绪。
UltraSPARC T1的运作与升阳电脑的高阶对称处理(SMP)系统很近似,它具有系统分割能力,可以将一个或数个核心切割成一个分区(Partition),然后在分区内执行一个或数个程序(Process)及执行绪(Thread),此外待执行的程序、执行绪也可以尽速派送或转移给其他较闲余的执行核心,进而增加整体执行效率。
[编辑] 核心
UltraSPARC T1是针对多绪执行而设计的特殊处理器,它运用新的架构来获取高执行效率,而不是为单一个执行核心加入更多智慧化、最优化的心力设计,升阳的目标是在同一时间内尽可能执行、处理多个执行绪,使每个执行核心的执行管线能达到最大的使用率。
此种作法目前来看似乎成效不错,现有的基准标竿测试证实UltraSPARC T1内的每个执行核心确实更有效率,这是与约2001年的UltraSPARC III相比,UltraSPARC III是一颗单核、单绪,且能完整执行SPARC v9指令集的处理器。
UltraSPARC T1内虽有8个执行核心,但每个执行核心的结构复杂度并不如现有的高阶处理器,而且每个执行核心也不具备超序执行(out-of-order execution,简称:OOO,也称乱序执行)的能力,也没有配属大容量的快取内存。单绪型的处理器极倚赖大容量的快取内存来提升执行效能,原因是:一旦在快取内存中抓取不到所需的资料(称为:漏失,miss)时,就必须从主内存中去提取(fetch)资料,而增加快取内存的容量可减少漏失的机率,不过即便如此,漏失对效能依然是很大的冲击影响。
相对的,UltraSPARC T1的核心是运用多执行绪的处理特性来避开快取漏失所造成的效能冲击,当快取漏失发生时,核心会转去处理另一个执行绪(在此假设还有其他可放置的待处理位置,每个核最多可执掌4个执行绪),在处理的同时,原先漏失的的需求资料,也会在这时候以背景作业的方式自外部主内存提取到处理器内。如此虽然每个执行绪的处理速度会较慢,但每个核心的整体处理进出量及运算利用率反而是大幅提高。而这也意味著快取漏失的冲击影响被大幅降低,这样UltraSPARC T1就能以较少的内建快取内存而仍可维持大量的进出处理执行效率,快取内存的容量不再需要大到得容纳执行核心所需的所有资料或绝大多数的资料,只要能容纳每个执行绪最近所漏失而必须提取至处理器内的资料。
//
和复杂的过程。
摩尔定律不是性能定律,以前摩尔定律被赋予很多性能的含义,每1.5年性能提高一倍,摩尔定律真正含义是关于晶体管数目和晶体管开关速度的定律。Intel是摩尔定律的倡导者,根据Intel自己的资料,从486到奔四性能提高了 75倍,有13倍来自工艺的改进,6倍是来自结构的改进。每代微处理器最大的片内时钟频率是上代产品的两倍,其中1.4倍来源于器件按比例缩小,另外 1.4倍来源于流水级中逻辑门数目的减少,如180纳米时是32个等效F04的延迟,而在130纳米时只有26个F04的延迟。
晶体管反转延迟按比例缩小导致性能同步增长的趋势在130纳米时已经终止了。工作电压一直往下降也降不下去了。连线延迟的影响,随着工艺的提高线变短了,但也变细了,全局的连线延迟还会不断增长,因为芯片的面积不变。30纳秒一个时钟信号只能穿过芯片的1%面积。结构上不可能无限制细分流水线,一般认为不可能小于10-12F04,考虑latch的延迟,只剩下6-9级F04。另外封装有一个散热的问题。
晶体管还会增加,我们如何有效利用晶体管资源还是一个问题,晶体管增加,性能增加只是晶体管数目增长的平方根。由于晶体管特性,工作电压不会随着工艺进步而降低,加上频率提高,导致功耗密度随集成度增加而增加。所以Intel暂时推不出4GHz以上的P4。功耗和电压是平方的关系,随着阏值电压的降低,漏电功能大大降低。现在比较强调均衡的性能,比如SPEC CPU2000对顶点,浮点,I/O,大内存有很高的要求。未来需要以低能耗处理大量的服务,比如以网络媒体为代表的流的处理,基于Web的大量请求快速处理。
当业务需求需要结构相应改变,比如如何加速单个控制流的执行过程,现在是比较复杂的硬件,导致了巨大的能耗,未来有可能天然并行的Web服务器,可以通过简单的并行来加速执行过程。以前开始都是体系结构,缩小运算与访存的差距,过去用缓存,面积和能耗的增长,未来流数据只用一次,所以缓存就不管用。现在很多处理器缓存占8、90%的面积。以前说CPU,什么叫CPU,就是运算器加控制器就是CPU,现在一大部分内存在里面。应用的多样性意味着芯片的多样性,一方面芯片的各种应用需要比较专用的芯片,芯片的制造成本不断提高,一个芯片要求延长生命周期把钱赚回来。
处理器结构的周期60年来,以20年周期经历一个简单复杂、简单、复杂的螺旋上升过程。早期的处理器结构由于工艺技术的限制,不可能做得很复杂,一般都是串行执行。后来随着工艺技术的发展,处理器结构变得复杂,流水线技术、动态调度技术、缓存技术,像量机技术被广泛使用,后来推出RISC技术,但后来超流水做得越来越复杂,现在处理器最多可以执行200多条指令,乱序的执行。所以现在又到了一个复杂到一定程度复杂不下去的时候。
所以看到传统高主频的复杂设计遇到越来越严重的障碍,需要探索新的结构技术来在简化结构设计的前提下充分利用摩尔定律提供片内晶体管,以进一步提高处理器的功能和性能。多核结构是符合发展趋势的。但多核有两个基本的科学问题,计算机理论基础是图灵机,物理上要求并行的,到编程模式必须是串行的,冯诺依曼结构是顺序地址空间和分布式存储期不匹配,理论模型和物理实现的剪刀差越来越厉害,这问题本质上是应用和结构,以及结构和物理之间的差距问题,需要新的模型以及结构的创新工作。我们要应用新模型,或者物理上新器件。如果这两个做不到就架一座桥,把串行结构并行到物理层做。
过去Closing the Gap有很多复杂的例子,操作系统可以支持虚地址空间,另外80年代多发射的结构得以实现。另外晶体管增加也使得缓存层次得以实现,一定情况下可以提高速度。另外缓存一致性协议,可以在分布存储情况下提供统一的编程空间。我们也有不成功的例子,并行计算机发展几十年,目前一种并行处理结构解决困扰并行处理二十多年的并行程序编程困难,串行程序加速小的问题。
第二部分介绍一下龙芯系列处理器,从2002年做了龙芯1号开始,之后做了龙芯2号,用我话说三级条的跨越。龙芯2B性能是龙芯1号3倍,龙芯2C性能是龙芯2部的3倍,之后发展了龙芯3号。现在1号面向IP和嵌入式应用,龙芯2号面向高端的应用,龙芯3号面向多内容的服务器应用。龙芯2E是64位四发射,乱序执行。现在量产已经基本完成,现在已经向市场批量供应。龙芯2E结构特征,在单处理器结构方面比较到位,不会比国际最好的差。我们有功耗的测试,750M,连CPU、北桥和内存条加一起只有7.5W。这是SPEC定点分支。这是国际组织找了几十个程序,世界上做通用CPU厂家公用的。媒体播放我们觉得750M比P4要快一些。我们部分应用,包括笔记本,一些处理平台,低成本电脑、笔记本,我现在用的就是一家台湾公司做的笔记本。
我理想是“十一五”期间建设在片内攒系统的海龙大厦。龙芯3号多核处理器,我们阶段目标,第一个阶段到2008年希望做8-16核,到2010年做32 - 64核。龙芯3号结构特征是多平台并行虚拟机结构,可伸缩大CMP结构。我们现在面临功耗的问题,应用变化等很多转折点,要抓住这个转折点,完全可以利用后发优势取得突破。主频的游戏已经结束了,并行结构我们很有机会。我们设计的方法很正确,有10个核以上,国外厂商更多运用静态电路,不可能把10个 100W核集成在一起,不可能为了追求极端的性能牺牲功耗。
龙芯3号一个目标要建设和谐的计算和谐,一个机机和谐,就是兼容问题。另外一个是人机和谐,串行程序并行化的问题。要做一个多平台并行虚拟机结构,我们有一个理想,使所有可执行文件可以在龙芯上正确快速地运行。一方面通过进程级虚拟机实现Linux上的X86兼容。另外把虚拟机自动并行化,现在虚拟机使用的热点刚开始软件解释执行,觉得这是热点就开始翻译,翻译以后觉得还是热点就开始并行优化,我们可以更进一步,就是进行并行的优化。这样使得串行程序在多核上可以并行。我们看到以前有一个指令性结构把硬件软件切分开来,以后写一个二进制代码你感觉不到,彻底打破了软硬件的界限。让软硬件大协同实现一个大虚拟机。
我们发现不同指令系统的区别,所有的处理器的用户态的指令都差不多,只是格式和表述不同而已,但核心态的指令和机制差别较大。现在龙芯2准备实现完整的ABI兼容功能,通过虚拟机方式在Linux上支持多种二进制码。什么叫完整的用户态指令,比如标志,直接判断这个值大于零还是小于零,有些转移根据计算机,有指令根据计算机来做。还有寻址方式。编码不一样,用虚拟方式进行编码的转换。128位的缓存。处理器同步的机制。用户态指令,所有的都可以并在一起实现,核心态指令我们自己写。
//
二、并行虚拟机结构
龙芯3号的虚拟机结构有两个目的。第一是通过虚拟机实现跨平台兼容。第二目标是通过虚拟机的方式实现单线程程序的并行加速。
龙芯3号的虚拟机使用解释执行和翻译执行相结合的技术,实现不同指令系统的硬件平台和应用程序间的兼容。为了实现跨平台兼容,龙芯3号处理器除了通过硬件支持实现MIPS64兼容外,还将实现对X86指令中用户态指令的主要特征,为实现X86处理器的模拟器和翻译器提供专门指令的支持,以缩小龙芯ISA和X86处理器ISA的差距。在此基础上,移植Linux操作系统并在Linux操作系统中实现进程级虚拟机的机监视器(VM Monitor,简称VMM),达到兼容基于Linux的X86应用程序的目的。并在Linux操作系统上再实现类似于VMWare的系统级虚拟机,运行MS-Windows操作系统。
虚拟机的基本原理是在源机器(如MIPS)上先使用解释的方式解释执行目标机器(如X86)的指令,并在解释执行过程中对程序行为进行监测。当监测发现某段程序为热点程序时,切换到翻译执行的方式,即通过编译的方法把一段源机器程序翻译成目标机器程序,以提高执行效率;并根据不同程序段热点程度的不同在翻译执行过程中实现不同级别的优化。Transmeta处理器就是通过虚拟机的方式实现了与X86程序的兼容。在龙芯3号中,除了实现传统的虚拟机外,还将实现并行虚拟机,即对热点程序段进行翻译的过程中,根据程序段的热点程度对其中的可并行部分进行并行化,以提高执行效率。一般说来,程序的热点部分具有较好的可并行性。
\\
中科院计算所系统结构室先进编译方向 马湘宁 二进制翻译关键技术研究
1.5 二进制翻译技术研究的意义
目前我国多家单位都在自主研发CPU芯片,但这些芯片基本上都是与X86不兼容的,同样面临支撑软件的移植问题,由于INTEL X86芯片多年的盛行,用户希望原本使用的运行于86机器平台的各种应用软件,能够在新的机器--我过自主设计的芯片上正确使用,这就需要在开发芯片的同时,解决遗留的应用软件使用问题,尤其是某些特定外设芯片如显卡的功能驱动软件的使用问题,才能无分析的与现存的各种外设兼容.
龙芯组提供硬件支持
Sun今年3月开放了UltraSparc T1(Niagara)处理器的程序代码,让更多厂商能推出支持Sparc的固件、操作系统、编译器、驱动程序。
\\
//
这是要构件一个和谐的计算机环境,第二个目标要可扩展的互连结构。刚开始设计是考虑可伸缩的分布式结构,可伸缩的缓存一致性协议,全局共享统一编址的二级缓存。也就是相当把CC-NUMA做在片内,把SMP做在片内。四个处理器四个缓存,一个8× 8的开关,这些设计都已基本完成。龙芯3号在策略上伸缩设计、有限实现,比如结合工艺和应用,桌面应用4核就够了。
//
龙芯3号将采用多核结构,其主要结构特征包括: (1)实现可伸缩的多核互连和分布式共享二级Cache机制。龙芯3号采用的多核互连和分布式共享二级Cache机制能够支持在片内集成十几到几十个四发射处理器。(2)在原来支持MIPS指令系统的基础上,通过软硬件协同的虚拟机的方法,支持多种指令系统的二进制兼容;并在此基础上,以及在快速的处理器核之间共享和通信机制的支持下,通过软硬件协同实现对单线程的加速。(3)在提高性能、提高可靠性以及降低功耗方面进行进一步优化。
一、可伸缩的多核互联和分布式共享二级Cache机制
龙芯3号片内采用二维mesh互连结构,其中每个结点由8*8的交叉开关组成,每个交叉开关连接四个处理器以及分成四个体的共享二级Cache,并与东(E)南(N)西(W)北(N)四个方向的其他结点互连。因此,2*2的mesh可以连接16个处理器,4*4的mesh可以连接64个处理器。
龙芯3号的片内二级Cache分布在不同的结点中,被片内的所有处理器共享。每个结点的二级Cache根据地址分成interleave的四个体,可以被并行访问。所有结点的二级Cache统一编址,每个cache块都有一个固定的home结点,并在home结点处维护相应cache块的目录。每个结点(或多个相邻结点)对应一个内存控制器以及IO通道。内存地址分布和二级Cache的地址分布一致,以简化二级Cache和内存之间的通路并降低二级Cache访问失效的延迟。
//
讲一下龙芯3号的挑战,龙芯过去几年就这样过来的,首先是可伸缩的结构设计,要把所有的指令系统用户态的东西都并在一起实现了,要实行并行虚拟机的支持。原来有一个指令系统照着指令做就可以了,现在软硬件都需要考虑。可伸缩的结构,一致性的缓存协议。以及包括内存控制器和低功耗,16个核放在一起5W 就是80W,一定把每个控制在2-3W之内。结构的难题不怕,怕的是物理设计比较难,物理设计的方法上非常难,如果把16个64个龙芯2号核放在一起,反而会成为最大的瓶颈,就像茶壶里倒饺子根据倒不出来的,封装最多1千个饺子封装,真正传递的信号就几百个,要把I/O做得很快,以后可以想像这样的芯片,比如片内3、4G,脚上800M,总之里面快外面慢,龙芯芯片这样脚上5-10G的跑,片内1.5G,2G,脚上频率比里面快,要做那么高的点到点传输不容易的,要建设高速传输的环境。高速缓存的设计等等这些问题非常难。比起验证来物理上不难,这么大的设计怎么保证是怎么的没错,处理器核,以前都是用一些形式验证,随机的验证环境,一个芯片设计6、70%花在验证上。因为互连和缓存一致性协议怎么验证。后仿真怎么办?尤其要FPGA,现在非常依赖于 FPGA,龙芯2号现在面积比较大,如果16个核那板子会很大,肯定不可能实现,怎么做FPGA验证是非常困难的问题。这东西以前做工作有国外的东西可以借鉴,现在没有,因为别人也没有做这么多核的东西。龙芯2号会有65纳米的技术。昨天在人民大会堂也签署了一个协议做龙芯3号的设计,我相信“十一五”期间,我们在技术上不会比那些大企业差。
我汇报就到这里,谢谢大家!
提问:刚才提到用虚拟机做优化的时候,有翻译、优化,再做动态的并行化,这时候并行化的类似于虚拟机代码,并行化以后的优化什么东西?
回答:我说的虚拟机有很多层次,JAVA虚拟机是语言级的虚拟机,我们所谓的优化,是二进制码到二进制码。我们对热的指令进行优化,这也是X86平台进行并行编译,然后再多核上跑。
提问:原来自动并行化都是源代码,这样信息比较多一些,动态的时候可以得到另外的信息,在这么低层次,看到二进制代码或虚拟机代码的情况下,能不能做有效的并行化,是不是做了一些基础工作?
回答:我们把目标程序翻译成X86高端优化已经做了不少,目标到目标的翻译有一个好处,因为有时候动态执行过程中的信息得不到,在动态之间可以指导指令性信息,HP前一些年做了一个HP到HP的优化,二进制到二进制的优化,平均性能可以提高15%。我们这也是有限目标能赚一点就是一点。
文章评论(0条评论)
登录后参与讨论