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功能來獲得較高的效能。

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ^_^ 的頭像
    ^_^

    一切的安排,都是最好的安排

    ^_^ 發表在 痞客邦 留言(0) 人氣()