有关对缓存优化的问题

  • 1 replies
  • 882 views
有关对缓存优化的问题
« 于: 三月 01, 2023, 05:54:35 pm »
问题1:
请问L1/L2 Cache上只有local memory和global memory吗?如果SM读写数据是否和CPU一样先访问L1,再考虑L2,最后在内存?
问题2:
如下图所示,L1 Cache的hit Rate仅51%,请问这方面应该如何优化呢?

Re: 有关对缓存优化的问题
« 回复 #1 于: 七月 31, 2023, 09:04:11 pm »
关于你的两个问题,

1)有多方面的资料。一般的来说,对于local memory访问,因为总是存在强制性自动交错的。即warp中的32个线程,每个人拿到的相同的1个4B变量地址(local memory中),实际上的地址会被自动交错到连续的128B上。所以一般来说local memory你无需担忧。可以认为是正常情况下总是100%合并的L1 - L2 - 显存的访问(在你的计算能力架构是上)。

而对于global memory的访问,在你的计算能力架构上,读取是会通过L1 <- L2 <- 显存或者内存的。而写入则一般会L1 -> L2, 然后再不定的时候L2 -> 显存/内存。你搜索nvidia + gpu + l1 write through + l2 write back,可以获取更多信息。

2) 你的第二个问题,虽然你询问的是L1的hit ratio,这个不一定是越高越好,要看问题(例如streaming风格的访问,例如常见的2个向量的加法,直接回写显存)。但是profiler给出的另外一个方面是一个重大问题,它指出(你没有源代码)你的global memory的load和store,均是warp里的每个线程地址分散的很厉害的情况。虽然看不到代码,但是建议先解决这个问题,再看时间和cache命中率的变化。可能你解决了这个问题,你发现你不在需要解决问题2了。