DSP实践设计与仿真-PYD
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TMS320C6000编译器优化
随着数字信号处理技术飞速发展与应用,DSP在很多实际系统应用时的复杂度增大,为了充分利用TMS320C6000系列丰富的内部资源,需要对其编译器和程序代码进行优化。而优化的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。编译器尝试自动优化代码以提高其性能,当今的编译器都深谙其道。编译器可以转化循环、条件语句和递归函数、消除整块代码和利用目标指令集的优势让代码变得高效而简洁,而对于程序员来说,写出可读性高的代码要比因为手工优化而使代码变得神秘且难以维护更加可贵。事实上,手工优化的代码反而可能会让编译器难以进行额外和更加有效的优化。
对于TMS320C6000软件开发而言,它的整个工作流程分三个阶段,第一阶段是代码编写,只为验证代码的正确性;第二阶段是在第一阶段基础上对C代码的优化阶段;第三阶段为汇编级的优化阶段,将上一阶段C 程序中优化效率较低的部分提出来, 用线性汇编语言编写, 利用汇编优化器进行优化。
下面根据周老师上课提供课件以及课下资料分几步完成TMS320C6000编译器优化:
1.为C62x快速仿真器安装Code Composer Studio3.0,如下图1选取C62xx,选择Add to system configuration,点击Close按钮,退出安装,同时保存设置。
图1
2.打开实验用文件Project菜单中选择Open按钮并浏览sim62xx\optimizing_c 子文件,如图2所示:
图2
3.分析自优化选项引用前后循环传递路径和反馈信息:
引用前分析进度表中有ii=10,意味着每次循环迭代占用10个时钟周期。编译器尝试的第一次循环迭代间隔通常取循环传递相关限和资源分割线的最大值。在这种情况下,编译器认为循环传递路径等于10个时钟周期。而运用C编译器提供的部分自动优化选项-mt选项对上引用程序进行重新编译,结果表明编译器发现了一个2周期循环。改善了该循环的周期。
(1).使用自优化选项前程序:
void lesson_c(short *xptr, short *yptr, short *zptr, short *w_sum, int N)
{
int i, w_vec1, w_vec2;
short w1,w2;
w1 = zptr[0];
w2 = zptr[1];
for (i = 0; i < N; i++)
{
w_vec1 = xptr[i] * w1;
w_vec2 = yptr[i] * w2;
w_sum[i] = (w_vec1 + w_vec2) >> 15;
}
}
反馈信息:
;*----------------------------------------------------------------------------* ;* SOFTWARE PIPELINE INFORMATION
;*
;* Loop source line : 26
;* Loop opening brace source line : 27
;* Loop closing brace source line : 31
;* Known Minimum Trip Count : 1
;* Known Max Trip Count Factor : 1
;* Loop Carried Dependency Bound(^) : 10
;* Unpartitioned Resource Bound : 2
;* Partitioned Resource Bound(*) : 2
;* Resource Partition:
;* A-side B-side
;* .L units 0 0
;* .S units 1 1
;* .D units 2* 1
;* .M units 1 1
;* .X cross paths 1 0
;* .T address paths 2* 1
;* Long read paths 1 0
;* Long write paths 0 0
;* Logical ops (.LS) 1 0 (.L or .S unit)
;* Addition ops (.LSD) 0 1 (.L or .S or .D unit)
;* Bound(.L .S .LS) 1 1
;* Bound(.L .S .D .LS .LSD) 2* 1
;*
;* Searching for software pipeline schedule at ...
;* ii = 10 Schedule found with 1 iterations in parallel
;* Done
;*
;* Collapsed epilog stages : 0
;* Collapsed prolog stages : 0
;*
;* Minimum safe trip count : 1
;*----------------------------------------------------------------------------* $C$L1: ; PIPED LOOP PROLOG
;** --------------------------------------------------------------------------* $C$L2: ; PIPED LOOP KERNEL
$C$DW$L$_lesson_c$5$B:
LDH .D1T1 *A5++,A3 ; |28| <0,0> ^
|| LDH .D2T2 *B4++,B6 ; |28| <0,0> ^
NOP 2
[ B0] SUB .L2 B0,1,B0 ; |26| <0,3>
[ B0] B .S2 $C$L2 ; |26| <0,4>
MPY .M1 A3,A6,A3 ; |28| <0,5> ^
|| MPY .M2 B6,B5,B6 ; |28| <0,5> ^
NOP 1
ADD .L1X B6,A3,A3 ; |28| <0,7> ^
SHR .S1 A3,15,A3 ; |28| <0,8> ^
STH .D1T1 A3,*A4++ ; |28| <0,9> ^