FPU(Floating-Point Unit)
浮點運算單元是處理器內(nèi)部用于執(zhí)行浮點數(shù)計算的邏輯部件。因為并不是所有的處理器都需要具備該功能,所以一些處理器實現(xiàn)的時候可以配置為包含或不包含該部件。
如果處理器包含了該運算部件那么表現(xiàn)形式就取決于ARM架構的定義, 要么是作為處理器架構里面定義好的一部分,要么是作為處理器基礎架構之外的擴展。浮點運算部件除了滿足IEEE754標準,另外也會定義相關的FPU工作方式以及相對應的指令集。即便處理器里面并沒有包含F(xiàn)PU單元,也仍然可以使用軟件的方式來執(zhí)行相關的浮點計算,但是使用軟件完成這些運算跟使用硬件FPU相比會慢許多。
不同的浮點運算單元支持不同大小的浮點數(shù)據(jù)類型,所以對于一些處理器來說可以配置為僅支持單精度浮點數(shù)或者是單、雙精度浮點數(shù)均支持。
VFP(Vector Floating Point)
“VFP”表示的是向量浮點運算單元,并且也是在ARMv8架構之前已經(jīng)出現(xiàn)了的浮點運算擴展單元的名稱。ARM架構默認并不支持向量浮點運算運算,因此相關的定義與實現(xiàn)都是通過架構的VFP擴展提供的。
之所以稱為“向量”浮點是因為在ARMv6及以前這個擴展不只是用于增加浮點數(shù)計算處理,同時也用于類似向量的SIMD浮點數(shù)計算處理。在本文中,“向量”用于表示對打包成單個大數(shù)據(jù)集的一項乘法運算(例如把多個獨立的數(shù)值合并存儲到一個寄存器內(nèi)相乘)。
在ARMv7架構中,這種使用VFP來處理向量浮點數(shù)據(jù)的方式不建議采用,相關的功能可以使用“先進SIMD擴展”來替代。
VFP有多個不同的版本 (VFPv1, VFPv2, VFPv3, VFPv4)用來支持不同的特性與數(shù)據(jù)類型。VFPv2用于ARMv5和ARMv6架構擴展,VFPv3與VFPv4用于ARMv7架構擴展使用。
ASE(Advanced SIMD Extension)
“ASE”是“先進SIMD擴展”的英文首字母縮寫。它是ARMv7架構上用于提供額外SIMD運算的擴展,既可以使用整數(shù)(即INT整型),也可以使用浮點數(shù)。
同VFP擴展相似,先進SIMD擴展也有多個版本(Advanced SIMDv1、半精度Advanced SIMD以及Advanced SIMDv2)用來支持不同的特性與數(shù)據(jù)類型。
盡管架構上的擴展是“先進SIMD擴展”,但實際用于描述這個特性的產(chǎn)品名為“NEON”。這兩個名稱代表的是相同的部件。
對于ARMv8A架構中,在默認的架構上包含了對向量SIMD運算的處理所以先進SIMD擴展也不再認為是一種擴展。它仍然作為NEON并且呈現(xiàn)在所有標準的ARMv8-A處理器核心中,因此在某些架構的核心上可能不包括它。.
NEON
如上面簡短的提及,“NEON”是用于ARMv7和ARMv8 Cortex-A與Cortex-R處理器的先進SIMD功能的產(chǎn)品名稱。
需要注意的是NEON(或ASE)的支持在不同處理器上可能有不同的形式呈現(xiàn),但基本的功能都是一樣的,也就是說,它允許在整數(shù)或者浮點數(shù)據(jù)執(zhí)行SIMD運算。 所使用的向量大小、向量的數(shù)量、所支持的浮點數(shù)類型等都取決于其具體的實現(xiàn)。
有關于NEON指令的更多信息可以從這里獲得。
MPE
MPE(Media Processing Engine)是一些ARMv7A處理器當中先進SIMD部件使用的名稱:Cortex-A5、Cortex-A7以及Cortex-A9。它通常也被稱作“NEON MPE”或者“NEON多媒體處理引擎”,它也是處理器實現(xiàn)ASE/NEON支持后的別稱。
SVE
SVE(Scalable Vector Extension)如前面所提到的,ARMv8-A架構已經(jīng)包含了“先進SIMD”支持,用于提供SIMD向量處理能力。SVE是ARMv8-A架構的一種擴展,它表示的是可變向量擴展。
這個擴展只在AArch64模式下支持使用,它提供了額外的寄存器來支持更大向量、額外的指令以及其它的特性。如果要包含SVE則需要處理器核心對NEON提供支持。
之前支持SIMD運算使用的是固定大小的數(shù)據(jù)項,比如ARMv7-A先進SIMD使用16個128位的數(shù)據(jù)項或者32個64位的數(shù)據(jù)項。而SVE的好處是它擁有的32個向量寄存器可以并成一個2048位的大小,而且向量的大小是可以通過軟件來控制的。這也就是為何它叫做“可變”向量擴展—向量的大小可以在運行中調(diào)整為不同大小,且這個特性并不隨處理器實現(xiàn)而改變。
之前版本的SIMD支持(比如NEON)需要將數(shù)據(jù)提前處理成處理器實現(xiàn)的向量運算所對應的大?。ㄟ@類數(shù)據(jù)通常也稱作“已調(diào)節(jié)”數(shù)據(jù))。SVE允許向量數(shù)據(jù)的大小在運算過程中被改變,無需重寫或重新編譯代碼,使得它更加容易實現(xiàn)那些處理SIMD運算的軟件開發(fā)。
SVE2是SVE更新后的版本,主要區(qū)別在于附加了更多的指令支持。這樣就使得它可以在更寬的應用范圍加速更多的算法。
有關于SVE指令的更多信息可以從這里獲得,類似的SVE2指令的更多信息可以從這里獲得。
SME
SME(Scalable Matrix Extension)是ARMv9-A架構提供的建立在可變向量擴展(SVE和SVE2)上增加了對矩陣處理支持。它包含了一定數(shù)量的新指令,相當于處理器的新模式—這個模式用于執(zhí)行矩陣運算,并且這也使得它在處理矩陣運算以及常規(guī)的SVE SIMD運算時更容易使用不同的向量大小。
有關SME指令的更多信息可以從這里獲得。
MVE
MVE(M-profile Vector Extension)是ARMv8-M架構專用的,它提供了大量對SIMD運算的支持。跟NEON作為A-系列先進SIMD擴展的產(chǎn)品名字一樣,“Helium”則是M-profile Vector Extension的產(chǎn)品名稱。
MVE可以分為2大類,MVE-I和MVE-F。MVE-I僅對整型向量提供支持,MVE-F則對浮點數(shù)據(jù)向量提供支持。要包含MVE-F那么處理器核心就需要支持MVE-I以及浮點擴展。
有關MVE指令的更多信息可以從這里獲得。