前言

 应领导要求需要将最初级版本的算法移植到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编译选项优化相关推荐

  1. arm linux telnet 密码,arm-linux 板子上telnetd的移植

    首先在内核中要支持一样东西: 在Character devices中选中Unix98 PTY support busybox中已经可以支持telnetd的命令,我用的是busybox-1.24.1版本 ...

  2. 在ARM板子上把玩Tensorflow Lite

    前几天Google的IO大会上发布的ML Kit,ML Kit为端上部署深度学习模型提供了一套完整的解决方案,本地运行.云端都支持.里面本地部署用到的就是Tensorflow lite. Tensor ...

  3. 粤嵌实验板 linux 环境,粤嵌linux基础入门学习 linux系统中添加系统调用

    linux系统中添加系统是怎样调用的?从linux基础入门学习出发,一起来看看: 1.每个体系下面均有对应的系统调用列表: arch/arm/kernel/calls.S 在最后添加一个新的系统调用标 ...

  4. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...

    本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  5. 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础

    本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  6. jlink怎么调试linux程序_纯Linux下的 ARM裸机调试环境搭建(GDB + JLink)

    一直想摆脱windows环境,在纯linux下进行arm裸机开发,但是由于一直不知道JLink如何在linux下运行和配置,一直无法进行下去. 以前都是windows+AXD调试.包括本人用的FL24 ...

  7. Linux基础(6)--文件IO操作

    文件IO操作 1. open打开操作 2. close关闭操作 3. creat创建操作 4. write写操作 5. read读操作 Linux下一切皆文件,所以文件IO是很重要的也是很基础的操作. ...

  8. arm linux建站,arm服务器做虚拟机(arm平台虚拟机)

    arm开发板用网络文件系统nfs连接到虚拟机上 出现了如图的问题 主机 虚拟机. 检查下你的linux虚拟机得ip配置,nfs要求ip在一个段.在检查下linux虚拟机得nfs服务打开没有,开发板手册 ...

  9. Jetson TX2 arm板子刷机,安装Caffe

    为什么80%的码农都做不了架构师?>>>    近期在做体态行为识别的项目,采购了一块Jetson TX2,拿过来板子上的系统和软件有点老,准备更新一下.ARM板子虽好,遍地是坑,记 ...

最新文章

  1. Java项目:嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)
  2. Love Java , Love IBM , Love Sun ( SunJiHai )
  3. 开源ERP系统 CK-ERP
  4. OC----内存管理
  5. python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)
  6. 出了本练内功的书:《完美软件开发:方法与逻辑》
  7. spring mvc学习(53):回顾和springmvc返回值类型总结
  8. linux串口缓冲区的大小,linux-----------串口设置缓冲器的大小
  9. 下载android 源码对应的kernel版本
  10. 嵌入式软件设计层级划分概念
  11. 小米笔记本UEFI关闭安全启动
  12. 传阿里云盘将开启扩容收费测试:200GB售价 108元/年
  13. 0606关于mysql优化原理
  14. Python暴力破解受密码保护的zip/rar文件
  15. Android https证书过期,Android 的 HTTPS 证书过期异常
  16. VLOOKUP函数常用套路大全
  17. 简单聊聊VisualStudio的断点调试
  18. linux调整主被动模式,Ftp修改为主被动模式命令
  19. JAVA在本地创建一个文件 向文件里面写入内容
  20. 总结常用的Javafx功能及用法(上)

热门文章

  1. 浅谈MIPS地址对齐问题
  2. python函数参数
  3. windows驱动开发详解学习笔记
  4. The connection to adb is down
  5. boot nk.bin by CEPC
  6. es6 --- Promise.all等待多个异步任务执行
  7. Linux下配置LVM
  8. 龙图 VP 李翀:数据化运营及云计算下的运维
  9. android获取网络图片
  10. 【整理】MySQL 之 autocommit