【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软桌面虚拟化vdi 安装测试体验

最近同事在讨论桌面虚拟化,说目前很多企业都准备上桌面虚拟化,结合众多的解决方案,觉得微软的桌面虚拟化方案不错,相对与citrix的xendesktop,vmware view 有一定的价格优势,心里想,微软是大公司&#xff0c…

ASP应用之模板采用

初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,甚至一不小心得不偿失、前功尽弃。所以,梦想着那么大段的程序代码变成几个简单的字符代…

mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)

前言前几天下载安装了最新版的MySQL 8.0.22,遇到了不少问题,参考了一些方法,最终得以解决。今天将自己的安装过程记录下来,希望对各位有所帮助。一、MySQL 8.0.22官网下载点击进入MySQL官网:https://www.mysql.com/① …

RedHat 脚本搭建dns服务!

1.配置好yum脚本 #!/bin/bash# by breaklinux echo "--------------- mount cdrom ------------------"umount /dev/cdrom &> /dev/nullmount /dev/cdrom /mnt &> /dev/nullecho "--------------- create yum ------------------"touch /etc…

国外开源.Net 系统概述

转载自:http://www.aspx1.com (ASP.NET学习门户) 搜索了几个搜索引擎,找了一些.net的开源系统,(申明一下,下面的看只是个人看法,只供参考)。 一、DotNetNuke DotNetNuke是一个.Net平台下&#x…

dateframe行列插入和删除操作

ar np.array(list("ABCDEFG")) # array只是Convert,默认会copy源值。asarray也是Convert,如果源值是array则不copy.print(ar)ar np.full((2,4), 3, np.int32) # 创建一个指定初始值的数组print(ar)zero_ar np.zeros(10, np.int32) # 创建一个初始…

android获取网络图片

2019独角兽企业重金招聘Python工程师标准>>> 资源描述: 关于android获取网络图片主要是把网络图片的数据流读入到内存中然后用1.Bitmap bitMap BitmapFactory.decodeByteArray(data, 0, length); 方法来将图片流传化为bitmap类型 这样才能用到1.imageView.setImage…

gitlab备份及恢复

gitlab备份步骤 https://blog.csdn.net/qq_31666147/article/details/79844107 gitlab版本 下载地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ gitlab-ce-10.4.4-ce.0.el7.x86_64.rpm 备份恢复gitlib版本必须相同 转载于:https://www.cnblogs.com/mutong1228…

WSS Alert(邮件提醒) 定制

项目需要&#xff0c;研究了一下WSS的Alert定制。 定制有两种方法: (方法1)修改模板文件 默认模板是12\TEMPLATE\XML\alerttemplates.xml,将这个模板复制一份修改,然后用stsadm命令添加模板: STSADM -o updatealerttemplates -url <http://urlname> -filename <your w…

windows log日志分割_如何将日志记录到 Windows事件日志 中

每当出现一些未捕获异常时&#xff0c;操作系统都会将异常信息写入到 Windows 事件日志 中&#xff0c;可以通过 Windows 事件查看器 查看&#xff0c;如下图&#xff1a; 这篇文章将会讨论如何使用编程的方式将日志记录到 Windows 事件日志 中。 安装 EventLog 要想在 .NET Co…

偷窃转基因玉米种子引发中美打农业官司

偷窃转基因玉米种子引发中美打农业官司 请看下面相片&#xff1a; 这张相片是孩子们与转基因玉米在一起的景象。转基因玉米颗粒饱满&#xff0c;孩子们的小手差点儿抓不住&#xff08;由于玉米棒子非常粗&#xff09;。广大农民喜欢这样的抗虫、耐药并且产量高的农作物&#xf…

SQL Server : 禁止在SQL Server中生成用户实例

一、打开SQL工具&#xff0c;右键点服务器&#xff0c;新建查询 二、输入如下查询&#xff1a;exec sp_configure user instances enabled, 1 三、在查询中再运行&#xff1a;Reconfigure 四、然后重启SQL SERVER服务转载于:https://www.cnblogs.com/dushouke/arch…

mysql中视图的概念_MySql中的视图的概念及应用

视图的基本概念视图是从一个或几个基本表(或者视图)导出的表。它与基本表不同&#xff0c;是一个虚表。数据库只存放视图的定义&#xff0c;而不存放视图对应的数据&#xff0c;这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化&#xff0c;从视图中查询出的数据也…

bzoj1190:[HNOI2007]梦幻岛宝珠

传送门 二进制分组优化背包 理解的差不多了&#xff0c;但是无法具体阐述&#xff0c;留坑 代码&#xff1a; #include<cstdio> #include<iostream> #include<algorithm> #include<vector> #include<cstring> using namespace std; void read(in…

JQuery常用的代码片段

2019独角兽企业重金招聘Python工程师标准>>> JQuery常用的代码片段 JQuery在当前众多网站开发中都有用到。他简易的操作以及对各个浏览器的兼容性&#xff0c;被广大的开发者一致看好。 下面是一些常用实用的 JQuery 代码片段。看看有没有需要收藏的吧&#xff1a; …

Lession 14 Do you speak Englist?

1过去完成时:1>动作发生在过去的过去;在过去动作完成,对过去产生影响,过去的时间壮语;2>原打算,但没实际的愿望;3>没听清,再次提问;had 过去分词2 New words and Expressions;amusing;experience;wave;lift;reply;language;journey;1>speak;speaker;say;说话内容;…

linux中mysql与eclipse_Linux下eclipse CDT及mysql安装,c++访问mysql数据库

5. 关于eclipse编译project由于程序中有#include所以需要在eclipse中加上对mysql.h的路径项目->属性->C/CBuild -> settings -> gcc c complier ->includes -> include paths添加两个路径&#xff1a;/usr/lib/mysql&#xff1b;/usr/include/mysql对于64位的…

linux环境配置

在安装linux之前首先要明白linux系统的功能特性&#xff0c;linux是多少位 的&#xff0c;对要使用的工具要有大体的了解&#xff0c;那样就不至于在之后的安装中耽误太多时间&#xff0c;比如安装的系统是32位的就要安装与之对应的工具。我们大体上了解一下linux能支持的又比较…

tomcat 启动速度慢背后的真相

1. tomcat 启动慢 在线上环境中&#xff0c;我们经常会遇到类似的问题&#xff0c;就是tomcat 启动比较慢&#xff0c;查看内存和cpu,io都是正常的&#xff0c;但是启动很慢&#xff0c;有的时候长达几分钟&#xff0c;这到底是什么原因导致的。 1.1 tomcat 获取随机值阻塞 ​ …

[导入]相片: 23853741.jpg

文章来源:http://img.blog.163.com/photo/NdAK9XEb2a-KOR7zpDWpAA/588564176302178421.jpg转载于:https://www.cnblogs.com/baiyirui/archive/2008/04/27/1173117.html