测量L1和L2缓存的大小和方式顺序

osg*_*sgx 15 c cpu-cache

如何以编程方式测量(不查询操作系统)L1和L2缓存(数据缓存)的关联性的大小和顺序?

关于系统的假设:

  • 它有L1和L2缓存(也可能是L3,可能是缓存共享),
  • 它可能有一个硬件预取单元(就像P4 +),
  • 它有一个稳定的时钟源(tickcounter或良好的HPET for gettimeofday).

没有关于操作系统的假设(它可以是Linux,Windows或其他),我们不能使用POSIX查询.

语言为C,可能禁用编译器优化.

Gab*_*abe 6

我认为您需要做的就是以不断增加的块(重新确定缓存大小)重复访问内存,我认为您可以改变步幅以确定关联性.

因此,您将开始尝试访问非常短的内存段并保持大小加倍,直到访问速度变慢.每次访问速度变慢时,您都确定了另一级缓存的大小.

  • 但是如何转换硬件预取,这将掩盖一些尺寸? (2认同)