如何设计 ISA
关于如何设计像 RISC‑V、Arm 和 x86 这样的指令集架构(ISA)的争论,与其说围绕某个单一特性,不如说围绕简洁性、性能、功耗、代码密度以及长期生态成本之间的权衡。评论者强调,指令融合、压缩编码、条件移动、内存模型以及面向语言或领域的扩展等细节,可能在不同目标市场中带来好处或坏处,从微小嵌入式核心到高端服务器皆然。许多人得出的结论是,RISC‑V 小而可扩展的基础和开放许可使其成为很可能的长期基础,但也指出,现实世界中的成功将更多取决于微架构实现和软件工具链,而不仅仅是 ISA 本身的优雅。
ISA 设计中的细微差别与 RISC‑V 对比
- 参与者强调,ISA 设计是多维度的;互联网上的争论常常只盯住单一方面(解码简单性、某种条件分支形式等)。
- RISC‑V 因其简洁性和良好的代码密度而受到称赞,尤其是在 64 位上,而且规范中已经明确预期了指令融合。
- 报告称,与 Arm 相比,测得的“路径长度”(动态指令计数)非常接近;有些人认为这“很棒”,另一些人则说这只是“并不更差”,尤其是在只评估了 rv64g 且忽略了融合/扩展的情况下。
- 许多人认为,简洁性以及与 Arm 相近的性能是一项重大胜利。
条件移动、寻址模式与压缩指令
- 关于基础 RISC‑V 缺少条件移动和更丰富寻址模式的问题,存在争论。
- 一方认为:主张增加这些特性的人应当用真实硅片和数据证明收益。
- 另一方认为:来自其他 ISA 的经验表明这些特性确实可能带来非平凡收益,不过相关数字很少。
- 压缩(C)扩展:
- 支持者表示,它能改善代码尺寸和指令缓存行为;大型内核设计者报告称,只要从一开始就把它设计进去,控制起来是可行的。
- 批评者强调复杂性:错位、页面/PMA/PMP 边界问题、与 CHERI 的交互;一些厂商提出了替代编码,甚至提出“all-in”式的大改动,而其他人对此强烈反对。
兼容性、未定义行为与事实上的规范
- 一个关于 486 标志位“bug”被游戏依赖的故事说明了,规范中“未定义”的行为如何会变成事实上的必需品,迫使未来芯片去模拟它。
- 这也联系到更广泛的一点:真实世界中的规范往往最终会变成“主导实现所做的一切”,而不只是书面文档本身。
面向领域的指令与语言目标
- 有人主张自动探索面向 JavaScript/Python 等语言定制的大型复杂指令设计空间。
- 反对意见:
- 这类语言并不存在单一瓶颈,而且工作负载会演变。
- 过去的领域专用 ISA 特性(例如 JVM 执行、重型寄存器窗口)往往只在很窄的条件下取胜,或在真实世界中的回报令人失望。
- 专用加速器(媒体、ML)已经很常见,而且对许多任务更合适。
ISA 与微架构、功耗和性能
- 一种观点是:说某个 ISA“更快”,就像说某种语言的语法“更快”一样;多数结果取决于实现。
- 另一些人回应说,ISA 语义会像语言 API 一样约束实现,并可能带来持续性的开销(例如,语言类比中的强制堆分配 vs 栈分配)。
RISC‑V 生态、可扩展性与未来
- 有人预测 RISC‑V 会占主导地位并冻结 ISA 设计;也有人预计会通过自定义扩展出现明显碎片化,甚至在高端需求分化后出现未来的“RISC‑VI”。
- 极小的基础 ISA 加上标准化扩展机制,被视为既是优点(复用、开放),也是张力来源(重叠或竞争的扩展、兼容性配置文件)。
- 规范和操作系统中都存在在运行时查询所支持扩展的机制;生态系统能否很好地处理大量自定义扩展,被视为一个开放的软件问题。
业余与实验性 ISA
- 有几位提到了他们个人设计的 ISA 和 CPU(受 x86 启发但更简化、带有时序保证的 RISC 风格信号处理核心、类似 SuperH 的紧凑型 2 操作数 16 位编码)。
- 这些例子说明了代码密度、指令数量、编译器复杂度与硬件简洁性之间的权衡,并表明即使在主要厂商之外,ISA 实验也仍在继续。
软件生态与文档
- 新 ISA 的一大障碍是工具链和生态系统:内核、主流编译器/JIT、数学/加密/媒体库。
- 开源在一定程度上降低了这一门槛,而半自动化的编译器后端生成也正在出现。
- 另一个挑战是缺乏公开共享的微架构数据和时序模型;大多数实际结果仍然是专有的。
- GPU 被视为一个极端例子:硬件 ISA 故意隐藏在厂商 IR 之后,从而允许在不破坏软件的情况下进行激进变化,这与寿命很长的 CPU ISA 不同。