后来的事实证明我临走前做的决定是十分正确的, 在广元和九寨沟的几天效率极高, 基本确定了龙芯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就是在一张纸上画些方框, 然后用线和箭头把这些方块连起来, 再涂上点颜色, 写上一些字, 最后一烧, 烧出一个亮晶晶的小方块” 。
硬评:一分钟了解i5-9400F性能
7nm锐龙直击 AMD发布会图赏