DSP

DSP程序汇编级优化

2019-07-13 09:51发布

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