CFLAGS +=  -Wall  -O2  -mcpu=cortex-a53  -mfloat-abi=softfp  -mfpu=neon-vfpv4  -mno-unaligned-access  -fno-aggressive-loop-optimizations -g -lmpi $(INC_FLAGS) $(LIBS)
-Wall:编译警告信息显示

-fno-aggressive-loop-optimizations:消除(或理解为“不允许”)程序中的无限循环行为

-mno-unaligned-access:进行对齐的memory访问

Hi3519A具有浮点运算单元和neon,文件系统中的库是采用软浮点和neon编译而成,因此所有板端代码编译时需要在Makefile里面添加选项-mcpu=cortex-a53、-mfloat-abi=softfp和-mfpu=neon-vfpv4,下面分别讲解这几个参数作用:

-mfloat-abi=softfp

ABI即“application binary interface”,即编译器将c代码编译成汇编代码时使用的一种规则
使用规范如下:
在编译带有浮点参数的函数时,有三种可能的编译选项:
-mfloat-abi=soft
-mfloat-abi=softfp
-mfloat-abi=hard
其中:
"soft"选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。
"softfp"选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然后再传递到FPU中。
"hard"选项:表明要使用FPU硬件来做浮点运算,并且,函数的参数直接传递到FPU的寄存器(s0、d0)中。

自动向量化选项
armcc编译器使用–vectorize选项来使能向量化编译,一般选择更高的优化等级如-O2或者-O3就能使能–vectorize选项。
gcc编译器的向量化选项-ftree-vectorize来使能向量化选项,使用-O3会自动使能-ftree-vectorize选项。

-mcpu=cortex-a53

它用于选择处理器类型
使用 -A或者–cpu Cortex-a53来指定指令集架构和CPU类型。
选项-mfpu=neon和-mcpu来指定cpu类型。如-mcpu=cortex-a5

-mfpu=neon-vfpv4

它用于选择NEON和VFP类型
gcc选择用-mfpu=vfpv3-fp16来指定为vfp协处理,而-mfpu=neon-vfpv4等就能指定为NEON+VFP结构。

总结:

选择浮点处理器和ABI接口类型
-mfloat-abi=soft:使用软件浮点库,不是用VFP或者NEON指令;
-mfloat-abi=softfp:使用软件浮点的调用规则,而可以使用VFP和NEON指令,编译的目标代码和软件浮点库链接使用;
-mfloat-abi=hard:使用VFP和NEON指令,并且改变ABI调用规则来产生更有效率的代码,如用vfp寄存器来进行浮点数据的参数传递,从而减少NEON寄存器和ARM寄存器的拷贝。

查看处理器是否支持NEON

#cat /proc/cpuinfo

看是否有如下内容,其中所用的cpu所支持的特性:

其他参数:

参考:https://blog.csdn.net/rony2012/article/details/76614863

其中-Otime参数可能会报错,改为-Ofast,表示在-O2/-O3优化时,优先考虑执行速度进行优化

arm优化编译参数选项解释相关推荐

  1. CPU架构之ARM优化

    1.资源 1.1.ARM开发者官网 https://developer.arm.com/ http://infocenter.arm.com 1.2.纯汇编和inline汇编参考资源 32位ARM优化 ...

  2. 关于在固态硬盘(ssd)上的Win10系统是否需要优化驱动器选项的调查

    关于在固态硬盘(ssd)上的Win10系统是否需要优化驱动器选项的调查 结论 原因 结论 需要. 原因 固态硬盘由于本身没有"碎片",因此无需进行清理.不过,需要注意的是,固态硬盘 ...

  3. mldonkey系列之五──Mldonkey选项解释[zt]

    mldonkey系列之五──Mldonkey选项解释 2007-10-27 周六, 21:22 本文译自: http://mldonkey.sourceforge.net/MLdonkeyComman ...

  4. c++编译优化,arm优化

    1,C++里面STL自带的vector存取效率不高,在可能的情况下用指针数组代替会大幅提高性能. 2,C++中对象的传递,尽可能使用引用,避免无意义的对象拷贝过程. 3,编译的时候加上 -O3, -D ...

  5. mate30pro 优化 开发者选项_10 个开发者必知的 MySQL 8.0 新功能

    文章转发自专业的Laravel开发者社区,原始链接:https://learnku.com/laravel/t/10243/mysql-8-new-features-required-by-10-de ...

  6. nginx优化配置选项

    Nginx以事件驱动(epoll)的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理.负载平衡.但是Nginx并不支持cgi方式运行,原因是可以减少因此带来的一些程序上的漏洞.所以必须使用 ...

  7. db2 命令选项解释

    在oracle中通过SQL/PLUS来进行访问数据库是,可以用set 命令来设置SQL/PLUS的选现, 把命令.输出等保存到文件中.在DB2中也有类似的设置. 下面对DB2中的选项进行解释, 选项  ...

  8. 机器学习中牛顿法凸优化的通俗解释

    红色石头的个人网站:redstonewill.com 之前,我发过一篇文章,通俗地解释了梯度下降算法的数学原理和推导过程,推荐一看.链接如下: 为什么局部下降最快的方向就是梯度的负方向? 我们知道,梯 ...

  9. mysql优化说明_MySQL性能优化各个参数解释说明

    [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock basedir ...

最新文章

  1. 16条很有用的Chrome浏览器命令
  2. 移动4G打造排污视频监控系统助力咸宁环保建设
  3. 手把手教你搭建微信点餐系统环境(springmvc+ibatis+maven+git)
  4. C语言中冒泡排序及优化
  5. IO-1(Java IO、File类)
  6. php 国密 签名,关于php国密SM3签名算法
  7. Visual studio docker build no such file or directory
  8. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)...
  9. 数字能排序字符串不能排序_动图解说堆排序原理,让体育生也能看得明白
  10. 成为一名PHP专家其实并不难
  11. js parsefloat 相加_JS高程小记-基本概念
  12. Spring揭秘-笔记
  13. 计算机代数与数论pdf,计算机代数及数论(maple).pdf
  14. 用简单易懂的例子解释隐马尔可夫模型
  15. 科研网站大全,你值得拥有!
  16. ubuntu各种实践笔记
  17. 【Tools】P4V基础操作
  18. 安卓电子书格式_6 款值得收藏的电子书阅读软件推荐
  19. 涂鸦智能 ① tuya-wifi-mcu-sdk-arduino-library 简单剖析
  20. Python学习:print函数的用法

热门文章

  1. 东大教务处验证码破解
  2. rhel 6下配置网络yum源(虚拟机环境下)
  3. Reading——The Non-Designer's Design Book
  4. 推荐一个Windows下好用的终端程序:ConEmu
  5. 小白html图片添加文字,小白爬虫入门——爬取图片和文字(超详细)
  6. Windows scp传输文件给Linux
  7. linux find批量替换java文件中字符串
  8. 【收藏】Harbor私有仓库中如何彻底删除镜像释放存储空间:vmware/registry:2.6.2-photon进行垃圾回收
  9. Linux shutdown关机命令
  10. Linux 文件权限管理命令chmod、chown