嵌入式开发者社区
标题:
关于编译器优化的问题
[打印本页]
作者:
15901123858
时间:
2018-6-27 21:34
标题:
关于编译器优化的问题
最近在做基于OMAPL138的一个图像处理的项目,在ARM端和DSP端都运行一些数据,参考的是创龙基于共享内存的例程ex04_sharedregion(在LINUX完成工程的编译工作)。由于想加快数据处理速度,想使用编译器优化的方法。在ARM的makefile文件中将优化选项由O2改为O3,ARM的运行速度提升了50%,很欣慰;但是把DSP的makefile文件中优化选项由O2改为O3,DSP的运行速度完全没有变化,再由O2改为O0,DSP的运行速度立刻
降低
为原来的50%左右。。。。难道对于DSP来说O2就是最高的优化了吗?(DSP中会反复调用5个数求中值的函数)
作者:
15901123858
时间:
2018-6-27 21:38
# ======== toolchain macros ========
CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
CC = $(CGTOOLS)/bin/cl6x -c
AR = $(CGTOOLS)/bin/ar6x rq
LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
ST = $(CGTOOLS)/bin/strip6x
CPPFLAGS =
CFLAGS = -qq $(CCPROFILE_$(PROFILE)) -I. $(COMPILER_OPTS)
LDFLAGS = -w -q -c -m $(@D)/obj/$(@F).map
LDLIBS = -l $(CGTOOLS)/lib/rts6740_elf.lib
CCPROFILE_debug = -D_DEBUG_=1 --symdebug:dwarf
CCPROFILE_release =
-O2
COMPILER_OPTS = $(shell cat configuro/compiler.opt)
附上我DSP的makefile文件编译优化的代码段
作者:
小晓筱伟
时间:
2018-6-28 21:01
这是CCS编译器优化选项的功能:
1. –O0
简化控制流图
分配变量到寄存器
进行循环旋转(loop rotation)
删除未使用的代码
简化表达式和语句
内联声明为inline的函数
2. –O2
执行局部复制/常量传递
删除未使用的赋值语句
删除局部共有表达式
3. –O2
进行软件流水
进行循环优化
删除全局共有子表达式
删除全局未使用的赋值语句
把循环中的对数组的引用转化为递增的指针形式
把循环展开
4. –O3
删除未使用的所有的函数
当函数的返回值没用到时,简化函数的返回形式
内联小的函数
重新对函数的声明进行排序。这样当优化调用代码时,被调用函数的属性是已知的
当所有调用都传递一个相同的参数时,把这个参数直接放到函数体中去,不在通过寄存器/存储器的方式传递这
个参数。
识别文件级别变量的特征
希望对您有帮助。
作者:
15901123858
时间:
2018-6-29 21:42
小晓筱伟 发表于 2018-6-28 21:01
这是CCS编译器优化选项的功能:
1. –O0
好的,谢谢,可能是我的函数并不适合O3的优化。。。
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4