TI论坛
直播中

沈家春

7年用户 224经验值
私信 关注

请问如何判断一个函数是否发生了L1P冲突失效和L1D miss?

本帖最后由 一只耳朵怪 于 2018-6-22 11:19 编辑

如何知道,比如具体优化的某个函数是否发生了L1P和L1D的cache 冲突情况,用来知道这个函数是否有cache优化空间?

回帖(6)

沈家春

2018-6-22 04:54:36
如果不先判断某个函数是否发生了了L1P冲突和L1D冲突,又怎么能知道去优化哪里
举报

刘颖

2018-6-22 05:04:26
引用: viczeng 发表于 2018-6-22 04:54
如果不先判断某个函数是否发生了了L1P冲突和L1D冲突,又怎么能知道去优化哪里

关键是你没有办法预知L1P和L1D冲突,你只能是根据TI的一些guide采取一些能够避免冲突的措施,对代码尽心调整。另外说一下,你是要做一个库,还是一个工程?如果是库的话,放到不同的应用当中得到的结果也会不一样,需要profile,然后看反馈的信息再调整代码。
举报

刘颖

2018-6-22 05:21:49
引用: cmh8 发表于 2018-6-22 05:04
关键是你没有办法预知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
举报

沈家春

2018-6-22 05:38:18
引用: cmh8 发表于 2018-6-22 05:04
关键是你没有办法预知L1P和L1D冲突,你只能是根据TI的一些guide采取一些能够避免冲突的措施,对代码尽心调整。另外说一下,你是要做一个库,还是一个工程?如果是库的话,放到不同的应用当中得到的结果也会不一样,需要profile,然后看反馈的信息再调整代码。 ...

  1.
关于你说的没办法预知L1P和L1D冲突问题
我想说的是,那是因为对cache的运行机制没有彻底了解,烂熟于心,对于DSP的二级缓冲机制的不了解,必然会觉得DSP像一个黑盒子一样,不可预测。
如果了解了二级缓存的运行机制,代码和数据是如何从DDR导入到L2CACHE,地址是如何映射的,数据内容是如何替换的等等。只有了解了这些基本知识,才能对代码进行判断和分析,预知。
2.
关于ti的一些建议问题,以前也感觉优化只能跟着ti的文档走,只是一些技巧,这里搞一下,那里搞一下,往往ti列举的例子都是很特殊的,它举的例子,你实际中根本不会碰到,问题在于没有了解ti推荐技巧的本质所在,不知道背后的实质,不知道ti为什么这么做,就很被动。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分