risc-v真的比arm简洁吗?

微信公众号 mindshare思享

最近看到一篇文章“RISC-V精简到何种程度?能省的都省了!”,对arm构架的说法有些误导,希望这篇文章可以帮助大众更了解arm构架。

  

RV真的比arm指令集简洁吗?

抛开对CPU性能和功耗影响谈指令简洁是撒流氓的行为。Arm定义的指令都是经过多年对软件和编译器的理解和实践来决定的。比如在armv6-M中有REV,REV16的指令,用来对一个寄存器里的byte进行倒转,当然也可以不定义REV指令,而使用移位和逻辑运算来达到同样的目的,但是需要更多的指令组合,没有用REV性能好。

基础的armv6-M指令集仅仅有56条指令,且已经包含了DMB,DSB,ISBbarrier指令和WFI/SEV这种功耗管理指令。使用这些指令就可以实现所有的应用和RTOS的功能需求。

随着对性能的更多要求,V7-M,V7E-M会增加更多的比如DSP,SIMD,FP,除法等更多指令的支持.大家实际上也看到了RV为支持SIMD,DSP也会大量增加指令,很多实现可能不会仅仅是最基础的47条指令。在这方面RV还需要很多指令定义和标准化的工作要做。

实际上由上面的指令框图我们可以看出,arm M-profile的指令集也是非常模块化的设计,在最基础的指令集上层层扩展。

Arm指令没有高效的立即数load指令?

Armv7-M有MOVW和MOVT的指令,可以用两条指令将任意立即数移到寄存器中。  

MOVW  r0, #xxxx      ;load lower 16bit

MOVT    r0, #xxxx      ;load upper 16bit

这两条指令共占8 byte。

要知道RV借鉴了很多arm的经验呢….

“只有小于和大于等于” 是优势?

了解arm条件执行指令的朋友都知道,arm的跳转指令是可以条件执行的,比如

beq, bne, blt, bge … ,这本不意味着增加了N条指令,eq,ne, lt, ge只是一种汇编的表达,其实他们都会变成一条指令,

eq, ne, lt, ge编码到指令编码的cond bit field, 是不是很酷?

让编译器做更多?

极端一些讲,如果事情都给编译器做,CPU的ISA就不要发展了。为什么需要新的指令?主要是在新的领域遇到了新的计算需求,比如arm的NEON,乘加计算,DSP运算。如果只是使用简单指令的组合,需要更高的取指和解码带宽,如果后端执行只能做简单的运算,遇到如并行运算和DSP运算就需要多个后端执行pipeline的共同协作,可能带来性能的问题。

很多时候指令集的实现是通过最佳实现来演化的,需要充分考虑,

·     指令实现的性能和硬件代价

·     软件的使用频率和范围

·     是否对编译器友好

arm指令集历经近30年的进化,arm和最广大的硬件,软件和工具伙伴一起,共同打造了高效,实用,与时俱进的RISC指令集。

往期文章:

NMI, FIQ 与arm构架那点事-(2)

NMI,FIQ 与arm构架那点事-(1)

华为发布Kirin980:世界上第一个7nm AI移动芯片

Arm构架CPU:岂止于大

深入理解Arm Cortex-A76处理器

Armv8.x构架和GICv3/v4,SMMUv3介绍

Armv8.x构架和GICv3/v4,SMMUv3介绍-2

Armv8-M:为IoT安全而生

Armv8-A虚拟化:性能和构架分析(1)

Arm虚拟化:性能和构架分析(2)

Arm虚拟化:性能和构架分析(3)

Scalable Vector Extension (SVE) 介绍

Spectre/Meltdown演义-专业篇(3)

Hacking arm PAN?

用DS-5调试复杂问题

Spectre/Meltdown演义--专业篇(1)

Spectre/Meltdown演义-专业篇(2)

Armv8上不弃不离的NEON/FPU

Spectre/Meltdown演义-- 通俗篇

[免费]Armv8-A网上研讨会资料

筑起Linux Kernel 安全堡垒

Arm Linux Young和Dirty Page的过去和现在

Secure Element 介绍

揭秘Arm32 Linux的User和Kernel的页表映射

Arm32 Linux SMP 启动流程

C++ atomic memory model和Arm实现方式

Arm64 Linux Kernel KPTI (Meltdown防御)方案解释

浅谈Trustzone技术

 

猜你喜欢

转载自blog.csdn.net/weixin_39366778/article/details/82942431