本系列博文用於介紹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 遞迴樹法,將遞迴式轉換為一棵樹,利用遞迴式,將每層的代價以及深度都表示出來,節點代表不同層次產生的代價,最後利用邊界和技術求解。遞迴樹法常用來生成乙個好...