我是c编程的新手。我有一个分配来查找cpu中的数据缓存级别数以及每个级别的命中时间。我正在查看C Program to determine Levels & Size of Cache,但发现很难解释结果。缓存级别的数量是如何显示的?
任何指针都会有所帮助
答案 0 :(得分:0)
假设您没有办法作弊(比如从操作系统或某些CPU识别寄存器获取该信息的某种方式):
基本思想是(按设计),你的L1缓存比L2缓存更快,比你的L3缓存更快......在任何正常设计中,你的L1缓存也比你的L2缓存小比你的L3缓存......
因此,您希望分配一个大容量的内存块,然后按顺序访问(读取和写入)[1],直到您发现执行X访问所花费的时间急剧增加。然后继续,直到你再次看到同样的事情。您需要分配一个大于您希望发现的最大缓存的内存块。
这需要访问一些低开销的访问时间戳计数器以进行实际测量(如引用的答案中所指出的那样)。
[1]或者取决于你是否想要在顺序进行的N字节块中随机地欺骗任何可能使结果产生偏差的聪明预取。