优化过程:
•优化根据程序剖分结果,把占用运行时间较多的模块进行优化,优化到代码能够有效的满 足需要
•三阶段:
–分析和设计C代码
–利用硬件平台信息优化C代码
–汇编优化
线性汇编与汇编不同:
不需要考虑汇编的功能单元的使用、寄存器的分配、指令是否并行以及流水线的延迟,因而不用安排软件流水;
线性汇编格式
.global __function_name
__ function_name: .cproc function_parameter
.no_mdep ; to indicate the complier that the memory is independent, optioned
.reg user_specified_register_name
……
.mptr register, base+offset, stride
……
LOOP: .trip min_iteration_time, max_iteration_time, iteration_factor
Label: parallel bars [conditions] instruction unit operands ;comments
……
[Cntr] SUB Cntr, 1, Cntr
[Cntr] B LOOP
……
.return ; the value or pointer returned
.endproc
线性汇编优化考虑点
1、算法优化:解决存储空间的相关性问题,即若编译器无法确定指令间或者存储器间的独立,就假设它们相互依赖,所以通过人为的对存储器的相关性进行指定,可以减少由于相关性模糊造成的存储器依赖,如C中可以用const、restrict等来指定,对于线性汇编,则采用.no_mdep伪指令来说明这个过程内的所有存储器的无关性,对于C代码则是使用-mt的编译选项说明存储器间没有重叠的。
4、减少bank冲突以及因为交叉通道造成的延迟(对于C64xx或者以上DSP)
转自http://houh-1984.blog.163.com/blog/谢谢原作者