当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]摘 要在C6000 DSP 的开发过程中,优化是必不可少的一个环节,根据对象不同可以分为系统,算法,代码以及内存优化。通常,开发者熟悉自己的代码,会从前三个方面修改以获得整

摘 要

在C6000 DSP 的开发过程中,优化是必不可少的一个环节,根据对象不同可以分为系统,算法,代码以及内存优化。通常,开发者熟悉自己的代码,会从前三个方面修改以获得整体性能的提升,但是对于内存尤其是缓存(Cache)的优化,因为其涉及到芯片本身的架构,Cache 的维护由 DSP 自动完成,用户通常不能干预,所以似乎无从着手;考虑到这些实际的问题,从 TI 的 7.0 系列编译器开始支持使用缓存优化工具(Cache Layout Tools)对 C6000 代码进行优化,通过这一系列的工具,可以很轻松的完成 L1P Cache 性能的提升,本文详细介绍了该工具的使用方法。

1. 引言

目前,使用TI DSP 的用户越来越多,在C6000 系列DSP 中,包含了C64x, C64x+, C66x 等。在C6000 DSP 的开发过程中,为了充分利用DSP 的计算资源,需要对用户程序进行优化的工作,根据对象不同可以分为系统,算法,代码以及内存优化。通常,开发者熟悉自己的系统和代码,可以比较方便的从前三个方面修改以获得整体性能的提升,但是对于内存尤其是缓存(Cache)的优化,因为其涉及到芯片本身的架构,Cache 的维护由DSP 自动完成,用户通常不能干预,所以似乎无从着手;考虑到这些实际的问题,从TI 的7.0 系列编译器开始支持使用缓存优化工具(Cache Layout Tools)对C6000 代码进行优化,通过这一系列的工具,可以很轻松的完成L1P Cache 性能的提升,本文详细介绍了该工具的使用方法。

2. C6000 DSP 内核缓存机制

C6000 系统的存储器结构如下图所示。

存储器分成三级:第一级是L1,包括数据存储器(L1D)和代码存储器(L1P);第二级是代码和数据共用存储器(L2 以及MSMC SRAM);第三级是外部存储器,主要是DDR 存储器。L1P、L1D 和L2的Cache 功能分别由相应的L1P 控制器、L1D 控制器和L2 控制器完成。

在C6000 DSP 中通常我们会把L1P 全部配置成Cache,当CPU 发出取指命令,首先会从L1P 里查找,如果L1P 找不到,则到下一级Cache 或者Memory 里查找,当找到需要的地址,则将其读入L1P 里,CPU 从中读取执行。

因为L1P Cache 的大小是有限的(本文以32KB 为例),而用户内存空间一般大于32KB, 必须采取一种映射的方式使得所有地址都能被L1P 缓存;在C6000 DSP 中,L1P Cache 使用地址直接映射,所有DSP 核可访问的地址对L1P Cache 大小(32K)取模就能得到该地址在L1P Cache 的偏移值。

如果用户代码在内存排布不合理,可能会在L1P Cache 中发生反复的内容替换,下图中的例子是一个极端情况。

TOP 函数中FOR 循环反复调用A 函数,而A,B,C 三个函数在内存地址的分布上,与32KB 边界的偏移地址是一样的,因此,A,B,C 将对应L1P 里同一个CACHE 位置;其运行流程如下

· 当执行A 时,CPU 需要把A 函数调入到Cache 偏移值N 的位置上;

· A 调用B,此时调入B 到Cache 偏移值N 的位置上,覆盖A 的代码;

· B 调用C,此时调入C 到Cache 偏移值N 的位置上,覆盖B 的代码;

· C 返回,下一次循环调入A 到Cache 中覆盖C 的代码。

DSP 核对L1P,L2,DDR 的访问速度差异很大,对L1P 的访问通常在1 个时钟周期内完成,而L2 平均需要 3-5 个周期,DDR 访问需要的时间更多,因此我们应该尽量避免上述这种反复重写Cache的情况,尽可能的减少函数在Cache 中的置换。

如何解决该问题?最好的解决方法则是将A, B, C 在内存中连续排放,这样对Cache 的操作次数将降到最低,能够有效的提高执行效率,如下图所示,只要A,B,C 总的大小不超过32KB, 它们在Cache 中的偏移值就是连续的,不会发生覆盖的现象,即使其总和大于32KB,发生置换的也仅仅是超过32K 的部分。

3. 内存优化工具

通过上述机制可以看到,对于L1P Cache 的优化主要通过分析函数调用关系和其在内存的分布。由于用户代码日益复杂,人工分析代码调用关系和地址排布需要花费大量的时间。因此,从7.0 系列编译工具开始,TI 提供了一套内存优化工具 (Cache Layout Tools) 来帮助用户轻松快捷地解决该问题。

该工具的原理是在用户进行程序编译时打开生成分析信息选项,编译器会自动加入分析记录代码到用户程序里,之后用户在TI DSP simulator 或者DSP 芯片上运行该可执行文件,内置的分析代码会自动记录用户的函数调用关系及调用次数。运行的案例越多,记录的信息会更详细,优化的效果也就越好。

在得到函数运行时信息以后,就可以使用编译器工具对其进行分析,生成函数排布的顺序,最后将此排布顺序输入到编译器里重新编译原代码,生成的可执行文件就已经优化过内存排布,具体的操作可以参照以下实例。

4. 实例教程

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

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

使用实例的步骤如下,

1. 编译代码

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

[!--empirenews.page--]

同时在目录下生成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 的详细信息,并自动根据这些信息对程序在内存的分布进行配置已达到提升性能的效果。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭