龙芯CPU(6)–李国杰院士谈研制龙芯CPU的策略考虑

【编者注:我曾经详细收集了中国龙芯CPU的许多资料,现开始做一些整理并发布于此。总体而言,龙芯对中国信息技术的发展战略很重要。用李国杰院士的话讲,做龙芯是一个国家战略行为,而非一个单纯的技术 和(或)商业动作。】

李国杰院士谈研制龙芯CPU的策略考虑

2002年10月16日

中科院计算所 李国杰

我国科技界与产业界至今对如何快速而健康地发展我国IC产业,特别是对如何发展CPU产业还没有达成共识。本文以研制龙芯CPU的策略考虑为基础,对发展我国的集成电路设计产业提出一些观点与看法,请教于全国同行,旨在抛砖引玉,希望对决策层尽快做出科学决策有所裨益。

一、跨越与跟踪

IC加工业是资金高度密集的产业,一条0.18微米生产线,一般要投资15亿美元以上,国外对先进IC加工设备出口中国仍有许多限制,因此,我国在芯片加工方面实现跨越式发展难度相当大。相对而言,芯片设计是智力密集型产业,虽然IC设计产业的收入目前只占整个IC产业10%左右,但营业额增长率高于制造业3倍以上。台湾IC设计业1998年、1999年的投资回报率分别为21.6%和39%,比IC制造业的回报率(4.%和12.6%)高几倍。据麦卡锡公司预测,中国国内IC设计业2010年的收入可达100亿美元。我国从事芯片前端设计的人力资源丰富,许多研究所和大学都有不少从事系统和硬件设计的人才。芯片设计的知识产权和专利很多都体现在系统级设计上,尤其是当进入片上系统(SoC)设计时,系统级的创新更加重要。龙芯一号CPU物理设计的成功表明有系统级设计经验的人转入物理设计并不是一件高不可攀的事,入门并不难,只要有一股钻劲,经过几年的积累,我国一定会出现一批物理设计的高手。当然物理设计本身是一门高深的技术,微电子专业的人才是物理设计的主力。因此,我们认为,中国实现IC产业跨越发展的主要希望在芯片设计上。

在分析了计算所系统设计方面的技术储备与优势后,我们在龙芯一号设计开始时,提出了“高起点,一步到位”的要求。所谓高起点是指尽可能采用先进的制造工艺。我们第一次设计和流片生产CPU就跳过了0.35、0.25微米工艺,选用了目前代加工厂主流的0.18微米工艺。做出这种决策不是盲目地碰运气,而是通过与硅谷许多有经验的工程师深入调研分析流片成功的可能性后做出的,从某种意义上讲,这也是利用了“后发优势”,“借树开花”。所谓“一步到位”,当然不是指第一次设计就做出性能超过P4的CPU,而是针对当时国内有些单位还在启动研制386、486的形势,要求我们在微体系结构上有创新,用国际先进水平的体系结构实现64位浮点运算,尽可能实现技术上的跨越式进步,而不是从模仿20世纪80年代技术开始一步一步爬行,并且一开始就强调正向自主设计,不采取解剖别人芯片反向设计的路线。“一步到位”的另一层意思是不做供鉴定用的实验室样片,而是要确保万无一失,经得起产品检验,做成可批量生产的芯片。经过一年多努力,龙芯一号达到了预期目的。

我们真正期盼的跨越式进步的标志性产品是龙芯2号。我们在设计龙芯2号时,已分析了Intel P4、Sun SPARC、HP的Alpha、IBM Power4等多种主流芯片的微体系结构,要求龙芯2号的体系结构有自己明显的特色,以最有效的方法实现四发射,即一时钟周期可同时执行四条指令(P4实现了三发射),而且要为下一步研制超线程CPU和多处理机CPU打下基础。计算所与在美国参加过千万亿次计算机研制的高光荣教授共同成立了先进计算机联合实验室,重点研制多线程机制,争取实现几十个甚至几百个线程并行操作。这项技术各大公司还在研究之中,我们将争取以跨越的技术进入国际前列,在龙芯3号、龙芯4号中采用。

我们主张的跨越式发展还体现在我们对微处理器发展趋势的理解与判断上。国人对于CPU和操作系统有特殊的感情,把这两者称为信息技术的核心技术。实际上随着Interent普及与发展,人们心目中的P3、P4之类的CPU和Windows之类的操作系统的地位正在不断下降。在向科学院领导申请知识创新重大项目时,我曾说过,龙芯微处理器的目标不是传统的“CPU”,而是“DPU”,即Distributed Processor Unit。所谓中央处理器是针对过去的大型计算机取的名,随着网络存储和各式各样的通信与终端设备直接上网,微处理器将分布在各种设备中。以后计算机、通信设备(如智能化的路由器等)和信息家电的界限越来越模糊,新一代的微处理器和现在PC机上的CPU将会有很大区别,创新的空间很大。中国的芯片设计要跨越发展,可能要通过软件和算法的突破来弥补硬件加工的不足。系统设计人员在芯片设计产业中将扮演十分重要的角色。总之,我国的芯片产业不能再走PC产业走过的以组装为主的老路。如果只重视附加值很少的低端芯片或主要用别人的IP“组装”低端SoC芯片,前途不会太美好。

二、通用与专用

我国CPU的研制尚未真正开展起来,863计划集成电路重大专项的高性能CPU项目还处在软课题研究阶段,但关于重点支持所谓通用CPU还是嵌入式CPU的讨论已经进行多次,不幸的是谁要是讲想做通用CPU,马上就有人反驳:你想赶上Intel P4?这肯定不可能,还是先做点电表控制芯片、身份证卡吧。国外公司研制芯片只关心市场有没有需求,不会先浪费时间论证应该做通用还是嵌入式芯片。从各个芯片公司的网页上我们只会看到各种型号芯片的介绍,看不到他们将芯片分成通用和嵌入式。

从语文的角度上讲,“通用”的反义词是“专用”不是“嵌入式”。所谓嵌入式CPU是指安装在不是计算机的路由器、手机、电视机、汽车等设备上的CPU 芯片,而装在PC机、笔记本电脑、工作站、服务器上的CPU一般称为通用CPU,因为它能执行各种各样的程序。嵌入式是CPU的一种应用,一般只要求运行某种确定的程序,很多场合的嵌入式应用都要求低功耗,特别是像手机、PDA这类手持移动设备,低功耗意味着充一次电可运行更长时间,因此,低功耗应用追求更高的MIPS/W(每瓦每秒百万指令),而不是MIPS数。好的嵌入式芯片,如IBM PowerPC750FX每瓦的MIPS数比Intel P4(2.4G)高10倍,但从芯片的指令系统和体系结构而言,所谓通用CPU和嵌入式CPU并没有本质区别。不论是通用CPU还是嵌入式CPU,只要是低档产品都容易做而高档产品都难做。要特别强调的是所谓嵌入式芯片五花八门,但大都采用通用的CPU核,如MIPS核、ARM核等,从这个意义上讲,通用 CPU和嵌入式CPU技术上是完全相通的,不存在只能选其一的问题。

在集成电路的发展历史上,芯片产品在制造与使用的对立统一中发展,随着半导体产业的景气循环,总是沿着通用与专用循环往复不断进步。天同证券公司在网上发表了一篇“半导体产业行业研究报告”,对通用专用芯片交替发展做了一些分析,本文下面引用该文的分析结果。1959年仙童公司推出第一个硅平面晶体管商品,开始了芯片产品第一个通用循环周期。其后不久仙童公司又推出面向计算器、电视机的专用标准构件,标志着IC产品进入第一个专用循环周期。20世纪 70年代Intel公司开发成功微处理器芯片,使IC产品上升到一个新的通用循环。20世纪80年代设计工具的发展推动了一个产品满足一个用户要求的专用集成电路(ASIC)的发展,使IC产品进入高一级的专用循环。20世纪90年代初,又发展出了可编程门阵列(FPGA),用户可进行软编程反复改变硬件功能,又进行新一轮的准通用循环。随着ASIC技术的积累,IC开始向片上系统(SoC)发展,SoC实质上是更高一级的专用系统。随着通用-专用模式的交替发展,硬件软件的界限开始模糊起来,IC设计进入了基于可重用知识产权(IP)库的设计阶段。

IC发展历史已表明,通用CPU是IC技术发展的源头。从几年前开始,最先进的IC制造工艺首先在通用CPU上使用(过去曾经是DRAM)。如果我们不敢碰通用CPU,就只能永远跟着别人走。在2000年计算所酝酿研制CPU时,我们曾反复讨论过是买MIPS或ARM CPU核,针对某个应用做点外围电路,还是自己做一个有自主知识产权的MIPS CPU核或类似ARM的CPU核。我们的结论是没有自己CPU核的芯片产业就如同没有CPU的PC产业一样,而研制通用CPU是形成有市场竞争力的CPU 核的重要途径。因为一个好的CPU核必须经过多种应用的考验,单独为汽车控制等应用做一个较专用的CPU难以扩充成较通用的CPU核。

从网络信息安全的角度出发,我国也需要有自己的通用服务器CPU。服务器相当于电网中的发电站,一旦服务器受到攻击,将会造成大范围的网络瘫痪。服务器的用量少于终端(美国服务器的销售额约为PC机的1/3),但服务器CPU作为涉及国家政治、经济、信息安全的核心技术一定要掌握在自己手里。在龙芯CPU研制时,从硬件设计上采用了防止缓冲区溢出攻击的新技术,可以防止大多数黑客和病毒攻击(即使软件有漏洞也能防攻击),并申请了10项发明专利。龙芯一号流片成功后,曙光公司很快就推出了基于龙芯一号的龙腾服务器,尽管其性能只相当于四五年前的PC服务器,但其与众不同的高安全性对政府、金融、国防等部门用户会有吸引力。

通过以上分析,我们的结论是我们应重点发展量大面广的芯片设计,即较通用的嵌入式芯片,同时要重视高安全性的服务器CPU芯片设计。形成较通用的嵌入式CPU核的一条可行途径是从设计通用CPU入手。通过应用实践再适当裁剪通用CPU比从专用CPU开始不断扩充更合理。虽然国内对低端微控制器芯片仍有一定需求,但从海关统计数字来看,不论是CMOS芯片还是其他数字集成电路,大多数进口芯片是0.25微米以下工艺生产的芯片。是否在落后工艺下生产量小面窄的嵌入式芯片应由企业自己判断决定,国家不能采取只要是嵌入式芯片就支持的短视政策。

龙芯一号CPU研制体现了我们制定的发展战略,一个多月来十多种应用轻松移植,表明龙芯CPU既是一种较通用嵌入式芯片(功耗小于0.5W)可用于网卡网关、网络终端计算机(NC)等,同时也是高安全性的服务器芯片,可用于网络服务等。明年一季度,基于龙芯一号的SoC芯片将问世,更适合于做NC和网络设备。

剩下的一个问题是我们究竟做不做与Intel兼容并与之竞争的通用CPU芯片。我们的意见是暂时不做。我国舆论界有一种误导使许多老百姓认为“信息技术主要是PC机,PC的核心技术是P3、P4芯片,芯片的高技术是高主频。”实际上PC用的CPU只占微处理器数量的1%左右,但销售收入有200多亿美元,占全球1500多亿美元IC总收入的15%左右(有机构统计,PC用IC占IC总市场的30~40%)。PC芯片的高收入高利润是多年来Wintel 联盟的“功绩”,我们暂时不具备实力与Intel比高低。在未来的发展中,各种Internet Appliance(所谓IA产品)增长势头明显大于PC,据IDC公司预测2002年IA产品销售数量将达到1.8亿台,超过PC机销售数量。PC机本身也在变化,用户未必希望PC机主频3G、4G这样升上去。因此我们不能固守“通用CPU=P4”这种思维模式。

三、兼容与另起炉灶

龙芯一号启动时,最重要的决定是要不要与国外主流系统兼容,如果要兼容与哪一家兼容?有人认为选择芯片指令系统是一个政治问题,是受不受制于人的问题。我们则认为,在全球经济一体化的形势下,我们要抛弃所谓“完全自主知识产权”的旧观念,世界上几乎所有芯片公司的产品都是“你中有我,我中有你 ”,连Intel公司都要买别人的IP,为什么刚刚起步的中国IC设计产业就必须全用自己的IP?兼容不兼容完全是市场行为,是我们根据推广龙芯CPU的市场需要决定的。应当说作出必须兼容的决定在很大程度上受到曙光服务器成长过程的启发。曙光一号服务器和曙光1000大规模并行机开始走的是一条不完全兼容的路,我们在AT&T Unix和Mach OS基础上分别研制了自己的并行操作系统。尽管符合POSIX标准,有自主知识产权,可以得国家最高的科技成果奖励,但数据库厂商和第三方应用软件厂商不愿意花功夫为曙光机移植软件,曙光机只能卖给自己有源程序的用户,市场上成千上万种应用软件用不上。冷酷的事实教育了我们,为了充分发挥后发优势,利用已有的巨大软件资源,与主流系统完全兼容是迅速扩大市场份额的良策。我们相信推广龙芯CPU将会遇到与曙光服务器同样的问题,因此毫不犹豫地选择了兼容道路。

经过对X86、PowerPC、MIPS、SPARC等多种指令系统的仔细分析,我们最终选择了MIPS指令系统、在这一选择中,唐志敏研究员起了关键作用。唐志敏研究员是计算所年轻的博士导师、863计划计算机主题专家组成员,也是龙芯CPU课题负责人。他在体系结构方面造诣颇深,对各种RISC指令系统做过深入分析后,认为选用比Alpha功能强又比PowerPC简单的MIPS指令系统具有较好的可行性。选择MIPS指令系统的更重要的原因是出于市场考虑。MIPS公司不同于Intel、SUN和IBM,它不是IDM公司,自己并不生产销售芯片,而是以卖License和服务为营业范围,它不但不像Intel公司那样反对别人做兼容芯片,而是支持其他厂家做MIPS兼容芯片。世界上许多大公司,如生产路由器的CISCO、生产游戏机的SONY等都采用MIPS指令系统。MIPS芯片不仅用于SGI公司的高档工作站与服务器,而且是主流的高档嵌入式CPU,每年MIPS芯片销售量超过7000万片。市面上已有大量MIPS应用软件,龙芯一号流片成功后许多整机厂商一小时内就装上了应用软件,充分证明我们的决策是正确的。

与兼容策略相关还有一件大家十分关心的事,那就是如何避开专利。国内有些专家认为芯片设计专利是我们难以逾越的障碍,我们有些决策者也对此忧心忡忡。专利的确是我们必须高度重视的技术障碍,但也不能把专利看成拦路虎,长他人志气,灭自己威风。我们在研制龙芯一号过程中查阅了所有有关专利,我们发现指令系统本身不是专利,而且几乎没有一项概念性的专利,例如Cache技术、多发射技术等,所有专利几乎都与具体实现技术有关。我们设计CPU是先通过译码器变成自己定义的统一中间代码,所有的功能部件执行中间代码,与原来的指令系统无关。所以对我们而言,回避专利与采用什么指令系统没有关系。我们在设计中没有侵犯任何专利而且自己申请了十余项发明专利。今后做全定制设计,除了我们自己设计一些关键的宏单元外,一定会购买一些IP使用权,包括一些专利使用权。在IC设计中这是十分正常的。今后我们自己的专利与IP越来越多,通过Cross Licencing共享互用IP和专利是必由之路。与计算机产生一样,IC产业的横向分工越来越明显,IP(包括专利)将是IC设计厂商的主要产品,我们要学会如何买卖IP不要谈“专利”色变,作茧自缚。

还有一种看法是认为采用别人的指令系统说明没本事,还不掌握CPU核心技术,不如另起炉灶自己定义指令系统的单位水平高。实际上学过计算机原理与系统结构课的人都知道,自己定义一套指令系统并不是难事。40多年前,计算所就开始自己定义指令系统,几十年来计算所研制的十几种计算机都是自己定义指令系统。一个好的指令系统要经过大量应用反复考验修改才能成为市场接受的主流系统。如同大家用C、VB、JAVA编程序,没有人强调非要自己定义一种语言编程一样,研制CPU的水平并不在于是不是自己定义指令系统,谁能占领市场才是真本事。

四、IC设计的科研与产业化

龙芯一号研制成功后,马上面临研制更高性能的龙芯2号与尽快将龙芯一号产业化的矛盾,这与当时研制曙光机的情形十分类似。我们决不能只以不断研制出新的CPU为目标,置产业化于不顾。在科研人员中要树立一个观念,龙芯一号卖不出去,研制出龙芯2号也没有多大意义。计算所的科研人员已做了计划,全力配合神州龙芯公司打开市场,龙芯1.1、龙芯1.2两款SoC产品的优先级放在龙芯2前面。神州龙芯公司也在大力开拓龙芯CPU的应用,争取较多的定单。我们的体会是在研制龙芯CPU时,为国分忧的激情是一股强大的动力,胡伟武研究员几篇关于龙芯研制过程的文章催人泪下,表明年轻一代科研人员像两弹一星研制人员一样有着高尚的爱国情操和顽强的拼搏精神,计算所有这样一批又红又专的人才才能做出让人眼睛一亮的成果。如果我们一味等待国外的高手回来才开始研制,恐怕今天龙芯CPU还只存在于希望之中。另一方面,根据我们推广曙光机的经验,我们不能把产业化的希望寄托在用户的爱国热情中。CPU虽然是涉及国家安全的特殊产品,但卖产品就是卖产品,不能加上过多政治色彩,必须靠产品本身的可靠性、高性价比和出色的服务取得用户的信任。从某种意义讲,推广龙芯CPU是比研制CPU更艰苦的一场战斗。较通用的嵌入式CPU的用途很广泛,不一定非要性能超过P4才能卖得动,266M 0.5W功耗的MIPS兼容CPU芯片一定有它对应的广阔市场。国家在开始推广国产CPU时做一些扶植是必要的,但关键在自己努力。我们有信心比推广曙光机做得更好,让国产CPU尽快在市场上占有一席之地。

(4个打分, 平均:4.25 / 5)

龙芯CPU(5)–再说我们的CPU

 【编者注:这篇文章是胡伟武在2001年在发表第一篇文章《我们的CPU》后,对网络上许多讨论的答复和一些感想与解释。事情也都是在龙芯1号流片之前。】

没想到《我们的CPU》在网友中引起了一些讨论。我写这篇文章的本意之一是怕一些新闻机构报道时说得不够准确而挨同学或网友的骂,自己把这个事情说清楚挨的骂会少一点。现在看来,这个目标至少部分地达到了。但我没有想到大家对我们自己的CPU如此热心,使我觉得我们不是在孤军奋战,增加了信心。我对网友意见的重视不亚于对鉴定委员会意见的重视,专门让一些学生收集这些意见并进行分类,并在组内告戒对于网友的意见,”有则改之,无则加勉”。因为好多网友是真正在第一线工作的人,是真正把握国际前沿的人。鉴定委员会的意见也很重要,一者他们都是国内专家,二者没有他们的支持,我们都会饿死。这就好比我们写文章得有人审稿一样。

我说过,我们现在做的工作不多,实在不值得写太多的东西来宣传或挨骂后进行解释。但从网友的讨论中,我得到很多启发(很多网友提了很多很好的建议),我想到可以利用网友的智慧一起来推动这个事情。

不管对我们的工作支持的也好,反对的也好,有两点是一致的。一是对我们自己的CPU非常关心,二是对中国科技界目前的浮躁现象深恶痛绝(这其实很难怪科技工作者,这是从上到下全国的风气)。

对于那些对我们的工作加以鼓励的人,我要深深地感谢。看得出来,有不少是行家,功底很深厚。我们一定会继续努力,争取早日投片成功。有些网友提了很好的建议(包括不少技术上的建议),我们会用在我们下一步的工作中。有些网友表示,只要我们投片成功,达到PII的水平,他们愿意用PIV的价钱来买我们机器。对他们除了感谢外还有致敬,我把他们看作我们的朋友。并请他们不要食言,因为我是玩真的。

有一位网友提了很好的建议,让我们开放我们的设计,这个主意很好。只要所里不反对,我肯定开放源代码,至少是C模拟器的源代码,请大家一起帮我们做设计。当然,开放之前,还要加一些东西,因为我写程序没有注解。

有不少网友提到这个和美国研究生的”大作业”有什么区别。这个区别是很大的。想一想,有没有美国的高校把一个双精度、全流水、符合IEEE 754标准的浮点运算部件作为一个”大作业”让学生做,而这只是我们十几个模块中的一个模块(当然是较大的一个)。顺便提一下,我们的浮点运算部件用的算法比较新,是九十年代末提出的。我可以给大家提供一个C程序,用这个程序在PIV的机器上能测出它不符合IEEE 754的地方(这究竟是处理器的问题还是程序或者编译的问题也欢迎行家分析),而在我们的机器上测不出来。另外,说到大作业,我们现在也正准备开一些这方面的课,让我们的博士生做一些大作业,其中一项就是做一个实现MIPS I的指令系统的CPU,或者写一个完整的嵌入式操作系统。其实我在文章中提到我在科大本科论文做8086就是想传递这样一个信息,做CPU设计并不难,本科生就能做,难的是要做好。如果真的是一个大作业,用得着我领着几十个人干吗?至少我的科大8611的同学和以前对我做的软件DSM系统JIAJIA有所了解的同行知道我不是白痴。我的课题组中高手很多,不少是能独当一面的,其中有对Linux内核非常熟悉的,也有工程经验非常丰富的。

关于媒体的报道中关于我们CPU的评价,不管别人怎么说,自己觉得在通用CPU设计方面处于国内领先,和在动态流水线设计上达到国际先进水平还是比较确切的。如果我已经做了多发射和对CACHE作了改进,我还敢说在通用处理器设计方面达到国际先进水平。在动态流水线方面(针对我们的结构)可以说已经接近一个极至,很难再有很大的提高。动态流水线的核心是要解决各种相关,如数据相关、控制相关、例外相关等。做到后来,我们的结构有点象数据驱动或事件驱动,即译码或发射时只是在指令中建立互相的相关关系,并不解决相关,指令到达最后关头才等待(再多走一拍就会出错了)所需的数据或事件,一旦该指令所等待的数据或条件准备好,马上继续前进。至于其中的创新,结构上的大创新是没有的,但具体实现上的一些技巧还是有的,有几点我自己非常得意。记得 Henessy(还是Patterson?)曾经说过,把90年以后所有关于Architecture方面的文章都烧掉,对Architecture的研究没有任何损失。其实,如果大家仔细分析分析一些通用CPU的结构,如Alpha, MIPS, PowerPC, PIV等,发现确实是大同小异,取舍不同而已。我这样说是因为我们最近已经对这些处理器的结构做了较详细的分析和比较。

有些网友对我们的设计在技术上提出了不少建议,尤其是关于CACHE的重要性。关于CACHE,我们是非常重视的,因为我在做DSM时用过除了Alpha工作站以外的几乎所有厂家的计算机,对CACHE对性能的影响是有深刻体会的。在我们投片时容量肯定会增加,组织方式也许会做到二路组相联。不过,CACHE设计是很复杂的,尤其是做non-blocking的CACHE设计更复杂,我们现在最关键的是要投片成功,所以为了保持控制简单我们在CACHE方面不会太 aggressive,好多优化方法可能在目前的阶段不会用。例如,为了做2路组相联,连线会增加很多,而在深亚微米的工艺中连线复杂性和延迟是最主要的。我们目前关于CACHE的预研正在进行,也有一些新的想法。关于多发射,我想以后做到双发射就行了,因为RISC结构现在越来越复杂,做到4发射已经有点违背RISC提出时的初衷。为了提高性能,超流水、多线程、片内SMP等技术倒是我较看好的,上次我提到过,希望做几十个CPU的大SMP结点。当然有好多关键技术没有解决。我对Deleware大学高光荣教授的EARTH技术比较感兴趣(这几天高老师正好在计算所跟我们交流)。自己作了这么多年并行处理,希望以后用户不用并行编程就能用并行机。如果大家觉得上述技术思路有问题,欢迎大家讨论,因为这种决策对于我们是至关重要的。

至于有些人担心我们自己虽然能做设计但生产不了。我想说的是中国目前最缺的是设计,国内最近化了很多钱组建了或正在建不少生产线,0.35, 0.25, 0.18的都有,关键是没东西可以生产。的确,以前是由于生产不了而导致设计队伍垮掉,但现在不同了。此外,ASIC设计很见工夫,象Alpha 21264在0.35的工艺上能做到600多MHz的主频,我看我们最多能做到200MHz就很不错了,这些东西的确是需要积累的。

对于有些觉得凡是中国人做的事情就”[censored]“, 觉得自己的同胞肯定不如洋人,或没有仔细读我的文章就恶意攻击并以此为乐的人,用先人的两句诗奉送:”汉人学得胡儿语,便向墙头骂汉人”。但如果他们能够做到如下两件事情之一,我愿意在我们够得到的所有BBS上向他们道歉,并承担一切费用请他们回来向他们请教。第一件是在两个月之内单独完成一个单双精度、全流水、符合IEEE 754标准的浮点部件的逻辑设计,要求完成除了除法、开方以外的MIPS III指令系统的所有浮点运算。第二件是在我们的处理器中有四条MIPS的地址不对齐的访存指令(LWL,LWR,SWL,SWR)没有实现,处理器碰到它们时产生一个保留指令例外并由操作系统软件模拟,要求一周之内修改LINUX内核完成这一功能。第二件事情做起来并不难,但得知道修改LINUX的什么部分,以及当模拟的指令是转移指令的延迟槽指令时的特殊处理,还要保证核心态发生的保留指令例外处理不影响系统的稳定,此外,由于例外处理是在核心态,要注意别留下安全隐患,使非法用户有机可乘。如果把我们的GodSon比喻成在美国的一个学期的大作业,那么上面的两件事应该在一个星期之内完成.

阅读全文»

(1个打分, 平均:5.00 / 5)

龙芯CPU(4)–我们的CPU

【编者注:这篇文章其实是从时间的前后顺序而言是胡伟武关于龙芯CPU的第一篇文章,发表者龙芯1号流片之前的2001年。】

我们的CPU
胡伟武,2001年

我参与计算所的CPU开发项目,源于2000年10月一个偶然的机缘。10月中旬,所领导派我到我的母校中国科技大学去进行招生宣传。这是我 1991年毕业后第一次回到母校。我回到了我原来工作过的实验室,十年前在那里,我曾经和另外一个同学一起做过一个与8086指令级兼容的处理器作为本科毕业设计。这是一个用400多个74LS系列的芯片搭起来的电路,能够运行8086指令系统中除了十进制和除法指令以外的所有指令。由于没有制版的费用,所有的连线都是手工焊的。这次回去,我看到了我原来做的机器还静静地躺在那里。面对与十年前一样凌乱的实验室和满桌触手可及的芯片、电容、电阻、电烙铁,我有一种重操旧业的冲动,因为十年前那些没日没夜地与逻辑门、触发器、译码器、选择器玩命的日子有一种深深的诱惑,至今我还可以如数家珍地说出好多当前我用过的集成电路芯片的引脚定义。我想到了我们所正在筹备的CPU设计项目,于是我给我的师兄唐志敏打电话,他是计算所系统结构室的室主任,目前正负责计算所CPU设计项目的准备工作。我开玩笑说一、二年之内不把通用操作系统boot起来,提头来见。于是回计算所后,我就开始考虑CPU的指令系统和流水线等问题。

2001年8月19日,前苏联解体的十周年纪念日,我们设计的Godson CPU成功地把LINUX操作系统boot起来。当 “login:” 的提示符出现在屏幕上时,计算所北楼309房间一片欢呼。到9月中旬,一个用我们自己设计的CPU的完整计算机系统已经浮出水面,该系统运行完整的LINUX操作系统, 内核版本为2.4,可以做其他运行LINUX操作系统的计算机所支持的一切事情,包括运行gcc编译器,X- window视窗系统,WEB服务器,SPEC CPU2000基准程序等。我们最引以为豪的还是该CPU的系统结构设计。可以说目前世界上最先进CPU 的系统结构技术,该有的Godson都有,不少地方还有创新。虽然目前我们只是基于FPGA的设计,主频也不高,但当我们的CPU运行到12.5MHz 时,其性能已经不比50MHz主频的Intel 486差(当然, 我们的主板比486主板要好),确切地说,浮点性能比486强一点,定点性能比486 差。值得一提的是,当我们用一个叫“偏执狂(Paranoia)”的测试程序测试CPU的浮点部件是否符合IEEE 754标准时,奔IV处理器测出了浮点不严格符合IEEE 754标准而我们的CPU完全符合标准。此外,在Godson中还专门针对网络攻击进行了安全设计,可以有效防止利用缓冲区溢出技术进行的攻击。

应该指出的是,我们只是完成了一个CPU的逻辑设计,目前是用FPGA对这个逻辑设计进行验证,只是一个阶段性成果,还没有进行投片。用李所长的话说,“三分之二的工作还在后面”。如果我们对目前的工作沾沾自喜,那是很肤浅的。但即使是这个成果的取得,也来之不易。个中滋味,酸甜苦辣俱全,很难为外人所体会。回顾我们开发Godson处理器的过程,虽然不长,但有教训,也有经验,总结一下,对以后的工作是有好处的。

我们做CPU设计缘起于所长李国杰院士的直接推动。李老师是我接触过的院士中比较钦佩的一个,因为他能够站在如何发展整个国家的信息产业的角度来考虑问题,而不是一个局部的角度。现在我慢慢知道,他推动我们所做CPU设计是很不容易的。也许是由于前几年计算所的反复折腾给人留下了不好的印象,使得很多人觉得计算所没有能力做CPU,李老师最后只能把CPU设计作为一个计算所的所内项目先做起来。我在计算所连读书带工作十来年,也是第一次体验到不用立项申请而直接开始做一个课题。CPU设计技术是核心技术,但市场壁垒很高,即使现在已经投片出来很好的CPU,如果没有人用就会走入以前“鉴定会就是追悼会”的怪圈。但我相信李老师在信息产业界的经验和影响力,所以决心做下去。

我的师兄唐志敏是系统结构室的室主任,他把握着整项工作的大局,领导整个CPU设计的总体规划。他的大度和谦和能够把一批非常能干的年轻人团结在一起,使大家互相之间从无猜忌。现在在科技界有一种奇怪的现象,就是一个年轻人作出一些成果之后,就喜欢独立门户,结果造成了科研力量分散,干不成大事的局面。大家都在沾沾自喜地干一些几十万或顶多是上百万的项目,形成不了很大的力量。在我们的项目组中,却有一批本身也很厉害,能够独挑一摊的年轻人紧紧地团结在一起,同心协力干一件事情,一个重要的原因是唐志敏是一个能够容人的领导。举一个简单的例子,在所里后来立的一个CPU设计的项目中,我是项目负责人,但包括项目申请书、每月一次的课题进展状况及支出情况表、以及鉴定会材料等,我一个字也没有写过,全是唐志敏代劳,使我有90%以上的时间能够用在编程和逻辑设计。这只是一件小事,但我在计算所十来年,见了不少下属帮领导写报告的事,却从未见过领导帮下属写报告的。唐志敏在全局的把握和总体规划上也是有独到的见解,至少是我所不能及的。关于我们未来CPU的用途,我的主张是自己做高性能工作站,但做出来干什么以及如何与别人竞争却难说,唐志敏却非常有数,他说现在我们所的软件室正在做电子政务,以后结合在一起做,至少在安全方面是国外产品无法竞争的。我当时觉得这种眼光真是“高瞻远瞩、高屋建瓴”。

张志敏老师在我们的CPU设计中负责工程管理,他是李所长请来的客座研究员。根据我们自己的分工,在我们设计CPU的队伍中,唐志敏是总负责,我负责设计,张老师负责工程管理。张老师是责任心非常强的人,很义气,工程经验非常丰富。我最佩服张老师的有两点,一是他把个人利益看得很轻,他放弃了原来工资更高的工作到我们这里来做这个事情;二是他做事情很实在、很专一。我有一个观点,一个人一辈子做好一件事情都不容易,因此比较讨厌一些一会儿这边,一会而那边,想两边都得好处的人。但张老师不是这样的人,他做事情很实在。在我们基本完成Godson的逻辑设计后,需要一个模拟主板的环境,以便在逻辑设计上通过软件模拟启动LINUX。我觉得这个事情很难,但张老师加班加点一两个星期就写出来了。我和张老师配合得非常好,简直是最佳搭档。他工程经验很丰富,我理论上强一点;做事情他比较稳重,我比较偏激。在每周一上午的例会上,我布置完本周的工作后,总要慷慨激昂地动员一番,张老师总是要摆一些困难泼泼冷水,真是一张一弛。以致于有一次他不泼冷水了,大家都不习惯。

阅读全文»

(没有打分)

龙芯CPU(3)–关于龙芯2号的一些说明

【编者注:我曾经详细收集了中国龙芯CPU的许多资料,现开始做一些整理并发布于此。总体而言,龙芯对中国信息技术的发展战略很重要。用李国杰院 士的话讲,做龙芯是一个国家战略行为,而非一个单纯的技术 和(或)商业动作。我深以为然。当然,这并不代表编者和(或)弯曲评论全部同意胡伟武的技术或者其他的观点】
关于龙芯2号的一些说明
胡伟武
2005.07.27

1. 龙芯的知识产权问题
计算所在设计龙芯处理器之初就非常重视知识产权问题。由于采用了部分MIPS指令系统中的指令,因此对MIPS公司的有关专利进行了深入的检索和分析。根据我们的检索和分析结果,到目前为止,龙芯处理器的所有设计,不存在对MIPS公司专利的侵权问题。与MIPS的知识产权纠纷最常见的是MIPS指令系统中的几条(32位模式为4条,64位模式为8条)访存地址不对齐(Unaligned Memory Access)的指令。MIPS公司为这几条指令的的实现方法在美国、日本、韩国、加拿大、澳大利亚申请了专利。而且以这几条专利为武器对MIPS公司的知识产权进行了正当的保护。过去就有美国公司由于这几条指令的陷入与MIPS公司的知识产权纠纷。但龙芯不存在对这几条指令的侵权问题。(1)到目前为止,在市场上销售的所有龙芯处理器和龙芯IP都没有实现这几条指令。(2) MIPS公司没有在中国申请与这几条指令有关的专利,因此尤其是在中国市场,不存在对这几条指令侵权的问题。

此外,MIPS公司申请与这几条指令的时间为1986年,美国专利法对该专利的保护期限是20年。MIPS还有其他一些专利,如关于媒体指令的专利以及关于大尾段(Big Endian)和小尾段(Little Endian)切换的专利。不过,这些专利一般不会有人去用。如龙芯2号中实现了完全自己定义的100条左右的媒体指令,只实现了小尾段的数据格式。值得指出的是,MIPS公司与计算所一直以来都在进行密切的联系,双方领导人已经进行多次友好的互访(其中包括计算所所长和MIPS的CEO)并进行了友好协商。MIPS公司希望计算所取得“MIPS兼容”的许可权,计算所也希望最后从MIPS公司取得与MIPS兼容的授权。取得授权的主要目的是:(1)实现上述几条指令并在全球范围内合法销售。(2)充分利用MIPS兼容的品牌优势。(3)取得MIPS许可权后,同时取得MIPS公司在设计、验证等方面的全面技术支持。为了避免不必要的麻烦,计算所希望借这个机会明确表示,以后计算所在描述龙芯2号处理器的指令系统时,不再用象“MIPS-like”或“类 MIPS”这种容易引起歧义的词语,将明确指明龙芯处理器使用“龙芯指令系统”。目前的龙芯指令系统主要由以下四个部分组成。(1)MIPS III指令集中不涉及MIPS专利的部分指令;(2)龙芯1号或龙芯2号自己独有的普通用户态指令,如乘累加指令(MIPS IV中定义了乘加指令,但龙芯2号没有采用)等;(3)部分与处理器结构紧密相关的核心态指令,如对Cache或TLB操作的指令(这些指令一般随结构的不同而不同,即使在MIPS的不同处理器中也是如此)以及在未来的龙芯3号中进行多核之间同步和通信的指令等;(4)龙芯独有的媒体指令。随着龙芯处理器的发展,龙芯指令系统还会进一步增加新指令。对于龙芯1号的产品手册,计算所和龙芯公司也将逐步更正。同时,计算所将继续和MIPS公司协商关于龙芯实现“MIPS兼容”的授权问题。如果最后龙芯取得MIPS的指令系统授权,计算所将进一步实现MIPS指令系统的其他有关指令,并在通过MIPS公司的完整技术测试和许可后,在龙芯指令系统的基础上,说明“MIPS兼容”。最近,部分国外媒体以危言耸听的语气,不负责任地指责龙芯存在侵权的可能,这种做法是极其不负责的。到目前为止,计算所没有从MIPS公司收到任何关于龙芯侵犯MIPS知识产权的通知。
2. 龙芯的“架构”问题
最近,美国In-Stat公司发表在《Microprocessor Report》发表了一篇论文,对龙芯2号进行了详细介绍。In-Stat公司的报告的主要依据是龙芯课题组发表在计算所主办的《Journal of Computer Science and Technology》2005年第2期上的一篇介绍龙芯2号结构设计的学术论文。In-Stat公司在该报告中明确指出,龙芯2号没有实现MIPS公司申请专利的那几条指令。此外,龙芯2号实现了自己定义的媒体指令,没有实现MIPS公司定义并申请专利的媒体指令。In-Stat公司的报告指出,由于龙芯2号只是没有实现MIPS公司申请专利的部分指令,因此龙芯2号的指令系统是95%与MIPS兼容的(95% MIPS Compatible)。因此,部分媒体很不负责任地说龙芯2号的架构与MIPS R10000有95%的相似之处,可能构成对MIPS的侵权。对龙芯的品牌和产业化造成了很坏的影响。从高层概念性的“架构”(专业名词为architecture或体系结构)的角度,目前所有的RISC处理器都是95%甚至以上类似的。例如现在全世界所有的处理器都采用冯诺依曼结构(好多人做研究想突破这个结构,做了几十年没有成功),从这个意义上来说,所有处理器是100%架构相同的。又如,在 RISC处理器中,从64位、四发射、有关功能部件的设置、有关队列(如发射队列,Reorder Buffer,访存队列)的设置、指令和数据Cache的设置这些方面来看,在这些概念性的“架构”方面,MIPS处理器、IBM的处理器、SUN的处理器、HP的处理器、DEC的处理器等等,都是95%以上类似的。打个比方来说,我们不能根据两套住房都是三室一厅,都有两个房间朝南就认为这两套住房 95%是一的。但从与实现相关的微体系结构(Microarchitecture)的角度,则不同的设计师各显神通。龙芯2号作为完全独立设计的处理器也是如此。例如,MIPS R10000是5-7级流水线,而龙芯2号是9级流水线;MIPS R10000的媒体指令与龙芯2号的媒体指令完全不同;MIPS R10000在发射指令时把指令分成定点指令、浮点指令、和访存指令三组,而龙芯2号在发射指令时把指令分成定点(包括访存)以及浮点两组;龙芯2号实现了可执行保护以防止黑客或病毒的缓冲区溢出攻击而MIPS R10000没有;MIPS R10000和龙芯2号的转移取消机制很不一样,等等。可以说,在涉及具体实现的微体系结构方面,龙芯2号和MIPS R10000很难找到相同的地方。这点,在In-Stat的报告中也进行了充分的阐述。在In-stat的报告中,对龙芯2号和MIPS R10000的一些结构参数进行了比较,得出龙芯2号在处理能力上与MIPS R10000类似甚至超过的结论。有些媒体就说龙芯2号的“架构”与MIPS R10000有95%类似,是很无知的、很不负责任的、很可笑的,其基本错误在于混淆了表示象指令系统、多发射、RISC这些概念的“架构”和表示具体实现的“架构”的关系。这种行为,使人误认为中国人自己没有能力设计自己的处理器,需要通过抄袭别人的结构来实现。事实上,到目前为止,运行(部分)MIPS指令的最高性能的处理器正是正在实现中的龙芯。值得指出的是,计算所很注意用知识产权的武器保护自己,在龙芯1号和龙芯2号的设计过程中,已经申请了20多条与龙芯处理器体系结构相关的专利。其中部分已经得到了授权。

3. 几点感受和希望
应该说In-stat公司给《Microprocessor Report》写的报告除了有点作为美国企业的危机感对龙芯2号的某些内容有一定程度的夸大以外,基本上还是比较客观的。他们站在美国的角度宣扬一下龙芯威胁论,是可以理解的,我已经看到过好几篇这样的文章。国但是国外有少数人,尤其是一些霸权主义者,杀了我们的同胞,烧了我们的圆明园,他们不觉得侵犯了中国人的权利;占领我们的钓鱼岛,他们不觉得侵犯了中国人的权利;最近在伦敦有一个中国元代的青花瓷罐拍卖了2.67亿元人民币的价钱,他们一边数钱一边乐,也不去问有没有侵犯中国的知识产权。我们做的东西稍微跟他们挨点边,他们就死了亲爹似地叫,自己当强盗,还要贼喊抓贼。不过我们也是不怕的,毛主席说得好,你打你的,我打我的。我就不信,共产党的天下,人民的政权,帝国主义们、霸权主义们(以及部分走狗们)能够颠倒黑白,翻得了天。可是我们自己不能跟着起哄,为着自己一时利益或逞一时之快,帮着贼喊抓贼,做一些亲者痛仇者快的事情。更不能一听洋鬼子说龙芯可能侵犯人家的知识产权的谣言,就如获至宝地跳出来信谣传谣。龙芯还是个孩子,需要大家来关心才能长大。我们做龙芯不容易,尤其是核心技术,产业链很长,虽然我们在技术上取得了一些突破,但真正要在市场上取得成功,还有很长的路要走。龙芯课题组很多人都每周工作七、八十个小时,常常连续一周不回家,春节也在实验室里过,再苦再累再烦也咬牙忍着,辛苦一年只能挣到自己的大学同学在国外一个月的工资,为的就是让中国拥有自己的核心技术,让中国的国家安全更有保障,让我们的孩子不再用八亿件衬衫换一架飞机。可以肯定的是,不管遇到多大的困难,计算所尤其是龙芯课题组都会一如既往地为龙芯的研发和产业化的最后胜利而努力拼搏奋斗。毛主席曾经说过,我们的同志,在困难的时候,要看到成绩,要看到希望。这句话我们是牢记在心的。不管是人为设置的还是工作中碰到的困难,我们将一如既往地克服;不管是多么强大的对手,我们将一如既往地战胜。我相信,凭着中华民族的伟大智慧,依靠全中国人民的努力,总有一天,我们的子孙后代能够让美国人拿8亿条牛仔裤来换我们的一架飞机。毛主席说过,中国人民已经站起来了,是不好惹的;惹翻了,是不好办的。最后,我要请求媒体的朋友和网友,多多支持龙芯,对龙芯要多些宽容,不要跟着洋鬼子一起谩骂。以后见到类似的情况,转载或发表关于龙芯的新闻,首先想一想,会不会对龙芯有害,会不会对我们国家的自主创新有害。最好是跟我们沟通交流一下。谢谢。

(没有打分)

龙芯CPU(2)–我们的龙芯2号

【编者注:我曾经详细收集了中国龙芯CPU的许多资料,现开始做一些整理并发布于此。总体而言,龙芯对中国信息技术的发展战略很重要。用李国杰院士的话讲,做龙芯是一个国家战略行为,而非一个单纯的技术 和(或)商业动作。我深以为然。当然,这并不代表编者和(或)弯曲评论全部同意胡伟武的技术或者其他的观点】

【作者:胡伟武,中国科学院计算所,2003年11月】2003年10月16日深夜,喧嚣了一天的计算所北楼终于沉寂了下来,我独自坐在北楼105房间忐忑不安地等待着。刚才还有郑为民和一个学生跟我在一起,几分钟前我派他们到后面的芯片小楼取逻辑分析仪去了。与北楼隔着一个篮球场的芯片小楼里还有10来个课题组的弟兄,他们都象我一样忐忑不安地等待着。

17日凌晨0点30分,楼道里传来了有节奏的脚步声,在空旷而寂静的楼道里显得特别有力。脚步声越来越近,我的心一下子提了起来,咚咚的脚步声象敲在我的心上,因为我知道,我们的狗剩2号回来了。

105房间的门被推开,张珩风风火火地闯了进来,手里抱着一个方盒子。他是我专门派到上海去封装厂家取狗剩2号芯片回来测试的。我们小心翼翼地打开盒子,几十片狗剩2号芯片象等待检阅的士兵一样整齐地排列在专用的包装盒里。一个电话拨到芯片小楼,不到两分钟,105房间就聚集了六、七个人,他们都是下午刚刚成立的联调组的成员。

我挑了几个芯片,在用万用表对芯片进行一些简单的静态测试后,从中选了一个芯片放到子卡的插槽中盖好,并把子卡插到主板上。小心地按了一下电源开关,显示屏上没有动静,心里一阵紧张。试了几次后,换一个子卡,放上芯片后插到主板上,一按电源开关,显示屏一阵跳动,串串字符如约而至。我们一阵欢呼,刚才提到嗓子眼的心放回到心窝里先。

在启动了一个简单的BIOS系统以后,开始启动LINUX操作系统,一切都很顺利。1点10分,屏幕上出现了LINUX操作系统的登录提示符 “login:”。在拿到芯片的40分钟后,刚才等待时的紧张心情一扫而光。我们赶快打电话到芯片小楼告诉在那里等候的其他同学。钟石强还给我的妻子发了个短信,今晚她也在等待我们的消息。几分钟后狗剩2号收到了出世后的第一个祝福。

4点30分,狗剩2号通过了其他的测试。我们用装有狗剩2号的计算机在我们CPU组的内部BBS上灌了狗剩2号出世后的第一瓢水,并发了几封 EMAIL。我决定狗剩2号的第一次联调先告一段落,拿出放了很久的硅谷的一个朋友送的一瓶XO在芯片小楼的会议室里每人半纸杯庆祝了一下。喝完酒后大家兴致不减,根据事先的约定又打车到天安门广场看升国旗并去毛主席纪念堂向毛主席报告。今年是毛主席诞辰110周年,我们这款芯片的名字就叫MZD110。

6点25分,我们又一次站在天安门前的国旗杆下,看着红彤彤的国旗在国歌声中冉冉升起。去年在接受《东方之子》节目采访时,他们曾问我在狗剩1号研制成功后看升国旗时心里想什么,我那时真忘了想什么了。这次我试图去想一些有意义的事情,比如什么豪言壮语之类的。可是面对国旗,脑袋里一片空白,只是在国旗猛地串上杆顶的那一刹那,24小时前杨利伟走出神舟5号舱门冲大家挥手的画面突然出现在我脑海中,以至于在去前门吃早饭的路上这个画面还久久浮现在面前,挥之不去。

在2002年9月28日龙芯1号的发布会上,李国杰所长曾经引用《易经》中的话说:“万物生于有,有生于无”。如果说狗剩1号解决的是从0到1的问题的话,那么狗剩2号要解决的是从1到10的问题,即狗剩2号的性能至少是狗剩1号的10倍以上。事实上这也是我们在申请中科院知识创新工程重大项目和863计算机软硬件主题重点项目时唐志敏提的指标。在这两个项目厚厚的申请书和合同书中,我只记住了两个数字,一个是主频500MHz以上,一个 是SPEC CPU2000的值达到300分以上。从承担项目之日起,这两个数字就象两个紧箍咒一样紧紧地箍在我的头上(我一直认为这个项目是863项目中立得最成功的项目之一,只用 两个数字就把要做的事情表达得足够清楚了)。

从现在看来,主频500MHz以上还好办一些,下死工夫总是可以做到的,用0.13微米的工艺 更是容易做到。难的是SPEC CPU2000的分值达到300分以上。所谓SPEC CPU2000,就是一组国际公认的标准测试程序,用这组程序在目标机器上运行,根据实际运行时间算出该计 算机的运行速度指标。这种标准测试程序从SPEC CPU89、SPEC CPU92、SPEC CPU95、到 SPEC CPU2000已经发展了好几期。其中SPEC CPU2000覆盖的应用面最广,包括文件压缩、 FPGA布局布线、编译器、组合优化、国际象棋、文字处理、计算机视觉、编程语言、解释器、数据库、布局布线模拟器、量子动力学、浅水模型、三维势场求解、偏微分方程、三维图形库、计算流体动力学、图象识别/神经网络、地震波传播模拟、计算化学、数论/素数测试等等,光源代码就有上百万行。打分的标准是把这组程序在Sun公司一台300MHz的四发射Untra Sparc II 上运行的时间做为标准运行时间,其分值为100分,其它机器运行时间跟标准时间相比算出相应的分值。一般来说,现在较流行的四发射的主流RISC处理器象 Alpha 21264、MIPS R12000、IBM Power III等在400MHz到500MHz的情况下SPEC CPU2000的分值可以达到300分左右,而Pentium III在800MHz时SPEC CPU2000的浮点分值才200多分。狗剩2号要达到300分,至少要与1GHz以上的PIII或PIV的性能相当。因此,虽然做500MHz虽然也不容易,但更难的是SPEC CPU2000的分值达到300分以上。

提高处理器的性能,提高主频和优化软硬件结构不可偏废,光强调主频和光强调结构都是不行的。就象要把100根木头从A地扛到B地,甲每10分钟一个来回,每次扛1根木头;乙每20分钟一个来回,每次扛4根木头;丙60分钟一个来回,每次扛6根木头。我们不能根据甲跑得快(主频高)就说甲的性能最高,也不能根据丙每次扛得最多(每拍执行的指令多)就说丙的性能最高,性能是一个综合的东西。当然,还有其它要考虑的因素,如甲乙丙三人每小时的报酬(处理器的功耗、面积)等。虽然狗剩1号的成功对我们来说是一个巨大的进步,但有一件事我一直深引以为恨,那就是狗剩1号的性能没有达到预想的目标。

虽然主频不低,但跑起程序来比起类似结构的RISC处理器以及相同主频的PII还有一些差距。SPEC CPU2000的分值也不高。我曾经整日整夜地泡在机房运行各种测试程序,并试图通过软件优化的方法提高性能。虽然取得了一些效果,但不理想。后来的性能分析表明,有些狗剩1号性能瓶颈其实完全是可以通过简单的优化克服的,可惜当时项目推进得太快,没有时间做充分的性能分析和优化。这件事使我极其郁闷,因此把性能分析不够作为狗剩1号设计过程的一个重要教训,并发誓在狗剩2号的设计中要一血前耻。知耻近乎勇,后来狗剩2号步步为营的性能分析果真为狗剩2号提高性能发挥了巨大作用。在中科院领导对我们承担的龙芯2号重大项目进行立项审查的会上,李老师、唐志敏和我在向院党组汇报后准备离开时,江院长追出来跟李老师说:“李院士,我就把宝压在你身上了”。在863计算机软硬件主题专家对我们承担的龙芯2号项目进行立项审查的会上,我做完报告后,专家组组长怀进鹏老师曾声色俱厉地说:“胡伟武,这个项目是863计算机软硬件主题最大的项目,完不成任务提头来见!”这两件事给我很大的触动,让我想起上甘岭战役前夕彭德怀曾对秦基伟说:“我们要对朝鲜的历史负责”。

阅读全文»

(1个打分, 平均:5.00 / 5)

龙芯2F处理器GCC 4.4优化探秘

此文发于2008年10月。时至今日,龙芯平台上的n32环境开发有了令人兴奋的进展。目前,不但基于Debian5的n32(部分)优化版已经发布,更有了纯n32环境的Gentoo Linux。身边有朋友在用这个系统,他简单地评价说,以前在o32的Debian4上编译内核需要一两天,现在只要几个小时即可搞定。我计划在近期做新一次对后者的性能评测,将文中欠缺部分补齐,以飨读者。

再次感谢龙芯技术服务中心和开源社区的支持,没有他们的帮助绝不会有这篇评测报告。其实这次评测的运作方式让我很受启发,也许这才是媒体评测的一条出路。

原文发布于《计算机世界》

作为Linux平台下最常用的编译器,GCC提供了强大的编译能力和良好的平台通用性,其重要性不言而喻。编译优化是它的一大特点,除了可以对软件代码进行不同程度的分析优化外,GCC还可以根据处理器的结构特性在编译中对代码进行有针对性的编排组合,以更加高效地运行于目标平台。目前,处在最后测试阶段的GCC 4.4加入了针对龙芯处理器的编译优化支持,配套文档中也给出了详细的操作说明。针对这一改进,计算机世界实验室于近日进行了一次特别测试,重点研究GCC 4.4为龙芯平台软件环境带来的性能提升。

测试的软件环境基于3个在龙芯平台上比较常见的操作系统构建,分别是Debian、Gentoo与国产的Linux操作系统“憨牛”。前两者是在世界范围内得到广泛应用的Linux发行版,都拥有独立的软件包管理系统和海量的应用软件。它们的软件包管理模式存在差异,Debian为多种硬件架构提供了编译好的二进制包,为最大程度地保证兼容性,MIPS架构的二进制文件采用最基础的MIPS1指令集架构编译;Gentoo则提倡源代码发行的方式,安装软件时对下载的代码进行本地编译。利用上述特性,我们分别用Debian和Gentoo构建了针对MIPS1和针对龙芯2F、o32模式编译的测试环境。而“憨牛”是国内龙芯爱好者以LFS方式制作的纯64位发行版,我们用它作为龙芯2F、n64模式下的测试环境。这些系统都被安装在硬盘的不同分区中,并将内核统一指定为Server模式的2.6.26.5,编译参数采用“-march=loongson2f -mabi=n64 -O3”。为保证结果的一致性,我们选择截止到测试开始前的最新版本“GCC 4.4 snapshot 20080923”作为统一使用的编译器。如无特别标识,所有测试软件均使用“-O2”参数进行编译。

  为了让测试结果更具普遍性,本次测试的硬件平台也由开发板换成中科龙梦推出的福珑2F-6003迷你电脑。这款产品虽然只有普通光驱的大小,却内置了龙芯2F 800MHz处理器、DDR2-533 512MB 内存和80GB UltraATA 2.5英寸硬盘。板载的Realtek RTL8110SC网络控制器则提供了一个千兆以太网接口,为网络应用做好准备。这款产品配备了一个输出功率为40W的变压器,但在我们的测试中实测功耗从未超过15W。因为低功耗、低噪音等特性,很多用户都将福珑2F-6003当做不掉电的下载机或SOHO服务器使用。

理论性能测试

LMbench是一款历史悠久的性能评测工具,被广泛应用于UNIX/Linux环境下的系统性能评估。它包含了一系列测试程序,可以对不同层面、不同子系统进行专项测试。随着应用模式的变化,新版本的LMbench中也不断加入有针对性的测试程序,保持了评估模型的准确性。本次我们采用了LMbench最新的3.07a版,利用其中附带的lat_ops和par_ops两个程序,测试不同指令集版本、处理器类型及ABI模式下指令执行的相关性能,从而考察GCC 4.4对龙芯2F处理器的支持程度。作为对比,我们也将源代码编译为匹配MIPS1指令集与MIPS R4600处理器的版本进行了测试。前者是目前支持MIPS的Linux二进制发行版使用的编译模式,后者是中科龙梦在GCC 4.4发布前官方建议的优化设置。

  lat_ops的功能很简单,就是考察对不同变量类型执行操作所需的时间。可以看到,即使针对龙芯2F和R4600处理器进行优化,很多操作所需要的时间也与按MIPS1指令集架构编译后的成绩相差无几。变化主要发生在对64位整型变量的操作方面,测试程序针对龙芯2F与R4600编译后的运行速度普遍有所提高,各别测试结果发生了数量级上的变化。在对64位整型变量进行整数除法与取余数操作时,n32与n64模式下执行速度提高4倍,体现了不同ABI的差异。基本可以认为,对于lat_ops所测试的指令,GCC 4.4针对龙芯2F和R4600处理器进行编译的效果相仿,二者均略优于MIPS1。

  与lat_ops相比,par_ops更像是一个进阶测试。通过对前者的修改与扩展,par_ops着力于体现处理器在指令层面的并行处理能力。它使用了一些类似教科书上讲述并行计算时采用的示范代码,只要处理器与编译器支持,就可以以并行方式同步执行,其结果反应了每指令周期不同操作达到的并行度。这部分的测试结果比较混乱,除了一些并行度相同的操作外,很难在其他项目中寻找一个线形的变化规律。纵向的比较反而更容易说明问题,o32模式和针对MIPS1指令集架构编译的代码并行度相对较低,n32模式下针对R4600处理器编译的代码则在很多操作中拥有最高的并行度。GCC 4.4对龙芯2F处理器的优化能力似乎还有提升的空间,虽然n64模式下针对龙芯2F编译的代码执行并行度最高,但在o32和n32模式下,对浮点型变量的操作并行度与R4600还有明显差距。

总体来说,在指令层面,使用GCC 4.4针对龙芯2F进行优化编译的效果还是比较明显的,这一点在64位环境下尤为突出。我们还使用-O2与-O3参数分别编译了针对龙芯2F、n32模式优化的代码,考察两者之间的性能差异。也许是测试程序的代码太过简单,lat_ops与par_ops靠进一步优化获得的性能提升与编译增加的时间绝不成正比。

实际应用测试

接下来进行的实际应用性能测试相信更让人感兴趣。根据现有测试条件,我们选取了一些比较常见的应用作为测试项目,并将它们归纳为桌面与网络两大类。桌面部分包括病毒检测、压缩打包和音频编码三种应用,考量指标是完成任务需要的时间;网络部分则通过在不同系统环境下构建完整的LAMP(Linux/Apache/MySQL/PHP)服务,使用思博伦通信的Avalanche 2500应用层性能测试仪考察不同测试用例的每秒最大新建事务数。

  病毒检测软件选用的是比较著名的ClamAV,引擎与特征库统一为测试当天的最新版本。测试用例是一个保存Windows系统下绿色软件的文件夹,内含52个子文件夹,共816个文件,大小为121MB。为加大负载,我们还将此文件夹在Windows下用WinRAR压缩为61.4MB大小的Zip格式文件,执行病毒检测时多了动态解压缩的步骤。从测试结果可以看出,针对龙芯2F、o32模式编译的代码与针对MIPS1指令集架构编译的代码执行效率相仿,后者的综合成绩还略好些;n64模式下的病毒检测速度相对较慢,看来ClamAV涉及到的计算模型并不能从纯64位环境中获益。

压缩打包测试直接利用了上面的测试用例。我们在bash下通过tar调用gzip,将文件夹打包成一个文件,并记录任务完成所用的时间。在这一环节,64位环境同样没有给应用带来性能提升。针对龙芯2F、o32模式编译的代码执行速度最快,领先MIPS1编译版本十几个百分点,应当是指令集与指令调度方面的原因。

音频编码的性能差异是实验室工程师最感兴趣的地方。根据以往的测试经验,这也是最能体现架构与指令集进步的部分。除了运算单元的改进,SIMD指令也有可能显著提高编码性能,但这一切都要通过优秀的编译器和适当的算法(代码)联合实现。本次测试我们采用的是著名的MP3编码软件LAME,目标对象是一个131MB大小、16位/44.1KHz的WAV文件,编码参数均为默认设置。可以看到,GCC 4.4针对龙芯2F的编译优化首次起到决定性的作用,即便最慢的o32模式的执行速度也比针对MIPS1指令集机构编译的代码快近50%。为弄清性能提升的主要原因,我们特别编译了一个版本进行对比:针对R4600处理器、n32模式编译的LAME完成编码工作共耗时252秒,看来性能提升的主要原因是使用了MIPS3指令集;而与龙芯2F、n32模式下超过1/10的性能差异,则可能源于不同的指令调度模型和SIMD指令。通过这项测试,我们推断音、视频编解码软件是最值得通过编译优化的一类程序,它们的性能很可能从GCC 4.4中得到质的提升。

  为保持评估标准的一致性,我们在网络应用性能测试中沿用了先前的测试方法与测试用例。从结果来看,64位系统环境终于带来了性能提升,各项测试成绩均为第一。针对MIPS1指令集架构编译的LAMP环境表现也令人惊讶,在涉及动态页面解析的测试项中达到了与龙芯2F、n64模式相同的性能。同样是o32,针对龙芯2F编译的LAMP环境则有些令人失望,其表现出来的性能在本次测试中垫底。

从静态页面的测试结果中可以看出,针对龙芯2F、o32与MIPS1编译的两组环境成绩近乎一致,而针对龙芯2F、n64模式编译的环境性能高出一筹,说明前两者的瓶颈在于o32这种ABI而非内核或编译Apache时指定的指令集。当测试用例转向复杂的动态页面,所有平台都无法突破11/9/43这一成绩,也许这就是处理器的极限?我们测试过的龙芯2F开发板配备了与福珑2F-6003相同的处理器和频率高出13%的内存,结果也只是静态页面处理能力得到小幅提高。

比起桌面应用,LAMP服务环境相对复杂的多,与内核的关联也更加紧密。这部分我们进行的颇为周折,起初因为各系统环境的内核抢占模式不统一,导致测试结果没有可比性,只能全部复测。不过,这也是第一次通过测试验证了内核几种抢占模式下的特征差异,为选择提供了依据。

  做网络应用时,使用Server参数编译的内核状态最为稳定,可以准确找到系统的最大新建事务数,再此基础上哪怕多一个连接请求都会导致访问失败,并且多次测试的复现率可以达到100%。使用Desktop参数编译的内核稳定性稍差,只能将最大新建事务数锁定在一个比较小的范围,且很难通过复测找到一个准确值。我们在这种内核搭配针对龙芯2F、n64模式编译的LAMP环境下,只能将静态页面的新建能力锁定在1200/1180±50这一区域。而使用Low-Latency Desktop参数编译的内核,在搭配针对龙芯2F、o32模式编译的LAMP环境下只能稳定取得一个1100/1050的成绩。如再增加连接请求,非但每一次测试结果都不相同,成功访问事物的响应时间也会出现较大抖动。看来,支持抢占模式的内核虽然大大提升了图形界面下操作的响应时间,却不太适合做网络应用。尤其像静态页面这种Web服务,事物模型简单却为数众多,负载高时抢占内核执行的空隙效果不大,还会带来不小的系统开销。另外,根据复测得到的结果,内核抢占模式的设定对之前在命令行下进行的单任务测试几乎没有影响。

因为本次测试缺少n32模式的系统环境(针对龙芯2F、n32模式编译的LAME采用静态连接),导致不能确定龙芯平台上最适合实际应用的编译参数,这一点殊为可惜。就目前情况看,我们选择的应用软件都或多或少地从针对龙芯2F处理器的编译中获益。依照惯例,GCC的版本由测试版变为正式版后,编译优化的性能还会有小幅提高,将在几个月内发布的GCC 4.4正式版值得重点关注。

网络应用与桌面应用往往在运算模型方面相差甚大,受ABI的影响自然也不相同。n64模式在网络应用和o32模式在桌面应用方面的表现值得肯定,但它们占据优势的应用又是彼此的弱势领域。相信每个人都会想到,如果能集合o32与n64的优势就好了。确实,我们也这样想,于是就对兼具n64与o32特性的n32模式又多了那么几分期待。

测试后记

这是一次艰苦的测试,我们遭遇了太多的困难。虽然大部分问题都在测试过程中被解决,但也有一些瓶颈始终无法突破,例如实际应用部分缺乏n32模式的测试成绩,就是最大的遗憾。事实上,在测试后期,我们对龙芯系统平台方面的关注度远远超越了GCC。我们暂时无法找到为龙芯打造的n32系统环境,就算采用LFS的方式制作一个测试专用版本,也绝非一件容易的事情。不过通过这次测试,工程师对目前龙芯平台上可运行的系统有了初步了解。他们各自有各自的特色,用户最好根据实际情况进行选择。

Debian是成熟度很高的Linux发行版,提供了对不同硬件平台的支持。通过强大的软件包管理系统,可以很方便地下载安装针对MIPS1指令集编译的二进制包,过程简单方便,适合普通用户选用。Gentoo的特点则是独具一格的源代码发行模式,操作者通过软件包管理系统下载软件的源代码,再在本地完成编译工作。虽然这比直接下载二进制代码多了一个步骤,但对用户来说是透明的,并没有增加操作难度。环境变量中编译参数的部分是关键,例如本次测试中参数设定为龙芯2F、o32,则最后得到二进制代码都是针对龙芯2F、o32模式编译的。这种方式有助于定制特殊的软件环境,比较适合进行开发或搭建以提供服务为目的的系统平台。不过,目前Debian和Gentoo都不算是正式支持龙芯平台的系统,只有用户群体达到一定规模,才有可能得到官方的支持。

福珑2F-6003预装的新华华镭操作系统倒是官方支持龙芯平台的Linux发行版,也是原本计划中MIPS1模式的测试平台。我们在安装ClamAV时遇到了很严重的问题:系统提示其依赖的其他软件包版本不符合要求,无法继续安装过程。也就是说,ClamAV在华镭的软件包管理系统中存在但不可用,是一个破损的软件包。相信类似的依赖关系问题还有不少,但维护人员和用户数量方面的原因导致问题很难被及时解决。

越来越清晰地感觉到,编译器之后,龙芯还剩最后一个关键问题亟待解决,那就是寻找一套功能完善、软件支持丰富、能很好地发挥硬件性能的系统环境。从测试结果看,针对MIPS1指令集编译的二进制代码显然不能很好地发挥龙芯的性能,工作在n64或n32模式下的系统才是未来的发展方向。新系统最好能够与Debian、Gentoo这样的发行版相融合,借助其规范体系与资源积累方面的优势,充分提高平台的易用性。这个工作单靠研发单位的力量是很难完成的,必须在初始阶段就与开源社区相结合,用较长一段时间,逐步构建完善一套适合龙芯平台的系统环境。在这个过程中,每个人既是开发者,也是系统的使用者。

龙芯的发展,开源社区的力量绝对是关键因素。在与Windows绝缘的情况下,开源社区在软件层面为龙芯提供了强大的支持,这是独一无二的宝贵资源。如果没有这部分支持,龙芯的前景会很难预料。此外,开源社区也孕育着市场机遇,大量的关注者使龙芯有了群众基础,无论是开发者还是使用者,都有可能成为潜在用户。反过来,开源社区通常也很希望得到来自厂商的支持,开发者可以借此机会少走很多弯路,大大加速项目进程。所以,建议有关部门尽可能多地开放龙芯相关资源,为社区工作提供帮助。

其实,有关龙芯的很多项目(例如上文提到操作系统的打造)都应融入开源社区,成为社区工作的一部分。与独自闷头苦干相比,通过社区看似松散实质紧密的交互式协作,所有人都将收获最大化的成果。本次评测就是一个很好的例子,如果没有来自开源社区的鼎力协助,您绝对不可能看到这么这篇评测报告。有些名字必须被提及:著名龙芯爱好者刘世伟、张乐与孙海勇分别为本次评测制作编译了不同版本的系统和软件,并对整个测试给予了全程技术支持,我们尤其要向他们表示感谢。

阅读全文»

(3个打分, 平均:2.33 / 5)

龙芯CPU(1)–我们的龙芯1号

编者注:我曾经详细收集了中国龙芯CPU的许多资料,现开始做一些整理并发布于此。总体而言,龙芯对中国信息技术的发展战略很重要。用李国杰院士的话讲,做龙芯是一个国家战略行为,而非一个单纯的技术 和(或)商业动作。我深以为然。当然,这并不代表编者和(或)弯曲评论全部同意胡伟武的技术或者其他的观点】

【作者:胡伟武,2002年9月】2002年8月10日清晨6点零8分,”login:”的字样如约而至地出现在用”龙芯-1″作CPU的计算机屏幕上。随着一阵欢呼从蚊子成群的中科院计算所北楼105房间传出,中国人结束了只能用洋人的CPU造计算机的历史。我抱着键盘,迫不及待地登录进去,用vi编辑龙芯-1产生的第一个文件,其中两段是这样写的。

The historical time of 6:08 on 2002.8.10 ends an era while begins a new one。The day in which we make computer with only foreign CPUs is gone with the wind of the morning of 2002.8.10。With tears and joys,we announce the successful running of LINUX (Kernel 2.4.17) with the Godson-1A CPU。

The great ecstasy at this moment makes all of our exhausting efforts of the past year be over paid。Though this is only a little step of a long march,it indicates the glorious future of our own CPU.

上述两段话,表达了我们对龙芯的良好祝愿和坚强信心。

如今,狗剩-1(还是这个名字叫起来比较顺口)已经连续稳定运行一个多月。在这一个多月中,运行了完整的LINUX操作系统(内核版本为2.4)、 gcc和f77编译器、X-window、浏览器、Apache Web服务器、防火墙软件、网关系统、mpeg播放器、基于LINUX的文本编辑工具Abiword、调试工具、SPEC CPU2000基准测试程序、用作NC的虚拟终端、以及VxWorks嵌入式操作系统等等。

本来以为狗剩-1的成功运行会稍微减轻一点过去半年多来令人难以喘气的压力。没想到喜悦过后是更大的期盼和压力。然而,在我们已经开始狗剩-2的设计的时候,回顾过去半年多所做的事情,总结一下经验和教训,对以后的工作无疑是有好处的。

应该说,从去年三、四月份唐志敏和我开始组建CPU设计的队伍并全力投入CPU的设计,到今年八月第一个完全自己设计的通用CPU在200多MHz 的主频下跑起来,这个速度还是不慢的。究其原因,除了全组弟兄玩命以外,正确的技术路线是成功的关键。用唐志敏的话说,就是”苦干加巧干”。

在我去年写的《我们的CPU》中,我曾经说过Godson设计的技术路线主要有三条。一是坚持高起点,从高性能通用处理器入手,走跨越式发展的技术路线。根据国外的成功经验,CPU的发展是”先高后低”,即先发展计算机中使用的高性能通用CPU芯片,突破其中的关键技术,在此基础上再发展嵌入式的应用。因此,在处理器设计上应以高性能通用CPU发展为龙头,通过高端通用CPU的发展来带动整个CPU产业的发展。具体实施时,在目前达到与国外相同主频的的客观条件不具备的情况下,应走通过优化处理器结构提高性能的道路,强调处理器中各个层次的并行性(包括指令级并行性、数据级并行性、以及线程级并行性)的开发以及软硬件的协同来提高性能。二是坚持兼容性设计,把兼容当作通用处理器的生命。不管别人怎么说,我坚定地认为不兼容设计是导致我国目前处理器设计技术落后的重要原因之一。由于现代计算机中软件开发费用已经大大超过硬件开发费用,因此兼容性设计是Godson的重要目标。三是在实现上坚持稳扎稳打、步步为营。在处理器设计中,越上层的设计,调试越容易; 而越底层的设计,调试越困难。因此在Godson-1的逻辑设计阶段,我们坚持稳扎稳打,从系统结构设计,到C模拟器设计、Verilog设计、以及 FPGA验证的每一步都经过反复的验证。

在上述技术路线指导下,我们在狗剩-1物理设计阶段的具体技术路线有两条,一是”以我为主”进行物理设计,二是坚持稳扎稳打。这是根据我们当时的处境提出的。

在去年10月我们基本完成狗剩-1的逻辑设计并在FPGA验证平台成功运行通用操作系统以后,有很多人关心我们如何进行狗剩-1的物理设计。不少人建议我们完成RTL设计后,在国内寻找兄弟单位完成后续设计。有人说完成FPGA验证只是完成了整个设计工作的10%,90%的工作还在后面,更有人说我们当时只是完成了国外学校中系统结构课程的一个大作业而已。但还是有人鼓励说完成FPGA验证已经很不容易,国外成功的设计也都是从FPGA验证开始的。在那一段时间里,在大多数朋友的鼓励和建议中,或多或少都流露出对我们完成物理设计的能力的担忧。因为计算所确实没有做过大规模的芯片的物理设计,尤其是在深亚微米的工艺条件下。

但我坚信现代EDA工具的发展趋势是不断地让做系统的人去完成物理设计,而不是让做微电子的人来完成结构设计。因此,向室里和所里提出了”以我为主”并联合有关单位进行物理设计的方针。李所长很快决定让我们自己做下去,并在我们完成FPGA验证之后的一段时间里,在宏观上提出一系列指导方针,包括他到国外考察了一圈后决定使用0.18的工艺进行流片(我原来倾向于用0.25的工艺,因为0.18的工艺信号完整性问题比较突出。现在看来,使用 0.18的工艺无疑是一个英明的决定)。此外,他有针对性地请了一些精通物理设计的人与我们交流,使我们也受到不少启发,尤其是认识到芯片设计是赢者通吃(Winner Take Over)的买卖,而且大家最后比的就是最后百分之一。在今年初的全所大会上,李所长把龙芯-1的流片作为今年全所的最重要任务。他说,在五十年代计算所做出中国第一台计算机103机时,张劲夫给这台计算机起了个名字叫”有了”,现在我们也要解决通用处理器”有了”的问题。

稳扎稳打的技术路线是和唐志敏商量后提出的。鉴于我们在物理设计上的空白,尤其是对深亚微米的物理设计没有经验,决定狗剩-1的流片分两步走。第一步先交网表,委托有经验的第三方物理设计公司进行物理设计,并把这个方案作为保证成功的保底方案。第二步,在与第三方交互的同时,组织自己的队伍进行物理设计。结果,我们自己做的物理设计仅比第三方晚一个月交付流片,并且委托第三方做物理设计的流片和自己做物理设计的流片都是一次成功。

稳扎稳打的技术路线第二个含义是,在狗剩-1的流片中,采用标准单元进行物理设计。在以后的物理设计中,再自己定制一些宏单元,最后等条件具备再进行全定制设计。做通用处理器,迟早要自己进行全定制设计的。

狗剩-1的物理设计主要包括三个阶段,2001年11月到2002年1月为启动阶段,主要完成环境的建立和工具的初步学习;2002年1月至4月为第二阶段,在这个阶段,RTL基本确定,对整个设计的流程有了初步了解;2002年4月至7月为第三阶段,这是实质性设计阶段。

我们是2001年11月8日开始学习狗剩-1的物理设计的,那天我们买的第一批EDA工具正式安装到了我们的机器上。但那时候我们还没有库,EDA 工具厂商在刚开始的时候给我们一个0.25的综合库以及10个临时的license让我们用于学习。在刚开始的一、两个月,物理设计对我们来说确实是一个全新的领域。当一群熟悉指令流水线、多发射、乱序执行、动态调度、寄存器重命名、转移猜测、CACHE、精确例外等等的人面对诸如Wireload model、综合库、物理库、设计规则、扫描链、Steiner树、顶层约束、时钟树、P diff、N diff、多晶、闸流效应、防静电、串扰、电流密度、压降等等物理设计的概念时,就象熟悉种地的刘姥姥刚进大观园,觉得新鲜而不知所措。不过我们都很努力,大家抓紧时间看文档,并找教科书补充微电子方面的基础知识。在整个狗剩-1的物理设计过程中,我看过的文档至少有上万页,有些看得很认真,反复地读,有些翻过去就算了。我们组的弟兄们看的比我多。

在开始的学习过程中,我们开始对狗剩-1的RTL的部分模块进行初步的综合以及布局布线并根据综合及布局布线结果对RTL进行优化。每次修改都是先修改C模拟器再修改RTL并用FPGA验证环境进行验证。这时候显示出我们前一阶段建立起来的仿真验证环境是多么有用。2001年12月26日,收到来自厂家的正式的0.18综合库。虽然还缺一些特殊单元如锁相环以及一些特殊的IO单元等,但可以比较正式地开始做设计了。用了0.18的库以后,比起我们原来用的0.25的库,关键路径上的延迟一下子降低了很多。

在拿到正式的单元库后的3个月内(2002年1月到3月),是我最着急的三个月,因为在这三个月内我们一直不能开始正式设计。RTL设计总是改了又改,联系第三方物理设计公司也没有确定,可测性设计方案一直在调整,信号完整性问题也没有经验。每次解决一个问题,另一个问题就接踵而至。这些都是初学者难以逾越的过程,如果曾经做过,这三个月的工作(包括前面两个月的学习)完全是可以避免的。但这三个月也是我们从不会做物理设计到会做物理设计的3个月,三个月后,我们不知不觉对物理设计有了初步的了解。到四月初的时候,我已经心里比较塌实了。也就在这段时间里,中科院微电子中心的黄令仪老师带着几个学生加盟到我们的物理设计中来。

黄老师是个干实事的人,六十多岁了,干活比我还猛。每天早上7点多就来,晚上十点多我走的时候她还拖着鼠标坐在计算机前。黄老师是老计算所了,用她自己的话说,她在计算所的时间比在微电子中心的时间还长(她在计算所工作了二十多年,后来微电子中心成立时去的微电子中心)。从黄老师身上,我看到我们的前辈们献身科研的优秀品质,这种品质是目前整个科研界急需的。黄老师说,她是听说我们在做CPU主动找上门的,那时他们刚好完成一个物理设计的项目,下一个项目还没有开始。我见过不少跨单位的合作项目,大都是把经费一分,各干各的,最后攒不到一起。但我们与微电子中心的合作是实质性的,因为合作单位的所有人员天天在一起干同一件活,统一指挥和调度。现在回想起来,如果没有黄老师他们的参与,我们可能只完成委托给第三方物理设计公司的物理设计,不会自己做物理设计,即使做了,也没这么快。

在芯片设计中,RTL freeze是一个重要阶段,即确定RTL级的设计,因为RTL一修改,后面的都得重做。而我们由于在前面设计RTL时没有物理设计的经验,在几个月的时间内,一直对RTL进行调整。这种调整主要包括三个方面,一是性能的优化,包括平衡各级流水线的延迟等;二是功能的增加;三是可测性设计。在从1月初到4 月初的三个多月内,我们一共对RTL做了一百多次修改,其中较大的修改有30多次。通过这些修改,我们积累了RTL设计的感性认识,为以后处理器的RTL 设计提供了宝贵的经验。

在RTL的修改过程中,最麻烦的是可测性设计。狗剩-1的可测性设计包括RAM的自测试设计、寄存器的全扫描设计、以及JTAG设计。好在计算所在这方面有很深的基础,狗剩-1的可测性设计工作主要是网络室的测试组完成的。我最得意的RTL修改是浮点除法的实现。在狗剩-1的FPGA设计阶段,没有实现浮点除法,处理器执行浮点除法指令时发出保留指令例外,由操作系统调用IEEE浮点模拟程序进行模拟。但我们在FPGA中运行SPEC CPU2000标准测试程序时发现,浮点除法指令虽然出现不多,但对性能影响很大。进一步的分析发现,操作系统模拟一条浮点指令平均需要3000多拍。那时候已经是三月份,而浮点除法部件的设计还是比较复杂的,重新设计浮点除法可能会延误设计时间。但我还是下决心实现浮点除法,因为我刚好在前一阶段参与定点除法和浮点乘法模块的优化,对这两个模块都有一定了解,而浮点除法的尾数相除与定点除法类似,阶码处理以及例外处理与浮点乘法类似。我与张志敏老师打赌,三天之内搞不定浮点除法就绕整个北楼喊一圈”张志敏真厉害”。结果我组织定点除法和浮点乘法的设计人员两天就把浮点除法设计完并在FPGA中跑起来。当然,这也取决于我们建立了完整的验证环境和工具。

在这个阶段,我们也把物理设计流程基本走了一遍,解决了其中一些关键技术问题,如信号完整性问题。

2002年春节我们好多人留下来加班。初四的时候李所长和邓书记来看望我们,给我们带来很多好吃的东西,使我们这班远离家乡的游子觉得很温暖。就在那天,所长明确提出我们必须在9月底之前完成流片的要求。这比起我们自己在年底完成流片的计划提前了几个月。从此之后,我们一直按照”后墙不倒”的要求进行进度安排,9月份就是我们的后墙。

到四月初时,我们基本确定了为我们做物理设计的第三方物理设计服务公司。并在四月底把网表交给物理设计公司。在四、五月份,我们工作的重点是对第三方做的设计进行参数提取和验证。同时积极为自己做物理设计做准备。

在任何一个阶段,仿真和验证工作都是很重要的,我们一直在这方面投入比设计更多的力量。在4月份,我做出了一个我自己认为在整个物理设计阶段最满意的三个决定之一,即组织专门的队伍进行仿真验证工作并由年轻员工许彤负责该组的工作。许彤责任心很强,而且非常细心,组织能力也强。他很快就在我们已有的环境基础上建立起完整的验证方法,并把仿真验证和形式验证结合起来。比起我自己来抓要高效得多。他和李祖松、李文在我们交给第三方的网表sign off之前发现了一个与跨时钟域信号传送有关的一个危险错误,并在我们自己做物理设计GDSII版图交出之前又发现一个与扫描链有关的危险错误,避免了重大损失。

我们真正拿到物理库和设计规则是在6月份。当我们明确地知道具备自己完成物理设计的客观条件时,组里的空气顿时紧张起来。由于委托第三方做物理设计的流片(我们称为A方案)已经在6月份交出去,我们决定我们自己做物理设计的方案在7月份交出去流片,否则等到第三方做物理设计的流片回来我们自己的再交出去就没什么意义了。根据前一阶段对信号完整性问题的摸索,我们决定我们自己同时做两个物理设计(分别为B和C方案),它们面积不同,信号完整性的修复方法也不同。B方案是一个实验性的流片,主要是为了取得参数和经验,不是一个准备量产的方案,于7月份流片的截止日期前几天就完成了。C方案是一个准备量产的正式方案,因此面积很小,比A方案小不少,布线时很难布通,花了一个多礼拜。这样,详细布线完成后还有不到一个礼拜就到截止日期了。马上开始寄生参数提取、延迟分析、信号完整性分析。分析完后进行调整,包括手工调整。经过连续三天三夜的加班后,在7月3日终于完成了GDSII版图并修复完天线和其他不符合物理设计规则的地方,通过了LVS检查。这时候离截止日期还有两天时间。正在这时,许彤报告说他们分析的最大延迟和我们做布线后分析出来的延迟不一样,经检查是由于两边的约束不一样,我们对跨时钟域的约束与实际情况不符,导致有几个门的延迟太大。这时候,重做布线已经来不及了,于是决定手工改版图,24 小时后修改完毕,降低延迟0.6ns。这时候大家几天没有睡觉都很累了,离截止日期还有一天。

正当我准备把最后结果让大家签字时,一个巨大的挑战突然出现。在下午5点时测试组发现整个处理器的一万多个触发器的扫描链由于扫描链重连时的一个失误没有根据要求连出来。我脑袋嗡的一下,一句话也没说,就去了食堂吃饭,吃饭时想着在剩下的一天多时间内有没有修复的可能以及放弃流片的后果。我实在不甘心放弃C方案的流片,虽然前面已经有A方案和B方案保底,但C方案是最完美的方案,面积最小因此成本最低、压降和电流密度最小、抗静电性能最好、防 latch-up效应也做得最好,因此最有希望量产。延期一月流片也不行,李所长在春节来看我们时已经明确要求在9月份必须成功(意味着7月份必须交出去)。但目前已经没有时间返工了,唯一的办法是手工改版图,而且时间不一定够。在吃完饭回来的路上我很灰心,没想到全组几十个人几个月的努力,花了上千万纳税人的血汗钱竟然是这样一个结果。我回到机房时全组都已经知道这件事,我看着他们经过连续熬夜的脸上除了眼睛外连嘴唇都没有一丝血色,几乎决定放弃,这样大家今天晚上就可以回去休息了。我去跟唐志敏商量,他让我自己定。我把负责物理设计的几个人召集起来说了情况,没想到负责后端版图编辑的杨旭他们马上就说我们可以手工再改版图。我眼睛一热,说晚上8点全组开会就回到自己的办公室。半个小时后,我在机房进行了动员,我说的第一句话就是:”我们肩负的是历史使命,因为我们要做出中国第一台不依赖于洋人CPU的计算机”。然后进行了工作部署,工作量确实很大,要手工修改网表用于对GDSII进行LVS检查,要手工修改DEF用于参数提取和分析,当然还要手工修改GDSII。由于大家都十分疲惫,我要求任何一个修改都是一人操作,另外两人在边上看着。在接下来的两天两夜,我们终于把一万多个触发器分成十几条扫描链连了出来,并且由于手工修改引起的一个单元延迟增加又手工优化了延迟。同时,我们跟流片厂联系要求宽限一天,因为是周末,我们得到了多一天的期限。到7日凌晨3点多,完成最后交付流片的所有文件,大家签字后陆续回去休息,我和黄老师坐在我的办公室说,就这样了,没什么可后悔了。这已经是我们连续加班的第7天凌晨。

阅读全文»

(4个打分, 平均:4.75 / 5)

QoS的挑战–从互联网服务模型的角度

QoS(Quality of Service)向来是网络通信系统中的重中之重。关于QoS的书籍也很多。绝大多数是从单纯的技术,算法等角度来阐述。最近,由出版社Morgan Kaufmann出版的一本QoS的新书上架。该书为英文版,其书名为:“Technical, Commercial and Regulatory Challenges of QoS: An Internet Service Model Perspective” 与其他QoS书籍不同的是,这本QoS书的亮点是作者,站在互联网服务模型的基础上,不仅仅从技术的角度,而且从商业与政策的观点来考察QoS在整个互联网产业中的地位,其引发的问题和相应的挑战。读者可以通过阅读这本书籍,从产业的高度来把握互联网通信中QoS的问题与商业盈利的重要关系,并从而更全面的理解为什么QoS在通信系统中如此重要。

该书作者为Xipeng xiao,肖曦鹏博士。目前就职于华为技术公司网络产品线,主要负责产品市场(Product Marketing)方面的开拓工作。肖博士在加入华为之前,曾就职于著名通信公司如Riverstone,Redbeck等并担任产品管理部门总监等相应职务。

肖博士的这本新书得到了工业界和学术界的许多好评。例如,思科公司的院士Bruce Davie, Verizon公司院士Daniel Awduche和QWest的首席架构师Waqar Khan的赞扬。下面是一些评论节选(英文)

“The topic of QoS is all too often treated as a purely technical issue. In this refreshingly novel and comprehensive book, Xipeng Xiao draws on his own first-hand experience and that of other experts to put the technical issues in their correct commercial and regulatory context. This book is likely to make QoS much more understandable and relevant to a broad audience than it has been to date.” Bruce Davie, Fellow, Cisco Systems

“An admirable effort towards clarifying some of the key issues of Internet QoS” Daniel Awduche, Fellow, Verizon Business

“I highly recommend this book filled with both technical and business insight.” Zhiwei Yang, former CTO, China Netcom

“Finally, a QoS book that reflects network reality”, Waqar Khan, Chief Architect, Qwest Communicating Inc.

“It is really a wonderful piece of work. By providing many data network practical evidences, the author clearly explained the pros and cons in execution of net neutrality. This is the most comprehensive book that I have ever read on the net neutrality with a full taxonomy of implications related to users, OTT providers, ISPs and ASPs.” Zhisheng Chen, Distinguished Member of Technical Staff, Sprint Nextel

“This book fills a hole in existing QoS literature.” Jennifer Rexford, Professor of Computer Sci., Princeton University

“The book is quite unique and impressive. It is quite readable and answers many questions that an engineer, a manager, a student, and an instructor may have.” Lionel M. Ni, IEEE Fellow; Chair, Dept. of Computer Sci. & Eng., Hong Kong Univ. of Sci. and Tech.

“Comprehensive industrial view on QoS for academic researchers”, Andrzej Jajszczyk, IEEE Fellow; Professor, AGH Univ. of Sci. and Tech., Poland; Former Editor-in-Chief, IEEE Communications Magazine

笔者曾有幸与肖博士相识,并共进午餐。对肖博士在通信产业的见解,知识渊博和对通信标准等等所作出的贡献映像很深刻。笔者认为肖博士的这本“QoS的挑战–从商业与政策的观点来考察”一书,对于从事通信产业中的网络规划,技术研发架构师,高校教师和研究生等,是一本不可多得的一本好书。

有兴趣的读者可以在亚马逊上购买该书–Technical, Commercial and Regulatory Challenges of QoS: An Internet Service Model Perspective

(5个打分, 平均:5.00 / 5)