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

从第二个信息和第三个信息得知优化的速度达到了极限:经过软件流水的循环执行每个循环体只有一个周期。

 

0 0
原创粉丝点击