欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程资源 > 编程问答 >内容正文

编程问答

arm优化编译参数选项解释 -凯发k8官方网

发布时间:2024/10/14 编程问答 24 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 arm优化编译参数选项解释 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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优化时,优先考虑执行速度进行优化

 

总结

以上是凯发k8官方网为你收集整理的arm优化编译参数选项解释的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图