大家好,最近遇到奇怪的问题,
之前用SEED6437 做视频开发,视频处理速度为7帧每秒,DM6437的主频为600MHZ,
但是随着代码量增大,6437的L2只有128KB,有点力不从心了。
于是升级选用DM6467t,双核,DSP端主频1G,DDR速度300Mhz,
把程序移植到DM6467t后,发现速度只有2帧每秒!!!
最后发现是一个主要算法执行函数很费时间,而6437明显执行要快,
编译器的优化等级都是2,
找了好久没有找到问题所在?
甲方乙方:
球分析
State Lee1:
老兄是在那个城市?
Chris Meng:
回复 State Lee1:
你好,
DM6467t的DDR时钟可以到400Mhz(支持DDR-800),不知道你说的300Mhz是否是DDR的时钟频率。无论如何也是可以提高的。
我对比例一下DM6467的L1D比DM6437是要小点的。请问你的L2是否有配成部分cache?你是否有比较过cache的命中率?
甲方乙方:
回复 Chris Meng:
非常感谢您的回复!
目前问题没有解决。
我介绍下我的环境
系统 win7 64bit
DSP是裸机程序,没有使用任何系统
ccs5.5
仿真器 xds560plus
我现在把6467 DSP端配置为990M,ARM 495M,DDR的时钟频率为396M。
与DM6437一样,DM6467的L2全部配置成RAM。
现在视频处理帧速度只有DM6437的1/3~1/2
甲方乙方:
回复 Chris Meng:
我是菜鸟,请问怎么查看cahe的命中率,我的仿真器在ccs5.5的环境下,使用不了profile clock,
提示:
C64XP: GEL Output: C64XP: Error enabling a profile counter
甲方乙方:
回复 Chris Meng:
我看了下手册
DM6437 L1P 32KB, L1D 80KB, L2 128KB
DM6467T L1P 32KB, L1D 32KB, L2 128KB
L1D 少了很多,
请问,会是这个原因吗?
Louis:
回复 甲方乙方:
L1D CACHE的大小只是影响系统性能的一个指标。取决于函数的大小,如果算法关联度很高的函数加起来一次性无法放入L1D,就可能导致频繁的换页,L1D miss。这个可以通过profile来看。
下面是C6000 DSP优化的wiki,供参考:
http://processors.wiki.ti.com/index.php/Optimization_Techniques_for_the_TI_C6000_Compiler?keyMatch=optimization%20COMPILER&tisearch=Search-EN-Everything
甲方乙方:
回复 Louis:
谢谢您的回复,
我的一个图像处理主函数很大,大约2000行。整个工程更大,仅仅.text段大约有80KB
1、L1D是否会放不下这个函数,导致程序变慢?
2、我把L2配置成部分cache是否可以行,解决运行速度慢的问题?
3、L2中 cache和SRAM 是怎么排列的?我的意思是CMD文件中SRAM地址如何分配,L2中首先是cache还是SRAM?
我分配64KB的SRAM和64KB cache, 下面哪种方式对呢?
DSP_L2: o = 0x00818000 l = 0x0000FFFF /* 64 kB DSP L2 RAM 64KB CACHE */
或者DSP_L2: o = 0x00828000 l = 0x0000FFFF /* 64 kB DSP L2 RAM 64KB CACHE */
,
4、还有一个问题是关于MAR寄存器,我没有使用这个寄存器,他的作用是啥?
谢谢
Louis:
回复 甲方乙方:
1. 函数的大小,可以在生成的.map里面看到。
2.可以尝试打开部分L2-CACHE,去掉一些L2RAM。
3.如果是用CMD配置cache和Ram可以参考:spru862b.pdf的Example 2-1, 64k length 的值应该是0x10000而不是0xFFFF.
DSP_L2_RAM: o = 0x00818000 l = 0x00010000
TI中文支持网
, 

