Version[1.00]
《RISC-V 手册 一本开源指令集的指南》读后感
原著DAVID PATTERSON, ANDREW WATERMAN,翻译:勾凌睿、黄成、刘志刚 校阅:包云岗
1. 后摩尔定律时代的到来
1965年,戈登·摩尔准备一个关于计算机存储器发展趋势的报告。他整理了一份观察资料。在他开始绘制数据时,发现了一个惊人的趋势。每个新的芯片大体上包含其前任两倍的容量,每个芯片产生的时间都是在前一个芯片产生后的18~24个月内,如果这个趋势继续,计算能力相对于时间周期将呈指数式的上升。
在摩尔定律持续有效的40多年内,通过增加晶体管提升性能的策略是便捷有效的。
当半导体制程进入7ns之后,摩尔定律中晶体管容量翻倍、计算机性能翻倍的周期越来越长。单纯依靠增加晶体管提升性能的方法,受到成本和功耗的限制。于是进入了后摩尔定律时代。
早期的微处理器有单独的浮点运算芯片,所以那些浮点运算指令是可选的。摩尔定律使得我
们很快就将所有功能(包括浮点运算)都实现了在同一块芯片上,而且模块化在指令集中逐
渐消失。在更简单的处理器中只实现完整的指令集的子集,并利用软件异常来模拟未实现的
指令,如同数十年前的在 IBM 360 的 44 型号和 Digital Equipment microVAX。RV32I 的不同
之处在于完整的软件堆栈只需要 RV32I 中的基本指令,因此,对于 RV32G 中未实现的指
令,RV32I 处理器无需通过软件异常来进行模拟。在这方面,最接近 RISC-V 的 ISA 可能是
Tensilica Xtensa,它是专为嵌入式应用设计的。它的指令集包含有 80 条基础指令。并且它
的指令集旨在被用户根据自己的需求扩展一些加速指令,以加速其应用程序。与 Tensilica
Xtensa 相比,RV32I 具有更简单的基础 ISA,具有 64 位地址版本,并且对超级计算机和微
控制器都提供了针对性的指令集扩展。
随着摩尔定律(Moore’s law)的终结,对性价比进行重大改进的唯一途径是为特定领域(例如深度学习,
增强现实,组合优化,图形等)添加自定义指令。
2. RISC ISA
1980年开始,在 David Patterson 的带领下,UC Berkeley 的计算机科学家们,在总结各种计算机指令集架构的优缺点的基础上,争对软件程序运行的特点,完成了RISC-I ISA的设计。因为RISC-I 的成功,相似理念而设计的ISA被统一归类为RISC ISA。
成为先驱者的一个问题是你总是犯错误,而我永远不会想成为先驱者。最好是在看到先驱者所犯的错误后,
赶紧来做这件事情,成为第二个做这件事情的人。
——Seymour Cray,第一台超级计算机的架构师,1976 年
Berkeley RISC is one of two seminal research projects into reduced instruction set
computer (RISC) based microprocessor design taking place under the Defense Advanced
Research Projects Agency Very Large Scale Integration (VLSI) VLSI Project. RISC was
led by David Patterson (who coined the term RISC) at the University of California,
Berkeley between 1980 and 1984.[1] The other project took place a short distance away
at Stanford University under their MIPS effort starting in 1981 and running until 1984.
Berkeley's project was so successful that it became the name for all similar designs to
follow; even the MIPS would become known as a "RISC processor". The Berkeley RISC design
was later commercialized by Sun Microsystems as the SPARC architecture, and inspired the
ARM architecture.
3.RISC-V
在David Patterson 和 John Hennessy 等UC Berkeley、Stanford 的计算机科学家,从1980年的RISC-I开始,对计算机ISA的研究从未中断,并在2010年创建 RISC-V ISA。
RISC-V 是模块化的、向量化的开源ISA。
RISC-V是长达40年的计算机架构设计领域的研究成果,势必在后摩尔定律时代的担当起的计算机性能提升的重任。
我们认为 RV32V 的模块化向量实现对比 ARM-32、MIPS-32 和 x86-32 的增量式 SIMD
架构在成本-能耗-性能、复杂度和编程简易性等方面的极大优势,可能是选用 RISC-V 的最
有说服力的论据
有什么不同之处?首先,RISC-V 中没有字节或半字宽度的整数计算操作。操作始终
是以完整的寄存器宽度。内存访问需要的能量比算术运算高几个数量级。因此低宽度的数
据访问可以节省大量的能量,但低宽度的运算不会。ARM-32 具有一个不寻常的功能,对
于大多数算术逻辑运算中的一个操作数,你可以选择对它进行移位。尽管这些指令的使用
频率很低,但它使数据路径和数据通路更加复杂。与此相对的是,RV32I 提供了单独的移
位指令。
RV32I 也不包含乘法和除法,它们包含在可选的 RV32M 扩展中(参见第 4 章)。与
ARM-32 和 x86-32 不同,即使处理器没有添加乘除法扩展,完整的 RISC-V 软件栈也可以
运行,这可以缩小嵌入式芯片的面积。MIPS-32 汇编程序可能用一系列移位以及加法指令
来替换乘法,以提高性能,这可能会使程序员看到处理器执行了汇编程序中没有的指令,
进而造成混淆。RV32I 可以忽略了这些特性:循环移位指令和整数算术溢出检测,这两个
特性都可以用若干条 RV32I 指令来实现(参见第 2.6 节)。
我们已经介绍了 RISC-V 基本指令集,并说明了与 ARM-32,MIPS-32 和 x86-32 相
比,它做了哪些取舍。我们现在通过真实程序来进行一场直接的较量。图 2.5 显示了我们
的基准测试——用 C 实现的插入排序。图 2.6 是一个表,它总结了在编译到不同 ISA 后,
插入排序的指令数和字节数。
图 2.8 至 2.11 显示了插入排序编译生成的 RV32I,ARM-32,MIPS-32 和 x86-32 的汇
编代码。尽管强调简单性,RISC-V 版本使用相同数目或更少的指令, 并且不同架构的代
码大小非常接近。在此示例中,RISC-V 的比较、执行分支指令和 ARM-32 和 x86-32 中花
式繁多的寻址模式以及入栈出栈指令一样,能够节省大量指令
又过了十年,ARM 也遇到了同样的地址问题。但是他们没有像 x86-64 那样,把旧的 ISA
扩展到支持 64 位地址。他们利用这个机会发明了一个全新的 ISA。从头设计一个新 ISA,
使得他们不必继承 ARM-32 的许多尴尬特性,他们重新设计了一个现代 ISA:
⚫ 将整数寄存器的数量从 15 增加到 31;
⚫ 从寄存器组中删除 PC;
⚫ 为大多数指令提供硬连线到零的寄存器(r31);
⚫ 与 ARM-32 不同,ARM-64 的所有数据寻址模式都适用于所有数据大小和类型;
⚫ ARM-64 去除了 ARM-32 的加载存储多个数据的指令
⚫ ARM-64 去除了 ARM-32 指令的条件执行选项。
RISC-V 具有开放、标准的扩展方式,可能意味着可以在指令集最终确定之前得到反馈
和争论,使得进一步的修改为时未晚。理想情况下,一小部分成员将先把一个提议实现出来,
然后再提交通过,而 FPGA 上让实现的过程变得很容易。通过 RISC-V 基础委员会提交指令
扩展所需工作量比较适中,他们将努力控制 ISA 变动的速度,至少不会像 x86-32 那样有太
快的变化(见第[1]章的图 1.2)。另外别忘了,不管有多少扩展被应用了,这一章提到的这些
东西都是可选的。
我们希望 RISC-V 可以在保持简洁和高效的同时适应技术需求的发展。如果 RISC-V 成
功了,它将成为以往增量式 ISA 上的一次革命性突破。