1

我是 c 编程的新手。我有一项任务是查找 cpu 中数据缓存级别的数量以及每个级别的命中时间。我正在查看C 程序以确定缓存的级别和大小,但发现很难解释结果。缓存级别的数量是如何显示的?

任何指示都会有所帮助

4

1 回答 1

0

假设您没有办法作弊(例如从操作系统或某些 CPU 识别寄存器中获取该信息的某种方式):

基本思想是(按设计),您的 L1 缓存比 L2 缓存快,后者比 L3 缓存快...在任何正常设计中,您的 L1 缓存也小于 L2 缓存,L2 缓存小于 L3缓存...

因此,您希望分配一个大的内存块,然后按顺序访问(读取写入)它[1],直到您注意到执行 X 次访问所花费的时间急剧增加。然后继续前进,直到你再次看到相同的东西。您需要分配一个大于您希望发现的最大缓存的内存块。

这需要访问一些低开销的访问时间戳计数器以进行实际测量(如引用的答案中所指出的)。

[1] 或者取决于您是否想尝试在顺序进行的 N 字节块中随机欺骗任何可能会扭曲结果的巧妙预取。

于 2013-05-07T19:23:45.307 回答