ARM NEON 程式設計簡單入門1

2021-08-02 08:56:14 字數 1315 閱讀 5901

neon是適用於arm cortex-a系列處理器的一種128位simd(single instruction, multiple data,單指令、多資料)擴充套件結構。從智慧型手機和移動計算

裝置到hdtv,它已被公認為是多**應用領域中最為優越的處理器之一。它採用專門設計,簡化了軟體在不同平台之間的移植,為類似dolby

mobile的

密集型多**應用提供了低能耗和靈活的加速功能。

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 導論

本系列博文用於介紹arm cpu下neon指令優化。arm處理器的歷史可以閱讀文獻 2 本文假設讀者已有基本的arm cpu下程式設計的經驗,本文面向需要了解arm平台下通過neon進行演算法優化的場景。arm cpu最開始只有普通的暫存器,可以進行基本資料型別的基本運算。自armv5開始引入了vf...

ARM NEON程式設計 NE10

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

Rust程式語言,簡單入門1

學習程式設計第一步,列印hello,world 檔名 main.rs fn main fn main 主函式,無返回值,rust程式入口。fn 定義函式。函式主體用大括號括起來 在函式簽名中,有引數,必須宣告每個引數的型別。這是rust設計中的乙個故意決定 在函式定義中需要型別注釋。空格1空格2空格...