簡單闡述下ARMv8.1-M的一些特性,更多的特性及其詳細(xì)信息,請(qǐng)查看Armv8-M Architecture Reference Manual-DDI0553B_m。
1. MVE(M-Profile Vector Extension) or Helium technology
MVE其實(shí)就是ARM-M系列的SIMD特性,使得M-profile processor在DSP和AI等應(yīng)用領(lǐng)域具有更強(qiáng)的處理能力。
8個(gè)128bit的vector size,可以拆成多個(gè)elements。
lane predication,適用code形式:if (a[i] != 0) then b[i]=a[i]*b[i],當(dāng)然還有其它變形形式,這時(shí)候需要結(jié)合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,因?yàn)関ector可能的一條指令會(huì)執(zhí)行多個(gè)步驟,如果在執(zhí)行期間有中斷,可以用ECI寄存當(dāng)前instruction執(zhí)行到哪個(gè)步驟了。
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循環(huán)和branches分支的效率,減少不需要耗在control flow指令上的時(shí)間。
Loop iteration optimization: LoB,在LO_BRANCH_INFO寄存器里存入end_addr和jump_addr,然后next instruction的address匹配上end_addr就可以直接跳轉(zhuǎn)了,甚至都不需要去去LE跳轉(zhuǎn)指令了。減少在必須要的循環(huán)控制指令上的時(shí)間消耗。需要用到WLS和LE指令。
Loop Tail Predication,假如處理的elements個(gè)數(shù)不是vector length的整數(shù)倍內(nèi),例如vector length=4,但要處理7個(gè)elements?一種方法就是最后一個(gè)使用普通的非vector去處理,前面的仍然用vector處理。另一種更好的方法是MVE中引入了WLSTP/LETP指令對(duì),允許loop迭代中的最后一條vector instruction只處理remaining elements,在loop開始之前用WLSTP設(shè)置LR寄存器的值為多少個(gè)要處理的elements,每循環(huán)一次,LETP對(duì)LR減去vector的elements個(gè)數(shù)。
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指令執(zhí)行的時(shí)候,會(huì)設(shè)置LO_BRANCH_INFO去指示在哪一個(gè)address上會(huì)發(fā)生跳轉(zhuǎn),因此當(dāng)執(zhí)行執(zhí)行到該address時(shí),就可以執(zhí)行跳轉(zhuǎn)了,甚至都不需要取和譯碼BX LR指令了,因此減少因?yàn)閳?zhí)行分支而造成的branch penalty(通常那些已經(jīng)取的instruction會(huì)被處理為Bubbles)。如果在BFX和BX期間發(fā)生interrupt了,那么LO_BRANCH_INFO會(huì)被清除,這時(shí)候就需要BX LR了。如果在processor中不支持Branch Feature這個(gè)特性,那么將被實(shí)現(xiàn)為NOP。
3. Security 由于越來越多的MCU會(huì)運(yùn)行第三方軟件和連接到互聯(lián)網(wǎng)上,如何保證不被黑客攻擊也成了重要的問題。
Execution permission:例如在v8.1-M里有PXN/UXN,減少被利用堆棧溢出攻擊而導(dǎo)致的安全問題。PXN是Privileged Execute-Never(這個(gè)是因?yàn)橛行ヽode就是想讓它在non-priv模式下執(zhí)行,來限制訪問權(quán)限,防止資源受到破壞),UXN是non-Privileged Execute-Never。在MPU_RLAR寄存器中有PXN bit,如果某個(gè)region的該bit置為1,那么privilege去訪問該region的code會(huì)fault exception。
V8.2-M PAC(Pointer Authentication): 減少利用RoP(Return-oriented Programming)攻擊導(dǎo)致的安全問題 。將會(huì)對(duì)return address(pointer)進(jìn)行加擾,然后要返回時(shí)去除擾動(dòng),如果認(rèn)證通過,那么就正常返回,反之報(bào)出exception。
V8.2-M BTI(Branch Target Instructions): 減少利用JoP(Jump-oriented Programming)攻擊導(dǎo)致的安全問題。BIT的基本思想就是限制indirect branch只能跳轉(zhuǎn)到特定的address空間上(only branching to allowed “l(fā)anding pad instructions”)。
DIT(Data Independent Timing):同樣的instruction可能會(huì)花費(fèi)不同的執(zhí)行時(shí)間,例如處理11和9999999999的算術(shù)運(yùn)算占用時(shí)間不一樣的,這樣可能會(huì)暴露data信息給黑客。因此在AIRCR寄存器中增加了DIT bit,如果使能DIT功能,那么所有ALU instructions的執(zhí)行時(shí)間才會(huì)采用最長的cycle數(shù),也就是通過降低performance來換取安全。
UDE(Unprivileged Debug Extension):在v8.0-M中,如果secure debug打開,那么software開發(fā)人員對(duì)priv和un-priv的secure world有完全的debug訪問權(quán)限。但是,如果禁用了secure debug,那么debugger將不能訪問所有的secure world。在v8.1-M中新增了更細(xì)粒度的debug方式(UDE),當(dāng)secure debug被關(guān)閉了,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手冊(cè)中涉及到lanes、beats和elements的概念。
operation的lane寬度是由正在執(zhí)行的instruction決定的。允許的lane寬度和每一個(gè)beat進(jìn)行的lane operation如下:1個(gè)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就是表示有多少個(gè)data會(huì)放在每個(gè)lane中。比如lane=16bit,那么element的size就為16bit(2Byte, size=2’b01)。其它類似。因?yàn)閘ane最大為64bit,也就是說elements最大也就是64bit(4Byte, size=2’b11)。
雖然vector instruction可以同時(shí)進(jìn)行多個(gè)elements的運(yùn)算,有時(shí)候element size(esize)可以為32bit,但要運(yùn)算的data實(shí)際為16bit,如VLDRH,這時(shí)候會(huì)對(duì)從memory里load過來的data進(jìn)行zero或sign-extended,然后才放到vector register。這個(gè)實(shí)際給每個(gè)element load的data大小就是msize,因此msize肯定不大于esize的。總得來說,msize永遠(yuǎn)不會(huì)大于esize,如果msize
當(dāng)然,在processor實(shí)現(xiàn)時(shí),不只是每一個(gè)beat只load一個(gè)msize大小的data,這樣效率太低,如果在data width允許的情況下,可以load多個(gè)msize大小的data,也就是一次搞定multiple elements。
我們假設(shè)一次實(shí)際load的data為dsize,對(duì)scalar來說,由于不會(huì)進(jìn)行vector操作,esize沒什么用,msize也永遠(yuǎn)等于dsize。對(duì)vector來說,vector register存在多個(gè)elements的操作,如果esize用于表示每個(gè)element的大小,msize是element中真正會(huì)填充的數(shù)據(jù)大小,如果dsize>msize,也就是說每一次load的data其實(shí)可以填充多個(gè)elements的,比如dsize=Word, msize=Byte, esize=Byte,那么只需要load 4次data就可以填滿1個(gè)register vector了,如果每次load的size為msize(Byte),那么需要load 16次才可以填滿,想想就知道效率很低的。
如果dsize
不過有一點(diǎn)要注意,在做對(duì)齊檢查和atomicity分析時(shí),由于實(shí)際其實(shí)就是要load msize大小的數(shù)據(jù),dsize只是投機(jī)多搞一些數(shù)據(jù)回來,因此檢查和分析還是要按msize來的。
Vector instruction涉及到128bit,也就是有4個(gè)beats,因此是從beat0到beat3順序執(zhí)行的。
在每一個(gè)architecture tick下,會(huì)執(zhí)行多少個(gè)beat,表征了該system是多個(gè)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就是一個(gè)dual-beat的processor。在dual-beat overlap system中,意味著上一條vector instruction的最后two beats可以和后一條vector instruction的two beats可以重疊起來,加快執(zhí)行效率。以下是dual-beat system在每一個(gè)architecture tick下,執(zhí)行的示意圖。
如果data dependency是以beat粒度,而不是instruction粒度進(jìn)行的,architecture是允許vector instructions有overlap的。在每一個(gè)architecture tick下,architectural instruction的重疊情況可由EPSR.ECI值來表示。
審核編輯:湯梓紅
-
dsp
+關(guān)注
關(guān)注
555文章
8124瀏覽量
354545 -
mcu
+關(guān)注
關(guān)注
146文章
17751瀏覽量
358832 -
ARM
+關(guān)注
關(guān)注
134文章
9279瀏覽量
374009 -
寄存器
+關(guān)注
關(guān)注
31文章
5403瀏覽量
122947 -
ARMv8
+關(guān)注
關(guān)注
1文章
35瀏覽量
14381
原文標(biāo)題:學(xué)習(xí)分享 | Armv8.1-M的一些特性
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
keil mdk的一些常見錯(cuò)誤解析
使用ISE 13.3更改8.1 FIFO IP內(nèi)核中的一些參數(shù)可能有什么問題?
ARMv8-A AArch32主要特性
何謂神經(jīng)網(wǎng)絡(luò)處理指令?有什么作用?
你知道ARM Cortex-M55處理器的新功能都有哪些嗎
使用GCC10充分利用Arm架構(gòu)的案例
Armv8.1-M PAC和BTI擴(kuò)展簡析
介紹Armv8.6-A引進(jìn)的一些新功能的概況
ARMv8-M處理器故障處理和檢測(cè)
Armv8.1-M性能監(jiān)控用戶指南
Arm Cortex-M55處理器數(shù)據(jù)集
模擬電路的一些簡單的特性
下一代Armv8.1-M架構(gòu)能夠提升最小型邊緣設(shè)備的機(jī)器學(xué)習(xí)能力
直流電機(jī)的一些特性

評(píng)論