高性能超标量CPU:微架构剖析与设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

PREFACE
前言

CPU被誉为“人类科技皇冠的明珠”,数十年来无数从业者争相撷取。在半导体工业的发展历程中,“奔腾之芯”Intel、“蓝色巨人”IBM、“性能之王”DEC、“落寞贵族”Motorola等巨头都曾是CPU界的弄潮者,命途多舛的Sun Microsystems也曾称雄一时。后来的AMD与Intel双雄争霸、Apple异军突起、ARM后来居上以及RISC-V崭露头角也为业内人士津津乐道,不断吸引着有志之士投身于此。

在计算机体系结构领域,无论对于在校生还是从业者,加州大学伯克利分校的David Patterson博士和斯坦福大学的John Hennessy博士的两部经典著作Computer Organization and Design: The Hardware/Software InterfaceComputer Architecture: A Quantitative Approach都是必读的。笔者在求学时,这两部著作是初阶和高阶核心课程的主要参考书,主讲课程的Gandhi Puvvada教授熟稔两部著作的全部版本,被学生戏称比作者还懂自己的著作。当笔者进入业界后,导师最先建议的也是去阅读Computer Architecture: A Quantitative Approach一书。然而,从笔者的视角来看,经典著作与业界实际微架构设计之间是“道”与“术”的关系。“道”是本源,“术”是法门,“道”可以在微观上以不同的“术”来呈现,但是求“道”需要从“术”入手,再由“术”印证“道”,方能融会贯通。在工程实践中,从一个循序渐进的个体角度看,也许在相当长的一段时间内更多地需要引导具体实操的“术”而非高屋建瓴的“道”,直到经验积累到一定的程度之后能够回过头思考总结归纳出一套方法学。南加州大学教授Michel Dubois博士是IEEE会士,笔者认为他的著作Parallel Computer Organization and Design看来是一部非常优秀的讲解CPU设计的书籍,内容详实逻辑清晰。然而,笔者在校时Michel Dubois博士开设的课程并没有得到学生的追捧,究其原因有其个人风格的关系,但是归根结底还是偏重于高屋建瓴,这有可能会让学生对于CPU设计的“道”和“术”无法顺畅地相互印证。

笔者才疏学浅,不敢称“融会贯通”,然而这并不妨碍笔者根据自身的经验和思考为读者提供一种CPU微架构设计的视角,交流一种CPU微架构设计的思路和方法学。毫无疑问,学习CPU微架构设计的一个最好的入门方式是读架构设计文档和源代码。然而,芯片设计领域相对来讲较为封闭,很难仅凭公开材料或者开源代码就接触到最核心的设计。对于绝大多数人来说,超越前人之前的一个必经阶段就是模仿和学习,在CPU设计领域也是同理,在对现有设计理解透彻之前就谈重构创新无异于空中楼阁。所谓“图难于其易,为大于其细”,笔者借由本书,为读者展现笔者所理解的CPU微架构设计。希望读者阅读完本书后,能够自行印证业界各类相关文献,理解并逐渐找到适合自己的CPU设计方法。同时笔者和写作团队的同事们也希望通过本书的写作和出版,能够在时代的浪潮中尽一些绵薄之力,做一点微小的工作。

本书的内容分为10章,第1章介绍业界主流高性能处理器架构及超标量流水线背景知识;第2~9章对应于CPU指令的生命周期,按顺序分别展开讲解CPU各个功能单元的架构设计;第10章对经典的x86架构CPU微架构Intel P6的设计进行了详细剖析,便于读者通过设计实例来印证前9章的相关内容。具体如下所示。

第1章由李东声和任子木编写,介绍了复杂指令集与精简指令集,超标量CPU相关的基本概念,包括流水线技术、指令的顺序执行与乱序执行,以及超长指令字设计。同时介绍了当前主流的CPU指令集,从宏观上为读者搭建出CPU设计的一个大体框架,便于后续内容的理解。

第2章和第3章由李东声编写,介绍了构成超标量CPU前端的指令提取单元、译码单元,以及分支预测单元的微架构设计。其中,在介绍指令提取单元设计的同时,着重介绍了指令缓存的基本概念、分类和替换策略选择、性能衡量标准、组织方式与预取设计,而后介绍指令提取单元微架构和数据流设计。在分支预测单元的介绍中,首先介绍了分支预测的原理,之后通过分支跳转方向预测与分支跳转目标预测两个部分对分支预测单元的设计进行介绍,最后给出分支预测单元的微架构设计以及优化思路。

第4章和第5章由孙小明编写,介绍了超标量CPU乱序引擎的核心组件——寄存器重命名与发射队列的设计。在寄存器重命名单元的介绍中,对寄存器重命名的原理、过程、映射方法和实现过程,以及微架构设计空间进行了阐述,同时给出了实现方案。在发射队列的介绍中,对发射队列的原理和工作机制、操作数获取策略,以及微架构设计空间进行了阐述。

第6章和第7章由任子木编写,浮点运算单元独立于执行单元另起一章。首先介绍了执行单元中算术逻辑运算单元、定点乘法、SIMD及旁路网络设计,之后介绍了浮点数据格式和运算标准,以及浮点运算单元中的加法、乘法、除法和开方的运算原理及硬件微架构设计。

第8章由李鹏编写,介绍了访存单元的设计。内容从内存模型和数据缓存展开,进一步介绍了一级数据缓存的控制以及硬件预取设计。

第9章由孙小明编写,对重排序缓冲的原理以及微架构设计空间进行了阐述,最后给出了一个重排序缓冲运行的实例。

第10章由李东声编写,对Intel P6微架构进行了深度分析,通过经典的高性能超标量CPU设计来帮助读者对第2~9章中介绍的每一部分微架构的设计进行融会贯通,从宏观上理解超标量乱序CPU的工作流程和设计优化思路。

全书的统稿由李东声负责。内容讲解资源由任子木负责。

在本书的规划和编写过程中,得到了黄静、李伟、杨巍等业界前辈的指导和帮助;王晓天、杨宁、滕宏峰、余浩等同事对内容提出了许多宝贵的意见和建议;机械工业出版社的李培培编辑全程给予了极大的关照和支持,这里由衷表示感谢。

CPU设计是一个宏大而复杂的工程,笔者水平有限,也深感生有涯而知无涯,写作过程中时常发觉很多知识点没能详细展开阐述。同时,笔者参阅了许多业界前辈和同仁的著作,包括且不限于专著、论文及技术博客等网络资源,在此对原作者表示敬意。在笔者自我学习之余深感有所收获,读者也可以自行查阅相关文献进行学习和相互印证。如果参考文献列表有所疏漏,在此深表歉意。对于本书内容中的疏漏和错误,敬请读者批评指正。

李东声

2022年8月 西安