以编程方式查找缓存级别的数量

时间:2013-05-06 18:06:56

标签: c caching cpu-architecture computer-architecture

我是c编程的新手。我有一个分配来查找cpu中的数据缓存级别数以及每个级别的命中时间。我正在查看C Program to determine Levels & Size of Cache,但发现很难解释结果。缓存级别的数量是如何显示的?

任何指针都会有所帮助

1 个答案:

答案 0 :(得分:0)

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

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

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

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

[1]或者取决于你是否想要在顺序进行的N字节块中随机地欺骗任何可能使结果产生偏差的聪明预取。