第04章开篇第一句话就是:现代微处理器可以称得上是人类创造出的最复杂的系统之一 。
的确如此,仅看现代处理器的制造过程就极其复杂,感兴趣的可以观看影片:中芯国际:从沙子到芯片arrow-up-right
要讨论现代处理器,如此单薄的一章肯定是远远不够的,要再开设一门课程才行,实际上本章的内容隶属于计算机组成原理(计算机体系结构)的范畴,这里仅介绍一些大家必须知道的东西,或者是值得借鉴和思考的东西。
RISC (精简指令集) vs CISC (复杂指令集),如今很多RISC风格的处理器为了加入很多新的特性,正在变得越来越像CISC,而反过来CISC风格的处理器(比如x86)在具体实现的时候又转换成了类似RISC的微指令,因此两者的界限越来越模糊了,本质上都是“取其精华,去其糟粕”,或者说是某种程度的折中。
From:MIT 6.823 Computer System Architecture 另外,这不仅仅是技术上孰优孰劣的问题,还有市场因素,Technical elegance ≠ market success ,例如今天我们很不幸地看到MIPS已经开始日落西山,回顾历史,MIPS(特别优雅)在90年代曾经一度辉煌过,很多半导体公司都采用MIPS的设计来制造芯片,其生产的芯片也被Sony和Nintendo的游戏机,以及被超级计算机所使用,但是它错失了智能手机时代,由于MIPS的产品从设计之初就以Intel的x86为对标产品,主打高性能,反观ARM,从诞生开始就瞄准嵌入式低功耗领域,在智能手机市场大爆发的年代,ARM一下子走上舞台中央,而MIPS由于聚焦在中高端并没有功耗的优势,限制了其在智能手机上大展拳脚,另一方面MIPS的迟缓也导致它失去了最关键的十年, 如今MIPS已是几经转手,命途多舛,反观 Intel(特别不优雅),它的指令集架构并不优雅和完美,但是它的兼容性做的很好,在个人电脑和服务器领域还是占据了重大的份额,我们不得不感慨科技产业的快速变迁,正所谓 “适者生存”,类似的,Linux并不完美,但是它同样很务实,也取得了巨大的成功。
从1970年代开始... 摩尔定律持续了几十年... 但是可以看出单核处理器在2005年前后遇到了很多瓶颈(功耗墙,指令并行墙,内存墙等),Intel技术总监很早就谈及了这个话题arrow-up-right ,如今你的电脑和手机也早就已经是(异构)多核的了,比如 ARM big.LITTLEarrow-up-right ...
近年来,基于领域的设计也开始再次兴起,传统的商业产品(比如x86-64)已经达不到某些公司对性能的极致需求,或者对需求的响应过于缓慢,因此很多大公司都在自行设计能够满足自身特定性能需求的软硬件,比如Google的TPU,Apple的M1芯片等,Patterson和Hennessy称之为计算机体系结构的新黄金时代。
参考:Patterson演讲:计算机体系结构的新黄金时代arrow-up-right ,Hennessy演讲:计算机体系结构的新黄金时代arrow-up-right
图片:Apple于2020年发布的M1 SoC芯片 CMU的教授没有给出对应的视频,我也不推荐大家阅读原书第4章,原因:Y86-64 不是一个商业可用的指令集架构,意味着你学了之后基本上没有实用价值,另外,Y86-64 的设计并不优雅,不是特别值得学习。
推荐教材 :计算机组成与设计: 硬件/软件接口:MIPS版本 或者 RISC-V版本,以下简称P&H Book。
下载链接 :如果你没有以上推荐教材的纸质书籍的话,可以跳到附录部分直接下载电子版教材。
备注:Patterson和Hennessy由于RISC方面的贡献而获得2017年图灵奖(相当于计算机界的诺贝尔奖)
补充说明1 :MIPS的芯片比较难买到,如果感兴趣的话你可以通过模拟器来学习。
补充说明2 :推荐学习RISC-V指令集,因为它是开放的指令集架构,发展迅猛,未来可期,如果你已经有了良好的基础(比如学习过MIPS),那么你学习RISC-V指令集仅仅需要如下两页纸(a.k.a. Green Card):
RISC-V Green Card (from P&H Book) 温馨提示:阿里巴巴、华为、晶心科技(台湾)、西部数据、NVIDIA、SiFive、高通等各大公司都在争相布局,我国大力支持看好RISC-V,你如果感兴趣可以参考:RISC-V基金会官网arrow-up-right ,中国科学院大学的“一生一芯”成果展示arrow-up-right ,倪光南院士也介绍了我国的RISC-V发展情况arrow-up-right 。
单周期处理器设计 :数据通路 + 实现控制逻辑 (本质 = 组合逻辑电路 + 时序逻辑电路)
引申 :控制与数据分离的设计思想也广泛应用在其他领域,比如网络通信领域中引入了SDN
备注:数字电路不是本课程的重点,如果不熟悉的朋友请参考 P&H Book. 附录. The Basics of Logic Design
From P&H Book:组合逻辑单元,时序逻辑单元 示例:以下是简单的RISC-V单周期处理器的设计(MIPS也类似),来自P&H Book
From P&H Book:single-cycle datapath 示例:以下是简单的RISC-V流水线处理器的设计(MIPS也类似),来自P&H Book
From P&H Book:pipelined version of the datapath 提示:流水线并不会缩短单条指令的执行时间(甚至会增加时间), 但是提高了指令的吞吐率。流水线深度也不是越深越好,一方面由于流水线寄存器本身会带来额外的开销,另外一方面流水线越深,由分支预测失败带来的性能损失会更大,下图是各种处理器的流水线深度和功耗对比,因此实际需要考虑折中。
结构冒险 :所需的硬件资源正在被之前的指令工作,解决方案:等待Stall,或者增加硬件资源,比如增加寄存器的端口数量,或者指令和数据Cache分开存储,请参考下图的场景a和场景b对照理解。
场景a:增加寄存器端口,场景b:指令/数据分开存储 数据冒险 :需要等待之前的指令完成写操作,解决方案:等待Stall,或者提前转发Forwarding,但是无法解决所有的数据依赖问题(例如需要访存的情况),请参考下图的场景a和场景b对照理解。
编译器也可以进行指令调度,在一定程度上避免等待Stall,请参考下图的场景进行理解:
控制冒险 : 需要根据之前指令的结果决定下一步的行为,解决方案:等待Stall,分支预测(硬件实现的动态预测,比如branch target buffer,branch history table等机制),编译器实现的分支合并等。
Out-of-Order Execution: 乱序执行(动态调度):大致上包含的组件有 Register renaming,Reservation stations等。注意:虽然表面上看起来是乱序执行,但是最终还是要确保按序递交结果(从程序员的角度看顺序是一致的)
历史 :世界上第一台乱序执行和执行超标量的计算机是CDC 6600,超级计算机之父 Semour Cray 带领的团队在这台堪称是天神下凡一般的机器上实现了体系结构设计的两项重大突破,值得永载史册,出于对 CDC 6600 的敬意,乱序执行中用来描述指令发射的术语(issue)沿用了 CDC 6600 设计文档中的原始称呼并一直保留至今。
现代处理器实例-1 :Intel Core-i7使用的Nehalem架构,如果看不太清楚的话可以通过下方链接下载文档
Intel Nehalem microarchitecture source from:Mohammad Radpour & Amirali Sharifian 现代处理器实例-2 :ARM Cortex-A57的架构图,如果看不太清楚的话可以通过下方链接下载图片
ARM Cortex-A57 Block Diagram source from: Hiroshige Goto 现代处理器设计:数据并行 DLP
From:https://compas.cs.stonybrook.edu/~nhonarmand/courses/fa15/cse610/