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空格...