在介绍 RISC-V 这个 ISA 之前,了解计算机架构师在设计 ISA 时的基本原则和必须做出的权衡是有用的。如下的列表列出了七种衡量标准。 - 成本
- 简洁性
- 性能
- 架构和具体实现的分离
- 提升空间
- 程序大小
- 易于编程/编译/链接
成本:处理器通过集成电路实现,通常称为芯片或晶粒。架构师**保持 ISA 的简洁性,从而缩小实现 ISA 的处理器的尺寸。例如,RISC-V ISA比ARM ISA简洁得多,RISC-V 晶粒的大小是 0.27mm2,而 ARM-32 晶粒的大小是0.53mm2。由于面积大一倍, ARM-32 Cortex A5 的晶粒成本是 RISC-V Rocket 的约4(2^2)倍。 简洁性:简洁的 ISA 除了可以减小芯片面积,还能缩短芯片的设计和验证时间,从而节省芯片开发的成本。这里的简洁性指的是指令的实现复杂度。 RISC-V 处理器在这三个因素中的每一个都获得了近 10%的优势,它们加起来导致了近30%的性能优势。如果更简洁的 ISA 也能催生出更小的芯片,那么其性价比将非常出色。 架构和具体实现的分离:架构和实现之间最初的分离可以追溯到 20 世纪 60 年代,具体表现为:机器语言程序员了解架构后能写出正确的程序,却不一定能保证性能。同时架构师可能会为了优化某种实现的性能和成本而在 ISA 中包含某些“优化过的”指令,但是会为以后的拓展增加困难。 比如MIPS架构的延迟分支特性,MIPS-32 通过把分支操作重新定义在分支指令的下一条指令执行完之后发生,因此分支指令的下一条指令***会被执行。本意是通过提前执行可能的分支代码来减少执行条件分支时的性能损耗,但却会为后续的维护带来困难,同时总是执行分支指令的下一条指令也带来了安全问题,黑客可能利用这个特性在分支指令后做正常情况下无法通过安全检查的指令进行攻击。 提升空间:随着摩尔定律的终结,对性价比进行重大改进的唯一途径是为特定领域(例如深度学习,增强现实,组合优化,图形等)添加自定义指令。这意味着如今的ISA 必须保留操作码空间以供未来的提升。在 20 世纪 70 年代和 80 年代,当摩尔定律如日中天的时候,很少有人考虑为未来的提升节省操作码空间。相反,架构师们重视长地址和立即数字段以减少每个程序执行的指令数。而RISC-V具有后发优势,设计时即考虑到了操作码空间。 程序大小:小的程序可以节省存储空间(在嵌入式领域可能很有用),同时减少指令缓存未命中的概率,从而提升程序性能。 如果与x86进行对比,x86-32 ISA 的指令可以短至 1 字节,也可以长达 15 字节。当所有指令都是 32 位长时, ARM-32 和 RISC-V 代码比 x86-32 长 6%到 9%。而令人惊讶的是,x86-32 代码比同时提供 16 位和 32 位指令的压缩版本(Thumb-2 和 RV32C) 大 26%。x86需要兼容早期设计,原本不合理的指令分配会被继承下来,而操作码的捉襟见肘也使得x86在新版本中也很难进行大的变动。 易于编程/编译/链接:由于访问寄存器和访问内存的速度差别很大,编译器在寄存器分配时可以通过尽可能多的将内容存至寄存器来提升程序性能,这个阶段寄存器更多的处理器更容易得到优化。ARM-32 有 16 个寄存器,而 x86-32 只有 8 个。大多数现代 ISA(包括 RISC-V)都有 32 个整型寄存器。RISC-V占优。另一方面一般每条 RISC-V 指令最多用一个时钟周期执行。但ARM-32 和 x86-32 都有需要很多个时钟周期执行的指令。
|