ARM NEON程式設計系列1 導論

2022-01-24 10:05:37 字數 1417 閱讀 8680

本系列博文用於介紹arm cpu下neon指令優化。

arm處理器的歷史可以閱讀文獻[2],本文假設讀者已有基本的arm cpu下程式設計的經驗,本文面向需要了解arm平台下通過neon進行演算法優化的場景。

arm cpu最開始只有普通的暫存器,可以進行基本資料型別的基本運算。自armv5開始引入了vfp(vector floating point)指令,該指令用於向量化加速浮點運算。自armv7開始正式引入neon指令,neon效能遠超vfp,因此vfp指令被廢棄。

下面給乙個最基本的例子來說明neon的作用:

注意:

//填充隨機數

static void fill_random_value(std::vector& vec_data));}

//判斷兩個vector是否相等

static bool is_equals_vector(const std::vector& vec_a,

const std::vector& vec_b)

for (size_t i = 0; i < vec_a.size(); i++) }

return true;

}//正常的vector相乘 (注意:需要關閉編譯器的自動向量化優化)

static void normal_vector_mul(const std::vector& vec_a,

const std::vector& vec_b,

std::vector& vec_result)

}//nron優化的vector相乘

static void neon_vector_mul(const std::vector& vec_a,

const std::vector& vec_b,

std::vector& vec_result)

//normal process

for (; i < (int)vec_result.size(); i++) }

//測試函式

//funccosttimehelper是乙個計算時間消耗的helper類

static int test_neon()

} //test normal_vector_mul }

//test neon_vector_mul }

return 0;

}int main(int, char*)

說明:

ARM NEON 程式設計簡單入門1

neon是適用於arm cortex a系列處理器的一種128位simd single instruction,multiple data,單指令 多資料 擴充套件結構。從智慧型手機和移動計算 裝置到hdtv,它已被公認為是多 應用領域中最為優越的處理器之一。它採用專門設計,簡化了軟體在不同平台之間...

ARM NEON程式設計 NE10

ne10是開源arm neon函式庫,主要包含常用數學函式 數字訊號處理函式 影象處理函式,由3種版本 的實現,分別為c語言版本 neon intrisincs版本 neon彙編版本。官方主頁 源 cd ne10 path mkdir build cd build export ne10 linux...

演算法導論(1)

分治策略 1.遞迴式 用來描述遞迴求解的分治演算法的執行時間。求解遞迴式有三種方法 1 代入法,猜測乙個界,然後用數學歸納法證明這個界是正確的。2 遞迴樹法,將遞迴式轉換為一棵樹,利用遞迴式,將每層的代價以及深度都表示出來,節點代表不同層次產生的代價,最後利用邊界和技術求解。遞迴樹法常用來生成乙個好...