如何使用C测量L1,L2和L3缓存延迟?

时间:2014-01-24 21:30:34

标签: c arrays caching

我对它有一个大概的想法。这就是我的想法:

首先,找出我将使用的L1缓存的大小。然后创建一个数组(字节数足够大以适应L1缓存),编写一个程序来访问数组的每个元素。然后在每个循环中创建时间戳。

对于L2缓存中的延迟,我可以使数组更大以达到L2缓存。

但实际上我不知道如何开始。我不清楚每个缓存的数组应该有多大,以及如何用上面的想法编写这个C程序。

有人可以帮我这个C程序吗?任何帮助将不胜感激!

非常感谢!

2 个答案:

答案 0 :(得分:0)

已经有一个名为LMbench的工具正是这样做的。

这是一个开源工具,所以你甚至可以查看源代码,看看他是如何做到的。

答案 1 :(得分:0)

您可以使用linux中的命令查看缓存大小:

  

grep。 / sys / devices / system / cpu / cpu1 / cache / index * / *

在我的情况下(英特尔酷睿i7),它显示L1 D cahe是32KB所以你的阵列大小也应该是相同的; 例如 比如x = 32 * 1024 / sizeof(int) 然后创建一个x整数数组,占用正好32KB 在这种情况下,它是int [32 * 1024/4]

同样你也可以申请L2和L3

Measuring Cache Latencies

您可以参考这篇文章,这将为您提供一些见解。