SVE(ScalableVectorExtension)是armAArch64架構(gòu)下的下一代SIMD指令集。
它旨在加速高性能計算。
SVE引入了許多新的體系結(jié)構(gòu)功能,例如?可變矢量長度?每個通道的預(yù)測?聚合加載和分布式存儲?水平操作本文將對SVE進行基本介紹。
1. SIMD指令開發(fā)歷史的智能從上圖可以看出,SIMD指令的總體趨勢正在朝著越來越長的方向發(fā)展。
通過armSVE,它最多可以支持2048位向量操作。
2.背景Armv7的高級SIMD(即,armNEON或“ MPE”多媒體處理引擎)指令集已于2005年發(fā)布,并且已經(jīng)存在了十多年。
Armv7NEON的主要功能如下:?支持8/16/32位整數(shù)運算,支持非IEEE兼容的單精度浮點運算,支持指令條件執(zhí)行?32個64位向量寄存器,也可以是被視為16個128位向量寄存器?設(shè)計用于加速CPU端的多媒體處理任務(wù)。
升級到armv8架構(gòu)時,AArch64NEON指令集已進行了許多改進,例如:?支持IEEE兼容的單精度和雙精度浮點運算以及64位整數(shù)矢量運算?32個128位矢量寄存器?這些改進使NEON指令集更適合于通用計算,而不僅僅是多媒體計算。
但是到目前為止,armv8的新市場需要更徹底的SIMD指令改進。
我們需要能夠并行處理非常規(guī)數(shù)據(jù)和復(fù)雜數(shù)據(jù)結(jié)構(gòu),并且我們還需要更長的向量。
SVE是出于這個原因而誕生的。
SVE旨在加速高性能計算。
3. SVE功能SVE是armv8AArch64體系結(jié)構(gòu)的下一代SIMD指令集。
它不是NEON的替代品,而是專注于高性能計算。
主要功能如下:?可變矢量長度?128位的整數(shù)倍。
支持多達2048位?不同的實現(xiàn)可以適應(yīng)不同的應(yīng)用場景而無需更改指令集?每個通道的預(yù)測?支持復(fù)雜的嵌套循環(huán)以及if / then / else條件跳轉(zhuǎn),無循環(huán)尾數(shù)。
?聚合加載和分布式存儲支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如步驟數(shù)據(jù)訪問,數(shù)組索引,鏈表等。
?水平運算?支持基本的歸約運算以減少循環(huán)依賴性。
4. SVE寄存器SVE寄存器有兩種類型:向量寄存器和預(yù)測寄存器。
SVE共有32個可變長度向量寄存器Z0-Z31(128位的整數(shù)倍,最大2048位),其中Z0-Z31的低128位[127:0]與AArch64SIMD&FP寄存器共享硬件資源V0-V31。
假設(shè)SVE的向量長度為??256,則向量寄存器視圖如下。
SVE支持8/16/32/64位整數(shù)運算和單精度/雙精度浮點運算。
SVE預(yù)測寄存器用于控制每個通道的操作。
有16個變長預(yù)測寄存器P0-P15。
預(yù)測寄存器的每個位對應(yīng)于向量寄存器的字節(jié)。
假設(shè)SVE的向量長度為??256,則當(dāng)預(yù)測寄存器管理32位和64位操作時,視圖如下。
當(dāng)控制32位數(shù)據(jù)操作時,如果Pg寄存器的最小值為1,則激活通道操作,并且通道操作的結(jié)果通常存儲在目標(biāo)寄存器中;如果Pg寄存器的最小值為0,則通道操作處于非活動狀態(tài),該通道的操作結(jié)果將不會存儲在目標(biāo)寄存器中。
目的寄存器中的通道數(shù)據(jù)有兩種可能性:?將指令指定為Pg / z清除模式,并清除通道數(shù)據(jù)。
?該指令被指定為Pg / m組合模式,并且通道數(shù)據(jù)保持原始值。
5. SVE指令示例下面,我們通過一些示例介紹常用SVE指令的用法。
一種。
向量加法每個人都可能熟悉NEON的指令格式(如下所示)。
NEON指令通過加“ f”來區(qū)分整數(shù)運算和浮點運算。
指令助記符的前綴,例如“ add”。
和“添加”;另外,通過寄存器后綴“ .2s”,“。
4s”和“ .2d”也可以通過寄存器“ .2s”,“。
4s”和“ .2d”來實現(xiàn)。
表示兩個32位數(shù)據(jù),四個32位數(shù)據(jù)和兩個64位數(shù)據(jù)的操作。
?通過添加“ f”,還添加了addv0.4s,v0.4s,v1.4s?faddv0.2s,v0.2s,v1.2s?faddv0.2d,v0.2d,v1.2dSVE指令。
指令助記符的前綴區(qū)分整數(shù)運算和浮點運算。
但是SVE是