【linux基础】关于ARM板子使用O3编译选项优化
前言
應(yīng)領(lǐng)導(dǎo)要求需要將最初級(jí)版本的算法移植到ARM板子上,并進(jìn)行優(yōu)化,以期達(dá)到實(shí)時(shí)。
平臺(tái)
移植前: TX2
移植后: ARM()
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 : 10Hardware : Freescale i.MX6 Quad/DualLite (Device Tree) Revision : 0000 Serial : 0000000000000000背景:最早版本在TX2上運(yùn)行時(shí)間大約有60ms左右。
具體操作
1.ARM環(huán)境配置
說(shuō)實(shí)話,這次移植只是將平臺(tái)換成了ARM,仍然是在ubuntu系統(tǒng)上運(yùn)行,沒(méi)什么大的問(wèn)題。安裝需要的庫(kù),此處主要是opencv,缺少的添加上去即可,測(cè)試的時(shí)候遇到一個(gè)容易忽略的問(wèn)題,就是明明有攝像頭,測(cè)試程序卻print沒(méi)有獲取到攝像頭,還以為是硬件的問(wèn)題,后來(lái)使用ARM自帶的程序測(cè)試可以獲取到攝像頭,原來(lái)默認(rèn)獲取的攝像頭ID和算法程序中的不一致造成的,這個(gè)可以通過(guò)插拔攝像頭接口,查看硬件部分?jǐn)z像頭連接的是哪個(gè)接口,具體使用的命令是:
$ls /dev/vi*測(cè)試讀取存儲(chǔ)圖像耗時(shí):
測(cè)試讀取攝像頭圖像耗時(shí):
2. ARM優(yōu)化
最早是按照neon和浮點(diǎn)加速運(yùn)算的方向來(lái)優(yōu)化的,只是需要添加一些編譯選項(xiàng)即可。
$lscpu檢測(cè)neon單元是否存在;
$cat /proc/cpuinfo Features : swp half thumb fastmult vfp edsp thumbee vfpv3vfpv3d16檢測(cè)處理器是否支持neon
$cat /proc/cpuinfo | grep neon檢測(cè)系統(tǒng)配置文件確認(rèn)內(nèi)核是否使能neon
$zcat /proc/config.gz | grep neon 看是否存在 CONFIG_NEON=y編譯選項(xiàng)
arm-linux-gnueabihf-g++ -O3 -march=armv7-a -mcpu=cortex-a9 -ftree-vectorize -mfpu=neon -mfpu=vfpv3-fp16 -mfloat-abi=hard -ffast-math發(fā)現(xiàn)并沒(méi)有多大的效果。
測(cè)試循環(huán)的浮點(diǎn)運(yùn)算的加速;
發(fā)現(xiàn)是否使用-O3這個(gè)編譯選項(xiàng)的耗時(shí)差別比較大。
問(wèn)題:
g++: error: arm-linux-gnueabihf-gcc: No such file or directory查看是否有該編譯器(使用TAB鍵補(bǔ)全)
$ 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發(fā)現(xiàn)有該編譯器,但是還是顯示沒(méi)有,不知道為什么,不過(guò)改為arm-linux-gnueabihf-g++就可以編譯通過(guò)。
結(jié)論
以目前的結(jié)果看來(lái),編譯選項(xiàng)-O3已經(jīng)完成了較高級(jí)別的加速,其中應(yīng)該包括neon和浮點(diǎn)運(yùn)算。
參考
1. ARM平臺(tái)NEON指令的編譯和優(yōu)化;
2. 編譯選項(xiàng)-O1,-O2,-O3編譯優(yōu)化知多少;
完
轉(zhuǎn)載于:https://www.cnblogs.com/happyamyhope/p/10488373.html
總結(jié)
以上是生活随笔為你收集整理的【linux基础】关于ARM板子使用O3编译选项优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python编译器源码分析_Python
- 下一篇: pe linux系统安装教程视频教程,各