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