如何知道,比如具体优化的某个函数是否发生了L1P和L1D的cache 冲突情况,用来知道这个函数是否有cache优化空间?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
如何知道,比如具体优化的某个函数是否发生了L1P和L1D的cache 冲突情况,用来知道这个函数是否有cache优化空间?
关键是你没有办法预知L1P和L1D冲突,你只能是根据TI的一些guide采取一些能够避免冲突的措施,对代码尽心调整。另外说一下,你是要做一个库,还是一个工程?如果是库的话,放到不同的应用当中得到的结果也会不一样,需要profile,然后看反馈的信息再调整代码。
可以详细阅读《TMS320C64x+ DSP Cache User's Guide》,了解一下
3.4.3 Avoiding L1P Conflict Misses .................................................................................... 56
3.4.4 Avoiding L1D Conflict Misses.................................................................................... 60
3.4.5 Avoiding L1D Thrashing .......................................................................................... 62
3.4.6 Avoiding Capacity Misses ........................................................................................ 64
3.4.7 Avoiding Write Buffer Related Stalls ............................................................................ 66
Louis 说:关键是你没有办法预知L1P和L1D冲突,你只能是根据TI的一些guide采取一些能够避免冲突的措施,对代码尽心调整。
我不太同意你的看法
1.
关于你说的没办法预知L1P和L1D冲突问题
我想说的是,那是因为对cache的运行机制没有彻底了解,烂熟于心,对于DSP的二级缓冲机制的不了解,必然会觉得DSP像一个黑盒子一样,不可预测。
如果了解了二级缓存的运行机制,代码和数据是如何从DDR导入到L2CACHE,地址是如何映射的,数据内容是如何替换的等等。只有了解了这些基本知识,才能对代码进行判断和分析,预知。
2.
关于ti的一些建议问题,以前也感觉优化只能跟着ti的文档走,只是一些技巧,这里搞一下,那里搞一下,往往ti列举的例子都是很特殊的,它举的例子,你实际中根本不会碰到,问题在于没有了解ti推荐技巧的本质所在,不知道背后的实质,不知道ti为什么这么做,就很被动。
你好,
抱歉,可能没有表达准确,我想表达的意思是你的对于L1P和L1D的冲突,在你写代码的时候是无法准确预知的,只有代码写完了,然后可以通过CCS profile的功能,才能看到那些函数出现了L1P,L1D的冲突,冲突占用的cycle是多少等等。
同意你关于熟悉二级缓存机制对于有效避免冲突的观点,对于DSP的二级CACHE缓存机制越是熟悉,在写代码的过程中,就能通过一些技巧和经验避免冲突。关于DSP的二级缓存机制,可以参考《TMS320C64x DSP Two-Level Internal Memory Reference Guide》 http://www.ti.com/lit/ug/spru610c/spru610c.pdf。
多谢你的建议,需要了解优化的技巧,需要了解DSP流水线的结构,缓存的机制,冲突产生的原因,BIOS的工作机制,内存的使用,编译器,EDMA的使用,DSP指令的功能单元的作用以及工作原理等等,是一个系统化的过程。
关于优化,我推荐你看一下 《TMS320C6000 Programmer’s Guide》 http://www.ti.com/lit/ug/spru198k/spru198k.pdf,里面有一些C代码以及编译器选项的优化。