arm优化编译参数选项解释 -凯发k8官方网
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优化编译参数选项解释的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: