【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 : 10Hardware : 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和浮点运算。
参考
1. ARM平台NEON指令的编译和优化;
2. 编译选项-O1,-O2,-O3编译优化知多少;
完
转载于:https://www.cnblogs.com/happyamyhope/p/10488373.html
【linux基础】关于ARM板子使用O3编译选项优化相关推荐
- arm linux telnet 密码,arm-linux 板子上telnetd的移植
首先在内核中要支持一样东西: 在Character devices中选中Unix98 PTY support busybox中已经可以支持telnetd的命令,我用的是busybox-1.24.1版本 ...
- 在ARM板子上把玩Tensorflow Lite
前几天Google的IO大会上发布的ML Kit,ML Kit为端上部署深度学习模型提供了一套完整的解决方案,本地运行.云端都支持.里面本地部署用到的就是Tensorflow lite. Tensor ...
- 粤嵌实验板 linux 环境,粤嵌linux基础入门学习 linux系统中添加系统调用
linux系统中添加系统是怎样调用的?从linux基础入门学习出发,一起来看看: 1.每个体系下面均有对应的系统调用列表: arch/arm/kernel/calls.S 在最后添加一个新的系统调用标 ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础
本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
- jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)
一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...
- Linux基础(6)--文件IO操作
文件IO操作 1. open打开操作 2. close关闭操作 3. creat创建操作 4. write写操作 5. read读操作 Linux下一切皆文件,所以文件IO是很重要的也是很基础的操作. ...
- arm linux建站,arm服务器做虚拟机(arm平台虚拟机)
arm开发板用网络文件系统nfs连接到虚拟机上 出现了如图的问题 主机 虚拟机. 检查下你的linux虚拟机得ip配置,nfs要求ip在一个段.在检查下linux虚拟机得nfs服务打开没有,开发板手册 ...
- Jetson TX2 arm板子刷机,安装Caffe
为什么80%的码农都做不了架构师?>>> 近期在做体态行为识别的项目,采购了一块Jetson TX2,拿过来板子上的系统和软件有点老,准备更新一下.ARM板子虽好,遍地是坑,记 ...
最新文章
- Java项目:嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)
- Love Java , Love IBM , Love Sun ( SunJiHai )
- 开源ERP系统 CK-ERP
- OC----内存管理
- python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)
- 出了本练内功的书:《完美软件开发:方法与逻辑》
- spring mvc学习(53):回顾和springmvc返回值类型总结
- linux串口缓冲区的大小,linux-----------串口设置缓冲器的大小
- 下载android 源码对应的kernel版本
- 嵌入式软件设计层级划分概念
- 小米笔记本UEFI关闭安全启动
- 传阿里云盘将开启扩容收费测试:200GB售价 108元/年
- 0606关于mysql优化原理
- Python暴力破解受密码保护的zip/rar文件
- Android https证书过期,Android 的 HTTPS 证书过期异常
- VLOOKUP函数常用套路大全
- 简单聊聊VisualStudio的断点调试
- linux调整主被动模式,Ftp修改为主被动模式命令
- JAVA在本地创建一个文件 向文件里面写入内容
- 总结常用的Javafx功能及用法(上)