我们的龙芯2号-胡伟武(转载自中科大BBS) 发信人: chencun(无欲则刚),信区:CS 标题:我们的龙芯2号--胡伟武 发信站:瀚海星云(2003年12月15日22:32:51星期一),站内信件 203年10月16日深夜,喧嚣了一天的计算所北楼终于沉寂了下来,我独自坐在北楼105 房间忐忑不安地等待着。刚才还有郑为民和一个学生跟我在一起,几分钟前我派他们到后 面的芯片小楼取逻辑分析仪去了。与北楼隔着一个篮球场的芯片小楼里还有10来个课题 组的弟兄,他们都象我一样忐忑不安地等待着。 17日凌晨0点30分,楼道里传来了有节奏的脚步声,在空旷而寂静的楼道里显得特别有力 。脚步声越来越近,我的心一下子提了起来,咚咚的脚步声象敲在我的心上,因为我知 道,我们的狗剩2号回来了。 105房间的门被推开,张珩风风火火地闯了进来,手里抱着一个方盒子。他是我专门派 到上海去封装厂家取狗剩2号芯片回来测试的。我们小心翼翼地打开盒子,几十片狗剩2 芯片象等待检阅的士兵一样整齐地排列在专用的包装盒里。一个电话拨到芯片小楼,不 到两分钟,105房间就聚集了六、七个人,他们都是下午刚刚成立的联调组的成员。 我挑了几个芯片,在用万用表对芯片进行一些简单的静态测试后,从中选了一个芯片放 到子卡的插槽中盖好,并把子卡插到主板上。小心地按了一下电源开关,显示屏上没有 动静,心里一阵紧张。试了几次后,换一个子卡,放上芯片后插到主板上,一按电源开 关,显示屏一阵跳动,串串字符如约而至。我们一阵欢呼,刚才提到嗓子眼的心放回到 心窝里先 在启动了一个简单的BOS系统以后,开始启动 LINUX操作系统,一切都很顺利。1点10 分 ,屏幕上出现了LNUX操作系统的登录提示符“ login:"。在拿到芯片的40分钟后,刚才 等待时的紧张心情一扫而光。我们赶快打电话到芯片小楼告诉在那里等候的其他同学 钟石强还给我的妻子发了个短信,今晚她也在等待我们的消息。几分钟后狗剩2号收到了 出世后的第一个祝福。 4点30分,狗剩2号通过了其他的测试。我们用装有狗剩2号的计算机在我们CPU组的内 BBS上灌了狗剩2号出世后的第一瓢水,并发了几封 EMAIL。我决定狗剩2号的第一次联 先告一段落,拿出放了很久的硅谷的一个朋友送的一瓶XO在芯片小楼的会议室里每人半 纸杯庆祝了一下。喝完酒后大家兴致不减,根据事先的约定又打车到天安门广场看升国 旗并去毛主席纪念堂向毛主席报告。今年是毛主席诞辰110周年,我们这款芯片的名字就 叫MZD110。 6点25分,我们又一次站在天安门前的国旗杆下,看着红彤彤的国旗在国歌声中冉冉升起 去年在接受《东方之子》节目采访时,他们曾问我在狗剩1号研制成功后看升国旗时心 里想什么,我那时真忘了想什么了。这次我试图去想一些有意义的事情,比如什么豪言 壮语之类的。可是面对国旗,脑袋里一片空白,只是在国旗猛地串上杆顶的那一刹那 24小时前杨利伟走出神舟5号舱门冲大家挥手的画面突然出现在我脑海中,以至于在去前 门吃早饭的路上这个画面还久久浮现在面前,挥之不去。 在2002年9月28日龙芯1号的发布会上,李国杰所长曾经引用《易经》中的话说:“万物
我们的龙芯 2 号--胡伟武(转载自中科大 BBS) 发信人: chensun (无欲则刚), 信区: CS 标 题: 我们的龙芯 2 号--胡伟武 发信站: 瀚海星云 (2003 年 12 月 15 日 22:32:51 星期一), 站内信件 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 CPU200,就 是 组国际公认的标准测试程序,用这组程序在目标机器上运行,根据实际运行时间算出 该计算机的运行速度指标。这种标准测试程序从 SPEC CPU89、 SPEC CPU92、 SPEC CPU95 到 SPEC CPU2000已经发展了好几期。其中 SPEC CPU2000覆盖的应用面最广,包括文 件 压缩、FPGA布局布线、编译器、组合优化、国际象棋、文字处理、计算机视觉、编程语 言、解释器、数据库、布局布线模拟器、量子动力学、浅水模型、三维势场求解、偏微 分方程、三维图形库、计算流体动力学、图象识别/神经网络、地震波传播模拟、计算化 学、数论/素数测试等等,光源代码就有上百万行。打分的标准是把这组程序在Sun公司 台300MHz的四发射 Untra Sparc II上运行的时间做为标准运行时间,其分值为100分 ,其它机器运行时间跟标准时间相比算出相应的分值。一般来说,现在较流行的四发射 的主流RSC处理器象 Alpha21264、MPSR2000 IBM Power等在400MHz到500MHz 情况下 SPEC CPU2000的分值可以达到300分左右,而 PentiumⅢ在800MH时 SPEC CPU20 00的浮点分值才200多分。狗剩2号要达到300分,至少要与1GHz以上的P或PIV的 性能 相当。因此,虽然做500MHz虽然也不容易,但更难的是 SPEC CPU2000的分值达到300 分以 上 提高处理器的性能,提高主频和优化软硬件结构不可偏废,光强调主频和光强调结构都 是不行的。就象要把100根木头从A地扛到B地,甲每10分钟一个来回,每次扛1根木头 乙每20分钟一个来回,每次扛4根木头;丙60分钟一个来回,每次扛6根木头。我们不能 根据甲跑得快(主频高)就说甲的性能最高,也不能根据丙每次扛得最多(每拍执行的 指令多)就说丙的性能最高,性能是一个综合的东西。当然,还有其它要考虑的因素 如甲乙丙三人每小时的报酬(处理器的功耗、面积)等 虽然狗剩1号的成功对我们来说是一个巨大的进步,但有一件事我一直深引以为恨,那就 是狗剩1号的性能没有达到预想的目标。虽然主频不低,但跑起程序来比起类似结构的R ISC处理器以及相同主频的PI还有一些差距。 SPEC CPU2000的分值也不高。我曾经整日 整夜地泡在机房运行各种测试程序,并试图通过软件优化的方法提高性能。虽然取得了 一些效果,但不理想。后来的性能分析表明,有些狗剩1号性能瓶颈其实完全是可以通过 简单的优化克服的,可惜当时项目推进得太快,没有时间做充分的性能分析和优化。这 件事使我极其郁闷,因此把性能分析不够作为狗剩1号设计过程的一个重要教训,并发誓 在狗剩2号的设计中要一血前耻。知耻近乎勇,后来狗剩2号步步为营的性能分析果真为
生于有,有生于无”。如果说狗剩 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 CPU20 00 的浮点分值才 200 多分。狗剩 2 号要达到 300 分,至少要与 1GHz 以上的 PIII 或 PIV 的 性能 相当。因此,虽然做 500MHz 虽然也不容易,但更难的是 SPEC CPU2000 的分值达到 300 分以 上。 提高处理器的性能,提高主频和优化软硬件结构不可偏废,光强调主频和光强调结构都 是不行的。就象要把 100 根木头从 A 地扛到 B 地,甲每 10 分钟一个来回,每次扛 1 根木头; 乙每 20 分钟一个来回,每次扛 4 根木头;丙 60 分钟一个来回,每次扛 6 根木头。我们不能 根据甲跑得快(主频高)就说甲的性能最高,也不能根据丙每次扛得最多(每拍执行的 指令多)就说丙的性能最高,性能是一个综合的东西。当然,还有其它要考虑的因素, 如甲乙丙三人每小时的报酬(处理器的功耗、面积)等。 虽然狗剩 1 号的成功对我们来说是一个巨大的进步,但有一件事我一直深引以为恨,那就 是狗剩 1 号的性能没有达到预想的目标。虽然主频不低,但跑起程序来比起类似结构的 R ISC 处理器以及相同主频的 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-500MLz以上。狗剩2号最后的流片 将以全定制为主 狗剩2号的设计包括结构设计、逻辑设计以及物理设计三个阶段,这三个阶段互相重叠, 其中结构设计阶段和狗剩1号的设计也有所重叠 狗剩2号的结构设计断断续续地进行了好几个月。刚开始是在2002年四、五月份在进行狗 剩1号物理设计的同时对狗剩2号的系统结构进行了初步的考虑。在对市场上的主流处理 器如 Alpha21264、 MIPS RI0000 Ultra Sparc Ill, Power Ill、HPPA8700、PIV、IA
狗剩 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、IA
64等及学术界的主要工作进行调研的基础上基本确定了狗剩2号的寄存器重命名、动态调 度以及运算部件的架构。到六、七月份随着狗剩1号物理设计和系统开发工作的展开,狗 剩2号的结构设计几乎停了下来。那时候我们组一共只有二、三十号人,很多人员的工作 都是重叠的,根本没有力量同时做两件事情 在2002年7月中旬狗剩1号 tapeout之后,利用等待芯片回来的时间把狗剩2号的结构设计 再次提上日程。7月15日研究生部的靳晓明老师打电话叫我到在四川广元召开的研究生学 术研讨会上做个特邀报告,本来应该是徐志伟老师做的报告,徐老师临时有事去不了因 此派我救场。唐志敏己经告诉靳老师我刚 tapeout一个芯片,应该有空,所以推也推不掉 。开完会后还要去九寨沟,需要三、四天才能回来。我走之前临时决定把狗剩2号的部分 设计人员带到广元,准备在路上对狗剩2号的结构进行讨论。我和中科院研究生院的两位 老师一起坐火车头天走,安虹老师、张福新和范东睿坐飞机第二天走,几乎同时到的广 元。那时候我女儿正在放暑假,我爱人在狗剩1号 tapeout之后刚到一个公司上班,因此 我把6岁的女儿也一起带上了 后来的事实证明我临走前做的决定是十分正确的,在广元和九寨沟的几天效率极高,基 本确定了狗剩2号的结构框架。那几天我们白天根据会务组的安排活动,晚上讨论狗剩2 号的结构,并且根据讨论结果形成狗剩2号结构设计的初步文档,每天都到凌晨一、二点 。由于处理器的寄存器重命名以及动态调度结构已经基本确定,因此讨论的重点是取指 和访存部件的结构。 在从广元去九寨沟的路上我和范东睿坐在汽车的最后一排讨论狗剩2号的取指和译码部分 的结构,汽车在路上颠簸了一整天,我们也讨论了一整天。取指与译码部分的设计空间 很大,包括采用何种转移猜测算法、多发射情况下如何消除转移指令后面的延迟槽、取 指及转移猜测是以指令为单位还是以发射块(四条指令)为单位、转移猜测是在取指还 是在译码阶段进行、修正BHT和BTB的时机、如何提高指令 CACHE的性能、以及指令 TLB和 数据∏LB的关系等。其中如何消除转移指令后面的延迟槽讨论的时间最长,主要是对传统 的BTB方法和 Alpha2264中采用的 line prediction方法进行反复的比较和分析。我从小 就喜欢坐比较颠簸的汽车,汽车越颠精神越好,范东睿精神也不错,因此一路上效率极 高。晚上8点汽车到达九寨沟时,狗剩2号的取指部分架构已基本确定 访存部分的结构比取指部分复杂。一方面,它是与操作系统关系最密切的部分,其功能 是否完善是支持通用操作系统的关键因素:另一方面,它是提高处理器性能的核心部件 之一。如果 CACHE访问效率不高,流水线的其它部分设计得再好也没有用。这一点在狗剩 1号中我们已经有所体会。学术界与企业界都对如何提高访存性能作了大量研究,设计空 间很大,核心问题包括如何降低流水线延迟、如何提高 CACHE命中率和降低由于 CACHE 不 命中引起的等待延迟、以及如何解决访存的RAW、WAR、和WAW相关等等。在随后的几 天中 我们对这些方面进行了反复的权衡和讨论。直到在回北京的火车上才有比较粗的思路 有意思的是,一路下来,我女儿看我们的工作,耳濡目染,对CPU设计也有了自己的心得 直到今天我问她什么是CPU,她还说“CPU就是在一张纸上画些方框,然后用线和箭头 把这些方块连起来,再涂上点颜色,写上一些字,最后一烧,烧出一个亮晶晶的小方块 ”。最近我女儿经常在用狗剩2号做的 Linux Pc上玩游戏。我告诉她这就是我们在九寨沟 画的方框“烧”出来的,她感到很诧异 在2002年8月10日狗剩1号首片调试成功之后,狗剩2号的设计工作又慢了下来,全组的
64 等及学术界的主要工作进行调研的基础上基本确定了狗剩 2 号的寄存器重命名、动态调 度以及运算部件的架构。到六、七月份随着狗剩 1 号物理设计和系统开发工作的展开,狗 剩 2 号的结构设计几乎停了下来。那时候我们组一共只有二、三十号人,很多人员的工作 都是重叠的,根本没有力量同时做两件事情。 在 2002 年 7 月中旬狗剩 1 号 tapeout 之后,利用等待芯片回来的时间把狗剩 2 号的结构设计 再次提上日程。7 月 15 日研究生部的靳晓明老师打电话叫我到在四川广元召开的研究生学 术研讨会上做个特邀报告,本来应该是徐志伟老师做的报告,徐老师临时有事去不了因 此派我救场。唐志敏已经告诉靳老师我刚 tapeout 一个芯片,应该有空,所以推也推不掉 。开完会后还要去九寨沟,需要三、四天才能回来。我走之前临时决定把狗剩 2 号的部分 设计人员带到广元,准备在路上对狗剩 2 号的结构进行讨论。我和中科院研究生院的两位 老师一起坐火车头天走,安虹老师、张福新和范东睿坐飞机第二天走,几乎同时到的广 元。那时候我女儿正在放暑假,我爱人在狗剩 1 号 tapeout 之后刚到一个公司上班,因此 我把 6 岁的女儿也一起带上了。 后来的事实证明我临走前做的决定是十分正确的,在广元和九寨沟的几天效率极高,基 本确定了狗剩 2 号的结构框架。那几天我们白天根据会务组的安排活动,晚上讨论狗剩 2 号的结构,并且根据讨论结果形成狗剩 2 号结构设计的初步文档,每天都到凌晨一、二点 。由于处理器的寄存器重命名以及动态调度结构已经基本确定,因此讨论的重点是取指 和访存部件的结构。 在从广元去九寨沟的路上我和范东睿坐在汽车的最后一排讨论狗剩 2 号的取指和译码部分 的结构,汽车在路上颠簸了一整天,我们也讨论了一整天。取指与译码部分的设计空间 很大,包括采用何种转移猜测算法、多发射情况下如何消除转移指令后面的延迟槽、取 指及转移猜测是以指令为单位还是以发射块(四条指令)为单位、转移猜测是在取指还 是在译码阶段进行、修正 BHT 和 BTB 的时机、如何提高指令 CACHE 的性能、以及指令 TLB 和 数据 TLB 的关系等。其中如何消除转移指令后面的延迟槽讨论的时间最长,主要是对传统 的 BTB 方法和 Alpha 21264 中采用的 line prediction 方法进行反复的比较和分析。我从小 就喜欢坐比较颠簸的汽车,汽车越颠精神越好,范东睿精神也不错,因此一路上效率极 高。晚上 8 点汽车到达九寨沟时,狗剩 2 号的取指部分架构已基本确定。 访存部分的结构比取指部分复杂。一方面,它是与操作系统关系最密切的部分,其功能 是否完善是支持通用操作系统的关键因素;另一方面,它是提高处理器性能的核心部件 之一。如果 CACHE 访问效率不高,流水线的其它部分设计得再好也没有用。这一点在狗剩 1 号中我们已经有所体会。学术界与企业界都对如何提高访存性能作了大量研究,设计空 间很大,核心问题包括如何降低流水线延迟、如何提高 CACHE 命中率和降低由于 CACHE 不 命中引起的等待延迟、以及如何解决访存的 RAW、WAR、和 WAW 相关等等。在随后的几 天中 ,我们对这些方面进行了反复的权衡和讨论。直到在回北京的火车上才有比较粗的思路 。 有意思的是,一路下来,我女儿看我们的工作,耳濡目染,对 CPU 设计也有了自己的心得 。直到今天我问她什么是 CPU,她还说“CPU 就是在一张纸上画些方框,然后用线和箭头 把这些方块连起来,再涂上点颜色,写上一些字,最后一烧,烧出一个亮晶晶的小方块 ”。最近我女儿经常在用狗剩 2 号做的 Linux PC 上玩游戏。我告诉她这就是我们在九寨沟 画的方框“烧”出来的,她感到很诧异。 在 2002 年 8 月 10 日狗剩 1 号首片调试成功之后,狗剩 2 号的设计工作又慢了下来,全组的
主 要力量放在了狗剩1号的系统开发上面。虽然由于狗剩1号的系统开发和性能分析耽误了 些时间,但我自己在狗剩1号上玩了近一个月后有很大的收获。尤其是对性能和主频的 关系有了更深入的认识。比如,对于有一些访存密集的应用,主板频率83MHz而CPU频率 50MHz时的性能还不如主板频率100MHz而CPU频率200MHz的性能。现在想起来, 个处理 器的性能就象一个城市的交通系统的吞吐率,可能由于某几处的堵塞而影响整个城市的 吞吐率,只要把这几处疏通了,虽然花的力气不大,但吞吐率会极大地提高 2002年9月28日狗剩1号发布会后,狗剩2号的设计工作全面展开。10月2日,我带着张 福 新和李祖松到母校中国科大利用十一长假进行狗剩2号的C模拟器封闭开发,顺便向母校 报告一下我们的工作。在科大借了半间原来的库房呆了一个多星期,基本完成了C模拟器 的代码编写。在对结构进行细化的过程中发现了好多原来没有考虑到的问题。对于这些 问题我们有时候争辩得很激烈。例如在转移猜错取消时需要判断正在执行的指令中哪些 是该转移指令前面的,哪些是该转移指令后面的,张福新和李祖松的观点是参照MPSR 10000使用的方法,而我觉得那个方法太麻烦,希望有更简洁的方法。我们一直争论了两 天,在争论的过程中互相启发,终于找到了一种简洁而高效的方法 2002年10月8日回北京时狗剩2号的C模拟器已经基本成型。我们继续在我的办公室进行 半 封闭式的开发,主要是继续完善C模拟器并开始调试。那段时间我们每周只有二、四、六 晚上休息,其它时间都在调试。调试过程中也调动组里的其它人写了不少测试向量。11 月中旬在C模拟器中成功启动 LINUX操作系统,开始对C模拟器进行性能优化以加快模拟 速 度并用C模拟器对狗剩2号的结构进行性能分析 在此期间以及以后的几个月内,我们在C模拟器上运行了完整的 SPEC CPU2000的几乎所 有 程序以及八十年代比较流行的性能测试程序 dhrystone和 whetstone等,对狗剩2号的性 能进行初步的分析。在运行上述程序过程中还发现了不少设计上的bug和考虑不周的地方 。印象比较深刻的是由于访存操作的乱序执行导致两个或多个访存操作之间互相替换CA CHE块并引起死锁。另外一件印象比较深刻的是MPS指令系统规定转移指令的延迟槽指 不能是转移指令,否则处理器的行为不确定,但我们在C模拟器中发现在我们的设计中如 果转移指令的延迟槽指令也是转移指令时也会导致处理器死锁。虽然这是由错误的程序 引起的,但也是结构设计考虑不周的地方,对于错误的程序我们可以给出错误的结果, 但不能把机器搞死。 由于张福新和李祖松的加入,狗剩2号的C模拟器比狗剩1号完善很多,包括 checkpoint 在 内的很多功能都加到模拟器中,此外,C模拟器的运算速度也大大提高了。张福新还顺手 开发了不少小工具 202年11月底,我觉得C模拟器已经基本稳定,就召开了狗剩1号总结以及狗剩2号部署 的 会议,全面部署狗剩2号的RL设计工作 2002年12月初我们组建了RTL设计的队伍,由于我们人手有限,RTL编写的人员都是从 各
主 要力量放在了狗剩 1 号的系统开发上面。虽然由于狗剩 1 号的系统开发和性能分析耽误了 一些时间,但我自己在狗剩 1 号上玩了近一个月后有很大的收获。尤其是对性能和主频的 关系有了更深入的认识。比如,对于有一些访存密集的应用,主板频率 83MHz 而 CPU 频率 250MHz 时的性能还不如主板频率 100MHz 而 CPU 频率 200MHz 的性能。现在想起来,一 个处理 器的性能就象一个城市的交通系统的吞吐率,可能由于某几处的堵塞而影响整个城市的 吞吐率,只要把这几处疏通了,虽然花的力气不大,但吞吐率会极大地提高。 2002 年 9 月 28 日狗剩 1 号发布会后,狗剩 2 号的设计工作全面展开。10 月 2 日,我带着张 福 新和李祖松到母校中国科大利用十一长假进行狗剩 2 号的 C 模拟器封闭开发,顺便向母校 报告一下我们的工作。在科大借了半间原来的库房呆了一个多星期,基本完成了 C 模拟器 的代码编写。在对结构进行细化的过程中发现了好多原来没有考虑到的问题。对于这些 问题我们有时候争辩得很激烈。例如在转移猜错取消时需要判断正在执行的指令中哪些 是该转移指令前面的,哪些是该转移指令后面的,张福新和李祖松的观点是参照 MIPS R 10000 使用的方法,而我觉得那个方法太麻烦,希望有更简洁的方法。我们一直争论了两 天,在争论的过程中互相启发,终于找到了一种简洁而高效的方法。 2002 年 10 月 8 日回北京时狗剩 2 号的 C 模拟器已经基本成型。我们继续在我的办公室进行 半 封闭式的开发,主要是继续完善 C 模拟器并开始调试。那段时间我们每周只有二、四、六 晚上休息,其它时间都在调试。调试过程中也调动组里的其它人写了不少测试向量。11 月中旬在 C 模拟器中成功启动 LINUX 操作系统,开始对 C 模拟器进行性能优化以加快模拟 速 度并用 C 模拟器对狗剩 2 号的结构进行性能分析。 在此期间以及以后的几个月内,我们在 C 模拟器上运行了完整的 SPEC CPU2000 的几乎所 有 程序以及八十年代比较流行的性能测试程序 dhrystone 和 whetdstone 等,对狗剩 2 号的性 能进行初步的分析。在运行上述程序过程中还发现了不少设计上的 bug 和考虑不周的地方 。印象比较深刻的是由于访存操作的乱序执行导致两个或多个访存操作之间互相替换 CA CHE 块并引起死锁。另外一件印象比较深刻的是 MIPS 指令系统规定转移指令的延迟槽指 令 不能是转移指令,否则处理器的行为不确定,但我们在 C 模拟器中发现在我们的设计中如 果转移指令的延迟槽指令也是转移指令时也会导致处理器死锁。虽然这是由错误的程序 引起的,但也是结构设计考虑不周的地方,对于错误的程序我们可以给出错误的结果, 但不能把机器搞死。 由于张福新和李祖松的加入,狗剩 2 号的 C 模拟器比狗剩 1 号完善很多,包括 checkpoint 在 内的很多功能都加到模拟器中,此外,C 模拟器的运算速度也大大提高了。张福新还顺手 开发了不少小工具。 2002 年 11 月底,我觉得 C 模拟器已经基本稳定,就召开了狗剩 1 号总结以及狗剩 2 号部署 的 会议,全面部署狗剩 2 号的 RTL 设计工作。 2002 年 12 月初我们组建了 RTL 设计的队伍,由于我们人手有限,RTL 编写的人员都是从 各