我对它有一个大概的想法。这就是我的想法:
首先,找出我将使用的L1缓存的大小。然后创建一个数组(字节数足够大以适应L1缓存),编写一个程序来访问数组的每个元素。然后在每个循环中创建时间戳。
对于L2缓存中的延迟,我可以使数组更大以达到L2缓存。
但实际上我不知道如何开始。我不清楚每个缓存的数组应该有多大,以及如何用上面的想法编写这个C程序。
有人可以帮我这个C程序吗?任何帮助将不胜感激!
非常感谢!
答案 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
您可以参考这篇文章,这将为您提供一些见解。