0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

前ARM工程师批评:RISC-V不完美之处

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:嵌入式ARM 2020-12-30 09:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

本文最初完成于几年之前,彼时作者正在 ARM 公司担任执行核心验证工程师职位。作者当时的工作深入或围绕多种处理器核心,而文中提到的观点深受这些经验的影响,换句话说,这些观点存在不同程度的偏见。

作者依旧坚持认为 RISC-V 的设计并不完美,但同时也承认,如果现在需要搭建一个 32 或 64 位的 CPU,他在实现构建时也会从现有工具中受益。

本文主要基于 RISC-V ISA 规范 v2.0,部分已更新至 v2.2。

一些观点

RISC-V ISA 对极简主义的追求钻了牛角尖,它极力强调减少指令数量,规范编码等等。而这种追求则导致了错误的正交性(分支、调用、返回时重复使用同一指令),以及对赘余指令的需求,这些在程序大小和指令数量上都会影响到代码密度。

以下面的 C 代码为例:

int readidx(int *p, size_t idx){ return p[idx]; }


简单的数组索引,非常常见的操作。将其在 x86_64 中编译:

mov eax, [rdi+rsi*4]ret

或者是 ARM 中:

ldr r0, [r0, r1, lsl #2]bx lr // return

但是在 RISC-V 中需要的代码则是:

# 很抱歉如果有任何语法错误,risc-v 并没有在线编译器slli a1, a1, 2add a0, a1, a1lw a0, a0, 0jalr r0, r1, 0 // return

RISC-V 的极简主义让解码器(CPU 前端)变得更简单,代价则是需要执行更多的指令。然而,相对于拓宽流水线这个难题而言,解码不规则指令的问题很好解决,主要难点在于确定指令的长度是否一致。x86 的众多前缀就是个极佳的反面教材。对指令集的简化不应追求极限。寄存器 + 移位寄存器的内存操作指令是程序中非常常见且简单的操作,对于 CPU 而言也很容易实现。即使无法直接执行,CPU 也可以相对轻松地将其分步执行,其操作复杂程度远逊色于融合简单操作的序列。

CISC CPU 中的“复合”指令,繁复、少有使用且普遍性能低下,而 CISC 和 RISC CPU 通用的“功能”指令则意指结合了少量操作序列并且使用率高、性能高的指令。这二者应当有所区分。

还不错的部分

几乎不受任何限制的可扩展性。虽说这是 RISC-V 的卖点,但它同时也是碎片化、不兼容生态系统的罪魁祸首,在管理时还需加倍小心。

调用、返回和寄存器间接分支使用同一指令(JALR)。分支预测需要额外解码。

调用:Rd = R1

返回:Rd = R0, Rs =R1

间接分支: Rd = R0, Rs≠ R1

(奇怪分支:Rd≠ R0, Rd ≠ R1)

可变长度编码无法自我同步。x86 和 Thumb-2 中都存在的常见问题,会导致实现和安全性方面的各种漏洞,例如面向返回的编程攻击。

RV64I 规定所有 32 位值的符号扩展。这一点会导致不必要的上半切换,或者需要对寄存器的上半部分进行特殊调整。建议采用零扩展,在减少切换的同时,通常还可以在已知上半部分为零的情况下,通过追踪”为零“位来进行优化。

乘法是可选项。考虑到高速乘法器在微型实现中占用的面积不容忽视,创建占用更小,还可以将现有 ALU 广泛用于多循环乘法的小型乘法器不失为良策。

LR/SC 指令对有限使用子集有严格的最终转发要求。尽管这项限制颇为严苛,但对于没有缓存的小型实现而言有可能会带来一些问题。

这一点似乎是 CAS 指令的替代品,具体请参照有关该指令的注释。

FP 粘性位和舍入模式处于同一寄存器中。如果想通过执行 RMW 操作改变舍入模式,则需要对 FP 管道进行序列化。

FP 指令支持的编码精度有 32 位、64 位和 128 位,唯独没有硬件中更为常见的 16 位。

这点很容易修正:我们有免费的字组编码 2’b10。

更新:v2.2 中添加了十进制 FP 扩展占位符,但仍然没有半精度占位符。迷惑行为。

FP 寄存器文件中的 FP 值未指定,但可以通过加载 / 存储观察到。

仿真器作者要恨死你了。

VM 迁移会将变为不可能。

更新:v2.2 需要 NaN 装箱更宽的值。

糟糕的部分

没有条件代码,只有比较和分支指令。这一点自身没什么问题,但它意味着:需要编码一到二个寄存器说明符,导致条件分支中的编码空间减少。

没有条件选择,这一点在高度不可预测的分支中很有用。

加法 / 减法没有加进位或借位。(即使这样,这也比 ISA 将 flag 写入通用寄存器 GPR,然后在结果 flag 上分支要好。)

用户级 ISA 需要高精度计数器。在实践中,将这些计数器暴露给应用程序意味着侧通道攻击的好机会。

乘法和除法同属于一个扩展,无法单独实现其中之一。相比除法,乘法要简单许多,而且在大多的 CPU 上很常见。

基础 ISA 中没有原子指令。多核微型处理器越来越普遍的今天,LL/SC 类型原子指令也越来越廉价:只需要 1 位 CPU 状态即可完成最小 CPU 实现。

LR/SC 和更复杂的原子指令同属于一个扩展。直接限制了小型实现的灵活性。

非 LR/SC 的一般原子指令不包含 CAS 原语

CAS 的设计是为了避免需要一条指令读取 5 个寄存器的情况,例如:加法器、Cmp:CmpLo,SwapHi:SwapLo。但 LR/SC 用于取代 CAS 的保底进度很可能只会在实现上带来更高的开销。

原子指令仅支持 32 位或 64 位操作,不支持 8 位或 16 位。

对 RV32I 而言,想在整数和浮点寄存器文件之间转换 DP 和 FP,只能通过内存解决。

举例来说:RV32I 的 32 位 ADD 和 RV64I 的 64 位 ADD 共用同一套编码,RV64I 又多加了一套 ADD.W 编码。如此一来,CPU 实现这两种指令时麻烦了许多,不如直接新增一套 64 位编码。

没有 MOV 指令。汇编器对于 MV 的等效指令是:MV rD, rS -> ADD rD, rS, 0。MOV 优化通常由高端处理器,尤其是失序处理器完成。识别 RISC-V 规范的 MV 需要一个 12 位的立即数。

在没有 MOV 指令的情况下,ADD rD, rS, r0 是对 MOV 不错的替代。它更易被解码,而 CPU 通常也会有特殊情况下的逻辑来识别零寄存器。

尤为糟糕的部分

JAL 在本该只是 R1(分支时是 R0)的链接寄存器编码上浪费了 5 比特。

这意味着 RV32I 有 21 位的分支位移(对于诸如浏览器等大型应用时,不使用多指令序列或者分支 island 时会不够用)。

其实是 1.0 版本 ISA 的历史遗留问题

尽管 RISC-V 在统一编码上花了大功夫,但加载 / 存储指令的编码仍然是不同的(寄存器 vs 立即字段互换)。

似乎寄存器编码的最终正交性要比两种高度相关指令的正交性更受欢迎。考虑到地址生成是对时序更为敏感的操作,这种选择有点奇怪。

寄存器偏移量(Rbase +Roffset)或索引(Rbase + Rindex << Scale)没有负载。

FENCE.I 意味着指令缓存和前面的存储区必须完全同步,无论是否有 fence。实现时需要在 fence 上刷新 I,或者通过snoop的方式监视D 和存储缓存区。

RV32I 中,读取 64 位计数器需读取上半部分两次,并进行比较和分支,以防在读取操作时下半部分和上半部分发生借位。

通常 32 位 ISA 包含了一个“读取一对特殊寄存器”的指令来避免这个问题。

架构上没有定义“提示”编码空间。提示编码是指在当前处理器上作为 NOP 执行,但在之后的变量上有操作的编码。

“NOP 提示”的常见例子是自旋锁 yield。

更复杂的提示也有实现。即那些对新处理器有明显副作用的提示,例如 x86 的边界检查指令被编码在提示空间,以便二进制文件保持向后兼容。

责任编辑:xj

原文标题:前ARM工程师批评:RISC-V尤为糟糕的部分!

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5186

    文章

    20153

    浏览量

    328935
  • RISC-V
    +关注

    关注

    48

    文章

    2794

    浏览量

    51921

原文标题:前ARM工程师批评:RISC-V尤为糟糕的部分!

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RT-Thread生成玄铁RISC-V BSP的CDK工程开发指南 | 技术集结

    目录开发环境配置工程创建CDK工程运行CDK工程编译工程运行与调试RT-Thread课程上线玄铁系列RISC-VBSP上手指南RT-Thre
    的头像 发表于 09-28 10:06 3932次阅读
    RT-Thread生成玄铁<b class='flag-5'>RISC-V</b> BSP的CDK<b class='flag-5'>工程</b>开发指南 | 技术集结

    RISC-V 手册

    年提出。其核心理念是开放性与模块化设计,与x86(CISC)和ARMRISC)形成差异化竞争,现已成为全球芯片创新的重要驱动力135。核心特点与优势开源开放RISC-V采用开放标准协议,无专利壁垒与授权费用,开发者可自由使用、
    发表于 07-28 16:27 11次下载

    RISC-V 发展态势与红帽系统适配进展

    2025 年 7 月 18 日,在第五届(2025)RISC-V 中国峰会的软件与生态系统分论坛上,红帽软件(北京)有限公司首席软件工程师RISC-V 国际基金会大使傅炜分享的主题是《红帽在
    发表于 07-18 10:55 3876次阅读
    <b class='flag-5'>RISC-V</b> 发展态势与红帽系统适配进展

    包云岗:原位替代 ARM,并未真正发挥 RISC-V 的优势

    RISC-V 的核心优势在于开放开源的模块化设计,相比之下,ARM 的优势在于成熟的生态闭环。因此,在第五届(2025)RISC-V 中国峰会主论坛上,中国科学院计算技术研究所副所长、中国开放指令
    发表于 07-17 14:54 5078次阅读

    Tenstorrent 首席架构:未来 RISC-V 会是计算机的主流

    当前,按指令集架构(ISA)分类,主流架构包括 x86 架构、ARM 架构和 RISC-V 架构。作为开源精简指令集(RISC),RISC-V 的主要特点有模块化设计,开发者可自由扩展
    发表于 07-17 11:26 1396次阅读

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令集特性及实际测试数据展开剖析。以 ARM Cortex-M33 这类 ARMv8M 架构核心与采用
    的头像 发表于 07-02 10:29 1222次阅读
    同一水平的 <b class='flag-5'>RISC-V</b> 架构的 MCU,和 <b class='flag-5'>ARM</b> 架构的 MCU 相比,运行速度如何?

    RISC-VARM有何区别?

    在微处理器架构领域,ARMRISC-V是两个备受关注的体系。ZLG致远电子在推出ARM核心版后,又推出了基于RISC-V的MR6450核心版,这引发了人们对这两种架构差异的深入探讨。
    的头像 发表于 06-24 11:38 1731次阅读
    <b class='flag-5'>RISC-V</b>和<b class='flag-5'>ARM</b>有何区别?

    FPGA与RISC-V浅谈

    全球半导体产业竞争格局正在经历深刻变革,物联网、边缘计算等新兴技术的蓬勃发展,让RISC-V凭借其开源、精简以及模块化的灵活优势,日益成为业界焦点,也为全球半导体产业注入新的活力与挑战
    发表于 04-11 13:53 548次阅读
    FPGA与<b class='flag-5'>RISC-V</b>浅谈

    澎峰科技荣获RISC-V联盟2024年度前沿科技奖

    近日,中国RISC-V生态大会在北京成功举行。本次大会以“共建生态·共享未来”为主题,邀请了来自全球的行业专家、技术领袖、企业决策者和RISC-V资深工程师一同探讨技术趋势、行业洞见及产业未来,齐心共筑
    的头像 发表于 03-04 14:34 799次阅读
    澎峰科技荣获<b class='flag-5'>RISC-V</b>联盟2024年度前沿科技奖

    “开放·连接 ”2025玄铁 RISC-V 生态大会议程公布!

    2025年2月28日,我们诚邀您参与“开放·连接 ”2025玄铁 RISC-V 生态大会。与来自全球的行业专家、技术领袖、企业决策者和 RISC-V 资深工程师共赴北京,一同探讨技术趋势、行业洞见及产业未来,齐心共筑
    发表于 02-24 16:25

    ArmRISC-V架构的优劣势比较

    关于ArmRISC-V的讨论涉及多个层面。虽然多种因素共同作用于这些架构的整体性能,但每种架构都有其最适合的几类主要应用场景。 Arm 长期以来,专有技术往往意味著高昂的许可费用,Arm
    发表于 02-01 22:30

    关于RISC-V芯片的应用学习总结

    RISC-V的开源特性使得开发者可以针对特定应用进行优化,进一步提高设备性能。 在高性能计算领域,RISC-V芯片也开始展现出其潜力。虽然传统上高性能计算领域主要由x86和ARM架构占据,但
    发表于 01-29 08:38

    贸泽电推出RISC-V技术资源中心

    Mouser推出内容丰富的RISC-V资源中心,为设计工程师提供新技术和新应用的相关知识。随着开源架构日益普及,RISC-V从众多选项中脱颖而出,成为开发未来先进软硬件的新途径。从智能手机和IoT设备,再到高性能计算,
    的头像 发表于 01-22 10:45 773次阅读

    RISC-V架构及MRS开发环境回顾

    PowerPC以及现在统治嵌入式市场的ARM。 2. 什么是RISC-V RISC全名Reduced Instruction Set Computer,即精简指令集计算机;V是罗马字
    发表于 12-16 23:08

    RISC-VARM 架构的区别 RISC-V与机器学习的关系

    在现代计算机架构中,RISC-VARM是两种流行的处理器架构。它们各自具有独特的特点和优势,适用于不同的应用场景。 1. RISC-V架构 RISC-V(读作“risk-five”)
    的头像 发表于 12-11 17:50 4361次阅读