Skip to main content
 首页 » 编程设计

linux之我们可以在执行读取指令后检查缓存中的值吗

2023年11月22日66傻小

最近写了一个矩阵转置的程序。

     for (int i = 0; i < 1000; i++) 
     { 
          for (int j = 0; j < 1000; j++) 
          { 
               ndata[j][i] = odata[i][j]; 
          } 
     } 

从上面的代码,我们知道内循环对odata是缓存友好的,但是对ndata不友好,这会导致很多cache miss,我想在 read 指令 执行后检查 L1 cache 和 L2 cache 的值。我怎样才能做到这一点?

请您参考如下方法:

首先 - 1000*1000*2 个元素(什么,int?)不适合我所知道的任何 L1,也许是 L3。

至于你的问题 - 没有简单的方法来检查缓存的内容(期望在产生该信息的 CPU 或缓存模拟器上运行它),你可以测量该行的访问时间但是你会a) 影响缓存的内容或它们的 LRU 权重,并且 b) 可能会得到无意义的结果,除非您在一次测量中测量访问多个这样的行并摊销。

顺便说一句,如果您有兴趣改进此代码,只需在每次迭代时为 ndata[j+1][i] 添加 SW 预取。