apt-get install clang
修改toolchains/aarch64-linux-gnu.toolchain.cmake,内容如下:
# set cross-compiled system type, it's better not use the type which cmake cannot recognized.
SET ( CMAKE_SYSTEM_NAME Linux )
SET ( CMAKE_SYSTEM_PROCESSOR aarch64 )
# 注意这里的编译器改为clang
SET ( CMAKE_C_COMPILER "clang" )
SET ( CMAKE_CXX_COMPILER "clang++" )
# set searching rules for cross-compiler
SET ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
SET ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
SET ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
# set ${CMAKE_C_FLAGS} and ${CMAKE_CXX_FLAGS}flag for cross-compiled process
SET ( CMAKE_CXX_FLAGS "-std=c++11 -march=armv8-a -fopenmp ${CMAKE_CXX_FLAGS}" )
# other settings
add_definitions(-D__ARM_NEON)
add_definitions(-D__ANDROID__)
SET ( ANDROID true)
然后:
cd $(ncnn root)
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu-clang.toolchain.cmake ../
make -j6
编译完毕,把 ( n c n n r o o t ) / b u i l d / b e n c h m a r k / b e n c h m a r k 复 制 到 (ncnn root)/build/benchmark/benchmark复制到 (ncnnroot)/build/benchmark/benchmark复制到(ncnn root)/benchmark/目录下
clang编译的ncnn在小核和大核上都有肉眼可见的优势。特别是小核上,能优化的和大核差不多。大核上优化空间反而比较小。这点很神奇。
个别模型clang上会差一点。
综合来说,用clang不亏。