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

时间:2010-04-05 03:18:36

标签: c cpu-cache

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

关于系统的假设:

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

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

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

以下是ATLAS的代码。它适用于L1缓存大小

ATLAS /调/ SYSINFO / L1CacheSize.c

https://github.com/vtjnash/atlas-3.10.0/blob/master/tune/sysinfo/L1CacheSize.c

int GetL1Size(int MaxSize, double tol)
{
int L1Size, tmp, correct=1;
fprintf(stderr, "\n Calculating L1 cache size:\n");

但它只是l1缓存,只有它的大小,而不是路数。

答案 2 :(得分:1)

您可能会发现STREAM benchmark有用或有趣,或两者兼而有之。

答案 3 :(得分:1)

问题已经过时了,但答案是here