简单阐述下armv8.1-m的一些特性,更多的特性及其详细信息,请查看armv8-m architecture reference manual-ddi0553b_m。
1. mve(m-profile vector extension) or helium technology
mve其实就是arm-m系列的simd特性,使得m-profile processor在dsp和ai等应用领域具有更强的处理能力。
8个128bit的vector size,可以拆成多个elements。
lane predication,适用code形式:if (a[i] != 0) then b[i]=a[i]*b[i],当然还有其它变形形式,这时候需要结合vpte指令来配合。
vector gather load和vector scatter store,如vldrb, vldrh, vldrw, vldrd (vector)和vstrb, vstrh, vstrw, vstrd (vector)等。
mve interleaving/de-interleaving loads and stores,如vld2/vld4和vst2/vst4等。
beatwise operation,因为vector可能的一条指令会执行多个步骤,如果在执行期间有中断,可以用eci寄存当前instruction执行到哪个步骤了。
support circular buffer,combine an instruction that generates wrapping offsets(viwdup) with a scatter‐gather instruction to access data at these offsets。
2. lob/loop tail predication/bf
lob/loop tail predication/bf可以用于提高loops循环和branches分支的效率,减少不需要耗在control flow指令上的时间。
loop iteration optimization: lob,在lo_branch_info寄存器里存入end_addr和jump_addr,然后next instruction的address匹配上end_addr就可以直接跳转了,甚至都不需要去去le跳转指令了。减少在必须要的循环控制指令上的时间消耗。需要用到wls和le指令。
loop tail predication,假如处理的elements个数不是vector length的整数倍内,例如vector length=4,但要处理7个elements?一种方法就是最后一个使用普通的非vector去处理,前面的仍然用vector处理。另一种更好的方法是mve中引入了wlstp/letp指令对,允许loop迭代中的最后一条vector instruction只处理remaining elements,在loop开始之前用wlstp设置lr寄存器的值为多少个要处理的elements,每循环一次,letp对lr减去vector的elements个数。
branch feature:类似于提供“variable length delay slots” – to further eliminate bubbles caused by branch instructions (but only direct branches), since we already have the “lo_branch_info” hardware available and can double use it to squeeze out a bit more performance.bfx指令执行的时候,会设置lo_branch_info去指示在哪一个address上会发生跳转,因此当执行执行到该address时,就可以执行跳转了,甚至都不需要取和译码bx lr指令了,因此减少因为执行分支而造成的branch penalty(通常那些已经取的instruction会被处理为bubbles)。如果在bfx和bx期间发生interrupt了,那么lo_branch_info会被清除,这时候就需要bx lr了。如果在processor中不支持branch feature这个特性,那么将被实现为nop。
3. security 由于越来越多的mcu会运行第三方软件和连接到互联网上,如何保证不被黑客攻击也成了重要的问题。
execution permission:例如在v8.1-m里有pxn/uxn,减少被利用堆栈溢出攻击而导致的安全问题。pxn是privileged execute-never(这个是因为有些code就是想让它在non-priv模式下执行,来限制访问权限,防止资源受到破坏),uxn是non-privileged execute-never。在mpu_rlar寄存器中有pxn bit,如果某个region的该bit置为1,那么privilege去访问该region的code会fault exception。
v8.2-m pac(pointer authentication): 减少利用rop(return-oriented programming)攻击导致的安全问题 。将会对return address(pointer)进行加扰,然后要返回时去除扰动,如果认证通过,那么就正常返回,反之报出exception。
v8.2-m bti(branch target instructions): 减少利用jop(jump-oriented programming)攻击导致的安全问题。bit的基本思想就是限制indirect branch只能跳转到特定的address空间上(only branching to allowed “landing pad instructions”)。
dit(data independent timing):同样的instruction可能会花费不同的执行时间,例如处理11和9999999999的算术运算占用时间不一样的,这样可能会暴露data信息给黑客。因此在aircr寄存器中增加了dit bit,如果使能dit功能,那么所有alu instructions的执行时间才会采用最长的cycle数,也就是通过降低performance来换取安全。
ude(unprivileged debug extension):在v8.0-m中,如果secure debug打开,那么software开发人员对priv和un-priv的secure world有完全的debug访问权限。但是,如果禁用了secure debug,那么debugger将不能访问所有的secure world。在v8.1-m中新增了更细粒度的debug方式(ude),当secure debug被关闭了,secure priv software可以通过dauthctrl寄存器的uiden和uidapen来使能ude。这样也可以使用unpriv去debug一些library code的了,而不是局限于privilege模式才能debug。另外说下,armv8在handler mode下是privilege的,在thread mode下,可能是priv或un-priv,取决于control寄存器的值。
4. 附注
在arm-m手册中涉及到lanes、beats和elements的概念。
operation的lane宽度是由正在执行的instruction决定的。允许的lane宽度和每一个beat进行的lane operation如下:1个beat是32bit,lane width可以有8/16/32/64bit.
for a 64-bit lane size, a beat performs half of the lane peration.
for a 32-bit lane size, a beat performs a one lane operation.
for a16-bit lane size, a beat performs a two lane operations.
for an 8-bit lane size, a beat performs a four lane operations.
elements就是表示有多少个data会放在每个lane中。比如lane=16bit,那么element的size就为16bit(2byte, size=2’b01)。其它类似。因为lane最大为64bit,也就是说elements最大也就是64bit(4byte, size=2’b11)。
虽然vector instruction可以同时进行多个elements的运算,有时候element size(esize)可以为32bit,但要运算的data实际为16bit,如vldrh,这时候会对从memory里load过来的data进行zero或sign-extended,然后才放到vector register。这个实际给每个element load的data大小就是msize,因此msize肯定不大于esize的。总得来说,msize永远不会大于esize,如果msizemsize,也就是说每一次load的data其实可以填充多个elements的,比如dsize=word, msize=byte, esize=byte,那么只需要load 4次data就可以填满1个register vector了,如果每次load的size为msize(byte),那么需要load 16次才可以填满,想想就知道效率很低的。
如果dsize
不过有一点要注意,在做对齐检查和atomicity分析时,由于实际其实就是要load msize大小的数据,dsize只是投机多搞一些数据回来,因此检查和分析还是要按msize来的。
vector instruction涉及到128bit,也就是有4个beats,因此是从beat0到beat3顺序执行的。
在每一个architecture tick下,会执行多少个beat,表征了该system是多个beat。如下:
in a single-beat system, one beat might occur for each tick.
in a dual-beat system, two beats might occur for each tick.
in a quad-beat system, four beats might complete for each tick.
arm的cortex-m55就是一个dual-beat的processor。在dual-beat overlap system中,意味着上一条vector instruction的最后two beats可以和后一条vector instruction的two beats可以重叠起来,加快执行效率。以下是dual-beat system在每一个architecture tick下,执行的示意图。
如果data dependency是以beat粒度,而不是instruction粒度进行的,architecture是允许vector instructions有overlap的。在每一个architecture tick下,architectural instruction的重叠情况可由epsr.eci值来表示。
Leader蓝色精灵洗衣机亮相:杀菌率达99.99%
用户使用iphone12时应用程序出现了错误信息
动画制作效率提升80%!这个AI软件一键实现高精度视频动捕
顺络电子:变压器产品订单稳步呈增长势态,汽车电子市场稳速发展
GSMA:未来7年亚洲运营商将对5G投入3700亿美元
解析Armv8.1-M的一些特性
Ubuntu支持Windows的WSL后能保持领先优势吗
京东方取得显示面板制备及显示方法专利
晶粒度及其对材料性能的影响
一加5什么时候上市?一加5最新消息:一加5要来了:双摄+骁龙835!但8GB内存有必要吗?
国内6月半导体54起融资情况一览(附图)
区块链技术已经进入了几乎所有可以想象的行业
PCB上游原物料价格大幅上涨
射线敏感器件,射线敏感器件是什么意思
通过持续元学习解决传统机器学习方式的致命不足
金宏气体:高纯氧化亚氮、超纯氨产品通过中芯国际认证
要想不被取代,决策权不能完全交给机器
最大的手机电池容量有多少?16000mAh电池容量的手机要来了
2018 年全球半导体产业的资本支出将首次突破千亿美元大关
水质急性毒性测定仪的原理及特点