提高处理器的性能, 提高主频和优化软硬件结构不可偏废, 光强调主频和光强调结构都是不行的。 就象要把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%。