日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【NEON 】初探

發布時間:2023/11/27 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NEON 】初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NEON

文章目錄

    • NEON
      • 1 neon窺探
        • 1.1 neon用途
        • 1.2 neon處理機制
        • 1.3 neon發展歷程中的優缺點對比
        • 1.4 為什么使用neon
        • 1.5 Armv7/v8詳細差異
        • 1.6 Register寄存器
        • 1.7 指令系統間的關系與1.3相似
      • 2 neon 使用
        • 2.1 neon 指令格式
        • 2.2 AArch64 NEON 指令語法
        • 2.3 NEON 指令
      • 3.1 RK3399資料

1 neon窺探

參考資料

1.1 neon用途

NEON 技術是適用于Arm Cortex-A 系列處理器的高級 SIMD(單指令多數據)架構。它可以加速多媒體和信號處理算法,例如視頻編碼器/解碼器、2D/3D 圖形、游戲、音頻和語音處理、圖像處理、電話和聲音。

1.2 neon處理機制

NEON 指令執行“Packed SIMD”處理:

  1. 寄存器被視為相同數據類型元素的向量
  2. 數據類型可以是: ARM 32 位平臺上的有符號/無符號 8 位、16 位、32 位、64 位、單精度浮點、單精度浮點和雙精度浮點指向 ARM 64 位平臺。
  3. 指令在所有通道中執行相同的操作

1.3 neon發展歷程中的優缺點對比


Armv6:

  1. 在 32 位通用 ARM 寄存器上運行
  2. 8 位/16 位整數
  3. 每條指令 2x16 位/4x8 位操作

Armv7-A:

  1. 獨立的寄存器組,32x64 位 NEON 寄存器
  2. 8/16/32/64 位整數
  3. 單精度浮點數
  4. 每條指令最多 16x8 位操作

Armv8-A AArch64:

  1. 獨立的寄存器組,32x128 位 NEON 寄存器
  2. 8/16/32/64 位整數
  3. 單精度浮點數
  4. 雙精度浮點,兩者都符合IEEE
  5. 每條指令最多 16x8 位操作

1.4 為什么使用neon

  1. 對整數和浮點運算的支持確保了廣泛的應用程序的適應性,從編解碼器到高性能計算再到 3D 圖形。
  2. 與 Arm 處理器的緊密耦合提供單一指令流和統一的內存視圖,以更簡單的工具流程呈現單一開發平臺目標

1.5 Armv7/v8詳細差異

Armv8-A 是對 Arm 架構的根本性改變。它支持稱為“AArch64”的 64 位執行狀態和新的 64 位指令集“A64”。為了提供與 Armv7-A(32 位架構)指令集的兼容性,提供了 Armv8-A“AArch32”的 32 位變體。大多數現有的 Armv7-A 代碼都可以在 Armv8-A 的 AArch32 執行狀態下運行。

本節比較了 Armv7-A 和 Armv8-A 架構的 NEON 相關特性。另外,NEON編程中經常用到的通用Arm寄存器和Arm指令也會被提及。但是,重點仍然是 NEON 技術。

1.6 Register寄存器

Armv7-A 和 AArch32 具有相同的通用 Arm 寄存器——16 x 32 位通用 Arm 寄存器 (R0-R15)。

Armv7-A 和 AArch32 具有 32 x 64 位 NEON 寄存器 (D0-D31)。這些寄存器也可以視為 16x128 位寄存器 (Q0-Q15)。每個 Q0-Q15 寄存器映射到一對 D 寄存器,如下圖所示。

相比之下,AArch64 有 31 個 64 位通用 Arm 寄存器和 1 個具有不同名稱的特殊寄存器,具體取決于使用它的上下文。這些寄存器可以被視為 31 x 64 位寄存器 (X0-X30) 或 31 x 32 位寄存器 (W0-W30)。

AArch64 有 32 x 128 位 NEON 寄存器 (V0-V31)。這些寄存器也可以被視為 32 位 Sn 寄存器或 64 位 Dn 寄存器。

1.7 指令系統間的關系與1.3相似

下圖說明了 Armv7-A、Armv8-A AArch32 和 Armv8-A AArch64 指令集之間的關系。

Armv8-A AArch32指令集由A32(Arm指令集,32位定長指令集)和T32(Thumb指令集,16位定長指令集;Thumb2指令集,16或32位長指令集)組成指令系統)。它是 Armv7-A 指令集的超集,因此它保留了運行現有軟件所需的向后兼容性。對 A32 和 T32 進行了一些添加以保持與 A64 指令集的對齊,包括 NEON 除法和加密擴展指令。還支持 NEON 雙精度浮點(符合 IEEE)。

2 neon 使用

2.1 neon 指令格式

Armv7-A/AArch32 指令語法

Armv7-A/AAArch32 NEON 指令(與 VFP 一樣)的所有助記符都以字母“V”開頭。指令通常能夠對不同的數據類型進行操作,這在指令編碼中指定。尺寸用指令的后綴表示。元素的數量由指定的寄存器大小和操作的數據類型指示。指令具有以下一般格式:
指令具有以下一般格式:

V{<mod>}<op>{<shape>}{<cond>}{.<dt>}{<dest>}, src1, src2

其中:
== mod 修飾符
Q:指令采用飽和算法,使結果在指定數據類型范圍內飽和,如VQABS、VQSHL等。
H:指令將結果減半。它通過右移一位(實際上是除以二并截斷)來實現,例如 VHADD、VHSUB。
D:指令將結果加倍,如VQDMULL、VQDMLAL、VQDMLSL和VQ{R}DMULH
R:指令會對結果進行四舍五入,相當于在截斷前給結果加0.5,如VRHADD、VRSHR。
op - 操作(例如,ADD、SUB、MUL)。==

<cond> - Condition, used with IT instruction<.dt> - Data type, such as s8, u8, f32 etc.<dest> - Destination<src1> - Source operand 1<src2> - Source operand 2

注: {} represents and optional parameter.代表可選參數。

Neon 數據處理指令通常有 Normal、Long、Wide 和 Narrow 變體。(注:vector對應32bit)

2.2 AArch64 NEON 指令語法

在 AArch64 執行狀態下,NEON 指令的語法發生了變化。它可以描述如下:

{<prefix>}<op>{<suffix>} Vd.<T>, Vn.<T>, Vm.<T>

其中:

<prefix> - prefix, such as using S/U/F/P to represent signed/unsigned/float/bool data type.<op> – operation, such as ADD, AND etc.<suffix> - suffixP: “pairwise” operations, such as ADDP.
V: the new reduction (across-all-lanes) operations, such as FMAXV.
2:new widening/narrowing “second part” instructions, such as ADDHN2, SADDL2.

ADDHN2:將兩個 128 位向量相加,產生一個 64 位向量結果,作為 NEON 寄存器的高 64 位部分存儲。

SADDL2:將NEON寄存器的兩個高64位向量相加,產生128位向量結果。


<T> - 數據類型,8B/16B/4H/8H/2S/4S/2D。
B 代表字節(8 位)。H 代表半字(16 位)。S 代表字(32 位)。D 代表一個雙字(64 位)。
將兩個 128 位向量相加,產生一個 64 位向量結果,作為 NEON 寄存器的高 64 位部分存儲。

例如:

UADDLP    V0.8H, V0.16BFADD V0.4S, V0.4S, V0.4S

2.3 NEON 指令

3.1 RK3399資料

2大核A57 主頻G1.8 ,4核A53 主頻G1.4
https://www.forlinx.com/product/rk3399-99.html

總結

以上是生活随笔為你收集整理的【NEON 】初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。