DSP程序汇编级优化
来源:互联网 发布:广西广电网络电视 编辑:程序博客网 时间:2024/06/10 23:49
1. 查看编译器生成的汇编文件
(1)内存依赖路径
在asm文件中搜索“SOFTWARE PILELINE INFORMATION”,然后再看“Loop Carried Dependency Bound()”,后面的值,如果很大的话,那就是有依赖路径,就在被调用函数的参数列表的指针前面加上限制词:restrict,如:void lesson1_c(short * restrict xptr,short *restrictyptr,short *zptr,short *w_sum,int N).
(2)观察每次循环执行的时间
首先搜索“SOFTWARE PILELINE INFORMATION”,再搜索“Searching for software pipeline schedule at…”,如果ii =3 Schedule found with 5 iterations inparallel, 再搜索“Loop Unroll multiple”,如果后面的参数为2X, 就说明循环被展开了一倍,而且在软件被流水之后有5个循环体同时进入软件流水。这里说明有两个循环体被同时执行。2个循环体需要3个时钟周期,即软件流水之后每个每个循环体执行需要1.5个周期。
再看一个例子:
Loop Unrol Multiple
Ii=2 Schedule found with 6 iterations in parallel
说明每个循环体执行需要2个周期,即经过软件流水之后的每个循环体执行需要1个周期。l
(3) 观察资源平衡决定是否展开循环
搜索“Resource Partition:”,看看L,S,D,M共8个单元使用是否平衡,即是否在每个时钟周期内充分使用了资源。
先看一个资源使用不充分的例子:
第一个信息(最关键的D单元和M单元):
Resource Partition A-side B-side
.L units 0 0
.S units 1 1
.D units 2* 1
.M units 1 1
这个信息和下面这两个信息一起分析。
第二个信息:
ii =2 Schedule found with 6 iterations in parallel
第三个信息:没有循环展开。
结合这三个信息发现,循环体没有展开。每个循环体执行需要2个周期。结合第一个信息知道,M单元两个周期只用了2次(因为每个周期i只用了来年改革乘法器),浪费了2个M单元。还有,两个周期内左边用了2个D单元,右边用了 1个D单元,浪费了1个 D单元。
再看一个资源充分利用的情况下,仍然可以改善的情况。
第一个信息:
Resource Partition A-side B-side
.L units 0 0
.S units 2 1
.D units 3* 3*
.M units 2 2
第二个信息:
Ii=3 Schedule found with 5 iterations in parallel
第三个信息:
Loop Unroll Multiple : 2x
说明循环展开一次,每两个周期需要3个周期。这3个周期使用了6个D单元,使用了4个M单元,说明每3个周期都有4次乘法运算。
当D单元充分使用的情况下,我们在看看带宽使用,如果使用了LDH读取数据,就改成LDW读取数据。
我们再看看速度达到极限的情况下,资源的利用情况。
第一个信息:
Resource Partition A-side B-side
.L units 0 0
.S units 2* 1
.D units 2* 2*
.M units 2* 2*
第二个信息:
Ii = 2 Schedule found with 6 iterations inparallel
第三个信息:
Loop Unroll Multiple : 2x
从第二个信息和第三个信息得知优化的速度达到了极限:经过软件流水的循环执行每个循环体只有一个周期。
- DSP程序汇编级优化
- 【DSP开发】DSP程序优化
- DSP程序优化方法
- DSP程序优化方法
- DSP程序优化方法
- DSP程序优化方法
- DSP程序优化方法
- DSP程序优化
- dsp优化-线性汇编中调用全局变量
- DSP程序优化方法(1)
- DSP程序优化方法(1)
- DSP程序优化方法(2)
- DSP程序优化方法(3)
- DSP程序优化方法(4)
- dm6446 DSP端程序优化
- DSP程序优化---ccs优化选项详解
- dsp代码级优化
- DSP 汇编
- 深入理解ThreadLocal
- myeclipse安装findbugs
- JVM指令字符集
- __func__标识符
- linux 命令系列之 基于xinetd服务(66)
- DSP程序汇编级优化
- Duilib编译成静态库
- 如何解决Python2的内存泄漏问题
- __VA_ARGS__用法(转)
- softwave
- 【机房重构】SQLHelper
- 错误信息:Warning Cannot modify header information - headers already sent by 的解决方法fi
- [hdu] CUP
- struts2重写request的方法引发的问题!(加不加#号问题)