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

6

我对此有一个大致的想法,具体如下:

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

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

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

能否有人帮助我写这个C程序?任何帮助都将不胜感激!

非常感谢!


1
“我不清楚每个缓存所需的数组大小应该是多少。” 处理器制造商通常会提供有关其处理器型号的详细信息,例如缓存大小。这些信息可以在他们的网站上下载。 - FrankPl
也许更容易获取CPU型号,然后像@FrankPI所说的那样访问某种数据库以获取缓存延迟。 - xuhdev
@acarlon 我不知道您可以限制缓存访问一个进程。 - SeriousBusiness
2个回答

1
你可以使用以下Linux命令查看缓存大小:

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

在我的情况下(Intel Core i7),它显示L1 D缓存为32KB,因此您的数组大小也应该是相同的;例如,假设x = 32 * 1024 / sizeof(int) 然后创建一个包含x个整数的数组,占用正好32KB 在这种情况下,它是int [32 * 1024/4]
对于L2和L3,您也可以采用同样的方法 测量缓存延迟,您可以参考此帖子,它将为您提供一些见解。

0

已经有一个名为LMbench的工具可以完全做到这一点。

它是一个开源工具,因此您甚至可以查看源代码并了解他是如何实现的。


LMBench中的缓存大小测试在哪里?它是如何工作的?是lat_mem吗?https://dev59.com/nOo6XIcBkEYKwwoYKRDG#21542939 - osgx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接