微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 使用CLT 工具优化C6000 代码

使用CLT 工具优化C6000 代码

时间:09-12 来源:互联网 点击:

参照以下实例。

4. 实例教程

该实例主要由三个C 文件组成,

实例中使用DSP 计数器 TSCL 来统计cycle 数,子函数放在sub 目录下。

使用实例的步骤如下,

1. 编译代码

使用TI 编译器对该实例进行编译,为了产生用于profile 的信息,需要在编译时增加 -- gen_profile_info 选项。如果使用命令还形式,命令行下运行Compile.bat 文件,cl6x 的具体参数可以参考spru186 和spru187 两篇文档,一般可以在编译器的安装目录下找到他们,如C:\Program Files (x86)\Texas Instruments\C6000 Code Generation Tools 7.3.9\doc。

同时在目录下生成OBJ 和ASM 文件,这个和我们的实验关系不大,可以不用关注。

out 文件是一会需要下载到芯片里运行的可执行文件,而map 文件用于帮助我们定位profile 信息存放的内存地址。

如果用户使用CCS 编译工具,则需要在Build 的属性里指定Feedback 选项,然后正常编译即可生成携带分析代码的可执行文件。

2. 获取分析信息

根据用户获取分析数据的不同,这里有两种方法,第一种方法适用于持续运行的程序,比如在基于SYS/BIOS 的程序里,有些任务是以循环的方式存在的,这时用户需要自己从DSP 内存里读取分析数据。

首先打开map 文件,可以找到.ppdata 段的内存地址,这个地址就是profile 信息存放处,在例子中

.ppdata 0 0081fecc 00000034 UNINITIALIZED

.ppdata 段位于0x0081fecc 这个地址,长度是34 个byte。

启动CCS,连接EVM 板,下载out 文件到DSP 上,在main 函数末尾加上调试断点,可以让程序到这里暂停(实际上,在用户代码中,可以把断点设置在需要的任何地方,profile 的信息是实时更新的)。

运行该程序,到达断点后,在View 菜单里打开memory browser,将地址设定为0x0081fecc, 可以读到.ppdata 的信息,参考以下步骤将其存到工程目录下。

1) 选取Save Memory

2) 存放路径

3) 确定数据地址和长度,如下图

4) 修改dat 文件

打开刚才存下的dat 文件,注意到文件头的数据长度是以32 比特字为单位的,我们需要以8 比特字节为单位,如

1651 9 81fecc 0 d 1

修改为

1651 9 81fecc 0 34 1

5) 转换文件格式

对刚才的运行profile 信息进行分析,得到优化后的cmd 内存排布文件,该文件内容如下,用户可根据自己的程序进行修改

如果是大端,则将-le 选项改为-be 选项。

第二种方法,针对于只需运行一次流程的程序,CCS 可以自动生成pdat 文件,需要注意的是,生成pdat 文件的分析代码是在用户程序结束也就是exit()程序执行时进行,因此用户要保证自己的程序能完整运行到主函数出口结束,否则无法生成pdat 文件,需要用第一种方法来获取数据。

3. 重新编译代码

首先使用pdd6x 从数据文件里提取prf 文件作为重编译的输入文件

将输出的pfo.cmd 加入到项目的cmd 文件重新编译输出优化后的out 文件,cache 优化到此完成。

对比优化结果,对于TCP/IP 的例子应用上,CLT 带来了接近20%的提升,对于视频编码等应用CLT 也带来了5%左右的提升。而且,用户代码量越大,则CLT 可能带来的提升越明显。

4. 结论

通过使用CLT 工具,可以方便快捷的对用户代码的Cache 分配进行优化,用户不需要了解DSP Cache 分配的详细信息,只需要在Simulator 或者硬件板卡上运行定制的代码,就可以方便快捷地得到Cache 的详细信息,并自动根据这些信息对程序在内存的分布进行配置已达到提升性能的效果。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top