【linux基础】关于ARM板子使用O3编译选项优化

前言python

 应领导要求须要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时。linux

平台c++

移植前: TX2算法

移植后: ARM()ubuntu

processor    : 3 model name : ARMv7 Processor rev 10 (v7l) BogoMIPS : 7.54 Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc09 CPU revision : 10 Hardware : Freescale i.MX6 Quad/DualLite (Device Tree) Revision : 0000 Serial : 0000000000000000

背景:最先版本在TX2上运行时间大约有60ms左右。测试

具体操做优化

1.ARM环境配置ui

说实话,此次移植只是将平台换成了ARM,仍然是在ubuntu系统上运行,没什么大的问题。安装须要的库,此处主要是opencv,缺乏的添加上去便可,测试的时候遇到一个容易忽略的问题,就是明明有摄像头,测试程序却print没有获取到摄像头,还觉得是硬件的问题,后来使用ARM自带的程序测试能够获取到摄像头,原来默认获取的摄像头ID和算法程序中的不一致形成的,这个能够经过插拔摄像头接口,查看硬件部分摄像头链接的是哪一个接口,具体使用的命令是:spa

$ls /dev/vi*

测试读取存储图像耗时:.net

测试读取摄像头图像耗时:

2. ARM优化

最先是按照neon和浮点加速运算的方向来优化的,只是须要添加一些编译选项便可。

$lscpu

检测neon单元是否存在;

$cat /proc/cpuinfo Features : swp half thumb fastmult vfp edsp thumbee vfpv3vfpv3d16

检测处理器是否支持neon

$cat /proc/cpuinfo | grep neon

检测系统配置文件确认内核是否使能neon

$zcat /proc/config.gz | grep neon 看是否存在 CONFIG_NEON=y

编译选项

arm-linux-gnueabihf-g++ -O3 -march=armv7-a -mcpu=cortex-a9 -ftree-vectorize -mfpu=neon -mfpu=vfpv3-fp16 -mfloat-abi=hard -ffast-math

发现并无多大的效果。

测试循环的浮点运算的加速;

发现是否使用-O3这个编译选项的耗时差异比较大。

问题:

g++: error: arm-linux-gnueabihf-gcc: No such file or directory

查看是否有该编译器(使用TAB键补全)

$ arm-linux-gnueabihf-

输出

arm-linux-gnueabihf-addr2line         arm-linux-gnueabihf-gcc-ar-5          arm-linux-gnueabihf-nm arm-linux-gnueabihf-ar                arm-linux-gnueabihf-gcc-nm            arm-linux-gnueabihf-objcopy arm-linux-gnueabihf-as                arm-linux-gnueabihf-gcc-nm-5          arm-linux-gnueabihf-objdump arm-linux-gnueabihf-c++filt           arm-linux-gnueabihf-gcc-ranlib        arm-linux-gnueabihf-pkg-config arm-linux-gnueabihf-cpp               arm-linux-gnueabihf-gcc-ranlib-5      arm-linux-gnueabihf-python2.7-config arm-linux-gnueabihf-cpp-5             arm-linux-gnueabihf-gcov              arm-linux-gnueabihf-python-config arm-linux-gnueabihf-dwp               arm-linux-gnueabihf-gcov-5            arm-linux-gnueabihf-ranlib arm-linux-gnueabihf-elfedit           arm-linux-gnueabihf-gcov-tool         arm-linux-gnueabihf-readelf arm-linux-gnueabihf-g++               arm-linux-gnueabihf-gcov-tool-5       arm-linux-gnueabihf-run arm-linux-gnueabihf-g++-5             arm-linux-gnueabihf-gprof             arm-linux-gnueabihf-size arm-linux-gnueabihf-gcc               arm-linux-gnueabihf-ld                arm-linux-gnueabihf-strings arm-linux-gnueabihf-gcc-5             arm-linux-gnueabihf-ld.bfd            arm-linux-gnueabihf-strip arm-linux-gnueabihf-gcc-ar            arm-linux-gnueabihf-ld.gold

发现有该编译器,可是仍是显示没有,不知道为何,不过改成arm-linux-gnueabihf-g++就能够编译经过

结论

以目前的结果看来,编译选项-O3已经完成了较高级别的加速,其中应该包括neon和浮点运算。

参考

1. ARM平台NEON指令的编译和优化;

2. 编译选项-O1,-O2,-O3编译优化知多少

相关文章
相关标签/搜索