随着这些年的发展,RISC-V 的受重视程度与与日俱增。这主要因为它是免费的、灵活的,并且速度很快。这使 RISC-V 成为许多开发人员的安全便捷选择。但是您会认为 RISC-V 是通用 RISC 处理器还是定制的随心所欲处理器?
但答案是两者都是!然而这是一个悖论。
起初,RISC-V 是一种温和的 RISC 方案,但是随着其发展,RISC-V 演变成超级处理器!换而言之,它可以像您希望的那样平淡无奇或令人兴奋,这是其他 CPU 供应商也试图实现的一种技巧。
可定制的处理器似乎是世界上最愚蠢的想法。
一方面,处理器生态系统在兼容性方面蓬勃发展。如果每个 CPU 都不相同,则不能开发编译器、调试器、操作系统、应用程序和中间件,甚至不能生产高效的程序员。没有兼容性,我们最好通过焊接导线和换掉硬件来创建程序。CPU 的指令集——固定的指令集其实就是软件的组成部分。这种兼容性推动了更多软件的成长,更多的工具推出和更多 CPU 销售的良性循环。
但从另一个角度看,通用 CPU 很无聊。负载会随着时间而变化,并非每个程序员都需要相同的功能集。我们很多人不需要浮点运算。有些需要位操作指令。其他人则需要 Linux 支持或矢量操作,或者需要进行奇怪的表查找和内插( interpolate )的东西。
古怪(Oddball)的指令可以有很大的不同,它在如何执行处理器方面拥有非常大的差异。游戏玩家在争论一个 Intel CPU 与另一个 AMD 处理器的相对优点时,这两者几乎是相同的芯片,相差仅百分之几。将如果将其与低端 DSP、高端 ARM、PowerPC 或 x86 设计的方式进行比较,两者之间的差异非常明显。由此可见,架构和指令集确实很重要。
问题是,当您偏离通用路径时,将失去兼容性,并且失去软件支持。指令并不能被 RISC 编译器忽略,它们只是浪费多余的硬件。只有汇编语言程序员或愿意编写编译器内部函数的程序员才能利用这种额外的能力。除非您调整基准,但这又有什么意义?
RISC-V 占据中间位置,并定义了所有处理器共享的基本指令集,以及一组可选的附加模块。您要浮点数吗?我们已经设计,定义,创建和提供了所有功能。在 RISC-V 上执行 FP 的每个人都以相同的方式进行操作,因此编译器编写者很高兴,因为您的代码或多或少具有可移植性。
除了这些半标准选项之外,您还可以分支并创建自己的完全自定义的指令。毕竟,这是一个开放源 CPU 规范,因此没有人可以阻止您。如果愿意,您甚至可以尝试将自己的作品卖回社区。
其实,可定制的指令集在之前已经完成,并且它们大部分都可以工作。例如 Synopsys 和 Cadence 的 ARC 和 Tensilica 都允许用户级定制。它们的工作方式是,当用户为特定的应用程序编写有用的新指令时,他们确实确实看到了性能的大幅提高或功耗的降低。虽然这并不总是一个简单的过程,但是它是有效的。但这种选择带来的缺点是自定义软件支持有限,并且与其他任何芯片都不兼容。
当然,后一个特征实际上可能是一个优势。因为也许你希望混淆你的代码并避免逆向工程。为此你只需在处理器中添加一些奇数指令,然后在整个软件中自由使用它们即可。自定义指令的功能甚至都无关紧要。关键是其他任何人都不知道。
当然,真正的重点是在代码中找到热点( hotspots )并创建自定义指令以加速它们。也许您在迈步时做了大量的存储工作;自定义加载 / 存储对可能会有所帮助。重复的比特旋转(bit twiddling)可能会压缩(condensed )为一个特殊用途的操作等等。
即使有可能,但删除指令也没有什么意义。每个 CPU 都需要基准指令才能进行操作。当然,您可以通过很少的指令来解决问题,但这主要是出于学术目的。RISC-V 和其他设计在过去 20 年中使用的核心集包括基本加法,减法(有时只是负加法),逻辑运算和条件流控制(conditional flow control.)。所有这些都是有用的,并且在硬件中实现它们都不复杂。这意味着,它们从来都不是性能瓶颈,因此删除它们并不会带来任何的提升。
在另一个极端,你有一个像英特尔的疯狂的、复杂的 Ice Lake 微架构,它拥有数以百计的指令,但很少会使用很多的。这种巴洛克式的指令集不仅使芯片变得臃肿。复杂的 CPU 具有复杂的互连,大型总线和多个时钟域。这与 RISC-V 相距甚远,即使安装了可选的增强功能也是如此。
MIPS 架构允许用户自定义已有多年,但 ARM 坚决抵制这种趋势。其他一些则位于中间,大多数只允许非常有限的调整。从这个意义上讲,RISC-V 是更为开放的处理器之一。
随着 RISC-V 的激增,确定 CPU 正在执行和未执行的操作将变得越来越困难。每个人都可以自由定制,并且许多 RISC-V 设计师已经拥有了这样的想法。除了核心指令集和一个或两个流行的扩展之外,我们还将看到库存 CPU 和自定义 hot rods 之间还有很大的差距。
它们在某种程度上都将是 RISC-V,但却大不相同。