1. 程式人生 > >arm平臺和相關的矩陣運算庫

arm平臺和相關的矩陣運算庫

一、arm平臺

ARM(Acorn RISC Machine,後改為Advanced RISC Machine)是一個32位精簡指令集(RISC)處理器架構,其廣泛地使用在許多嵌入式系統設計。類比於服務端的X86,其他的架構還有MIPS/PowerPC/DSP。差異參考這篇博文

arm架構演化
包括ARMv5/ARMv6/ARMv7-A/ARMv8-A等型號,對應的指令集和效能不同

arm核心

ARM在最初的處理器型號都用數字命名,最後一個是ARM11系列,在應用ARMv7架構後,推出了Cortex這一系列,老式的則命名為Classic系列。
Cortex系列包括:
- “應用”配置: Cortex-A 系列
- “嵌入式”配置: Cortex-R 系列
- “微處理器”配置: ARM Cortex-M 系列.

不同arm核心型號對應的架構型別可以參考ARM處理器核心

arm bit width

有32-bit和64/32-bit兩種,和arm處理器架構的對應關係可以參考表格
ARMv8-A以後才開始支援64bit,之前只有32bit。

指令集

比較關注幾個指令集:
1. SIMD
ARMv6架構引入
2. NEON
也叫Advanced SIMD,使用SIMD指令集提供運算加速。
在ARMv7-A引入,所有的Cortex-A8裝置都支援,部分Cortex-9A裝置支援。
ProjectNe10是對多種函式使用NEON和c加速的開源庫。

ABI

參考官方文件,不同的CPU支援不同的指令集,CPU和指令集組合具有自己的ABI(Application Binary Interface).
ABI定義了application的機器碼在執行時如何跟系統進行互動,包括
- CPU指令集
- 儲存和載入的大小端
- 可執行檔案和庫檔案的格式
- 程式碼和系統之間資料傳輸的規則
- 可用函式符號列表

ABI的種類和支援的指令集參考ABI,參考官方文件
1. armeabi
至少支援ARMv5TE指令集的CPU,支援軟浮點運算(不支援硬體輔助的浮點計算)
2. armeabi-v7a
針對ARMv7-A架構的cpu,支援硬體浮點運算
3. arm64-v8a
針對ARMv8而且支援AArch64的cpu,包含NEON和VFPv4指令集。

二、開源矩陣庫

eigen

可以使用eigen計算矩陣運算,參考博文

openblas

android端使用openblas庫,參考官方文件