close
在嵌入式平台中進行一些複雜算法的開發,一定需要用到指令及來進行加速,目前在嵌入式平台上做多使用的晶片就是ARM,這次我們要將mtcnn的人臉偵測AP porting到 ARM的開發平台上,針對執行的速度的進行優化的動作。
在mtcnn 人臉偵測AP分為兩個部分,一是執行演算法的library,即是ncnn library,在此源碼裡有提供ARM NEON功能來獲得較高的效能,需要用define的方式開啟,但開啟後還是會有下列幾個錯誤現象發生,需要一一處理。
加入 add_definitions(-D__ARM_NEON -D__ARM_FP=2)將ARM NEON功能開啟。
編譯後出現以下錯誤:
/share/tbb_sunplus_20190612/crossgcc/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.3.1/include/arm_neon.h:10844:1: error: inlining failed in call to always_inline ‘void vst1_s16(int16_t*, int16x4_t)’: target specific option mismatch vst1_s16 (int16_t * __a, int16x4_t __b) ^~~~~~~~ src/mat_pixel.cpp:1282:25: note: called from here vst1_s16(rows0p, _rows0_sr4); ~~~~~~~~^~~~~~~~~~~~~~~~~~~~ In file included from src/mat.h:21:0, from src/mat_pixel.cpp:15: /share/tbb_sunplus_20190612/crossgcc/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.3.1/include/arm_neon.h:10844:1: error: inlining failed in call to always_inline ‘void vst1_s16(int16_t*, int16x4_t)’: target specific option mismatch vst1_s16 (int16_t * __a, int16x4_t __b) ^~~~~~~~ src/mat_pixel.cpp:1283:25: note: called from here |
解決方法:
看起來像是編譯不支援Neon function,請在編譯時加入-mfpu=neon。
第二錯誤:
In file included from src/layer/arm/convolution_arm.cpp:21:0: src/layer/arm/convolution_3x3.h: In function ‘_ZN4ncnnL26conv3x3s1_winograd64_neon4ERKNS_3MatERS0_S2_S2_._omp_fn.11’: src/layer/arm/convolution_3x3.h:5766:22: error: ‘asm’ operand has impossible constraints ); ^ src/layer/arm/convolution_3x3.h:6025:22: error: ‘asm’ operand has impossible constraints ); ^ |
解決方法:
編譯時加入 -fomit-frame-pointer 。
以上參數加入後即可開啟ARM NEON功能來獲得較高的效能。
全站熱搜
留言列表