【linux基础】关于ARM板子使用O3编译选项优化
前言
应领导要求需要将最初级版本的算法移植到ARM板子上,并进行优化,以期达到实时。
平台
移植前: 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 : 10 Hardware : Freescale i.MX6 Quad/DualLite (Device Tree) Revision : 0000 Serial : 0000000000000000
背景:最早版本在TX2上运行时间大约有60ms左右。
具体操作
1.ARM环境配置
说实话,这次移植只是将平台换成了ARM,仍然是在ubuntu系统上运行,没什么大的问题。安装需要的库,此处主要是opencv,缺少的添加上去即可,测试的时候遇到一个容易忽略的问题,就是明明有摄像头,测试程序却print没有获取到摄像头,还以为是硬件的问题,后来使用ARM自带的程序测试可以获取到摄像头,原来默认获取的摄像头ID和算法程序中的不一致造成的,这个可以通过插拔摄像头接口,查看硬件部分摄像头连接的是哪个接口,具体使用的命令是:
$ls /dev/vi*
测试读取存储图像耗时:
测试读取摄像头图像耗时:
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和浮点运算。
参考
完
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/
分类:
linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】