|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
值得一看哦,不仅仅是技术,呵呵。有点长,耐心看。
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计算机软硬件主题最大的项目,完不成任务提头来见!”这两件事给我很大的触动,让
我想起上甘岭战役前夕彭德怀曾对秦基伟说:“我们要对朝鲜的历史负责”。
龙芯2号的设计在龙芯1号tapeout前就开始筹划,主要是唐志敏和我围绕我们申请的中科院和863的项
目进行调研并确立在2004年项目结束时SPEC CPU2000的分值达到300分的目标 ,并在此基础上确定64位结
构和4发射的目标。根据项目目标及龙芯1号研制的经验和教训 ,我们确定了龙芯2号研制的如下三条设计
原则。
一是充分发挥结构设计优势和软硬件协同的设计原则。即通过处理器中各个层次的并行性开发来提高
性能。这些并行性包括指令级并行、数据级并行以及线程级并行。其中指令级并行主要是四发射结构的实
现,即在指令流水线的任何一个阶段每拍都执行四条以上的指令。为了有效发挥多发射通路的效率,必须
实现充分的乱序执行技术,减少指令间的互相 等待。数据级并行性的开发主要是通过SIMD的技术实现向
量指令。线程级并行性包括单处理器的多线程技术以及多处理器的多线程技术。龙芯2号在并行性开发上
主要开发指令级并行技术,并通过把浮点部件与媒体处理共用的方法实现数据级并行的SIMD技术。软硬件
协同主要指通过编译优化及硬件对编译器的支持提高性能,既不片面追求复杂的硬件大包大揽,也不把沉
重的优化负担完全压在编译器身上。编译器对提高性能十分重要,我们曾有这样的体会:在同一台机器上
,用不同编译器编译出来的同一个程序,运行时间竟相差75%。
二是以物理设计指导结构设计的原则 首先,流水线的最大逻辑路径不是由体系结构设计的需要来确
定,而是由物理设计的要求来确定。即先确定每一级流水线的最大延迟并在此约束下进行结构设计。其次
,在做结构设计时,心中要有物理设计的概念,即要明白相应的逻辑在物理上是什么样的。在龙芯2号设
计过程中,结构设计人员至少做到网表级。三是设计和实现方法上稳扎稳打的原则
首先,重视Cycle-by-Cycle的C模拟器的设计并把C模拟器作为详细结构设计的文档是我们在龙芯1号开发
过程中形成的一条最重要的经验,即“可执行的结构设计”的概念。在设计初期就通过充分的仿真与验证
不仅不会影响进度,而且会加快进度。此外,龙芯2号的功能设计和物理设计也分成几步。第一步,还是
采用标准单元设计,只在很有限的局部做全定制(如寄存器堆),主频200-300MHz以上,功能上不实现二
级CACHE,争取尽快完成流片。第二步,功能上增加二级CACHE接口或/及DDR接口等,物理设计上使用更多
的宏单元,但设计方法还是基于标准单元的方法,主频在300-400MHz以上。第三步,功能上增加对多处理
器系统的支持,在更多的地方使用全定制单元或使用全定制流程,主频争取在400-500MHz以上。龙芯2号
最后的流片将以全定制为主。
龙芯2号的设计包括结构设计、逻辑设计以及物理设计三个阶段,这三个阶段互相重叠,其中结构设
计阶段和龙芯1号的设计也有所重叠。龙芯2号的结构设计断断续续地进行了好几个月。刚开始是在2002年
四、五月份在进行龙芯1号物理设计的同时对龙芯2号的系统结构进行了初步的考虑。在对市场上的主流处
理器如Alpha 21264、MIPS R10000、Ultra Sparc III、Power III、HP PA8700、PIV、IA64等及学术界的
主要工作进行调研的基础上基本确定了龙芯2号的寄存器重命名、动态调度以及运算部件的架构。到六、
七月份随着龙芯1号物理设计和系统开发工作的展开,龙芯2号的结构设计几乎停了下来。那时候我们组一
共只有二、三十号人,很多人员的工作都是重叠的,根本没有力量同时做两件事情。
在2002年7月中旬龙芯1号tapeout之后,利用等待芯片回来的时间把龙芯2号的结构设计再次提上日程
。7月15日研究生部的靳晓明老师打电话叫我到在四川广元召开的研究生学术研讨会上做个特邀报告,本
来应该是徐志伟老师做的报告,徐老师临时有事去不了因此派我救场。唐志敏已经告诉靳老师我刚tapeou
t一个芯片,应该有空,所以推也推不掉。开完会后还要去九寨沟,需要三、四天才能回来。我走之前临
时决定把龙芯2号的部分设计人员带到广元,准备在路上对龙芯2号的结构进行讨论。我和中科院研究生院
的两位老师一起坐火车头天走,安虹老师、张福新和范东睿坐飞机第二天走,几乎同时到的广元。那时候
我女儿正在放暑假,我爱人在龙芯1号tapeout之后刚到一个公司上班,因此我把6岁的女儿也一起带上了
。
后来的事实证明我临走前做的决定是十分正确的,在广元和九寨沟的几天效率极高,基本确定了龙芯
2号的结构框架。那几天我们白天根据会务组的安排活动,晚上讨论龙芯2号的结构,并且根据讨论结果形
成龙芯2号结构设计的初步文档,每天都到凌晨一、二点。由于处理器的寄存器重命名以及动态调度结构
已经基本确定,因此讨论的重点是取指和访存部件的结构。
|
|