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



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

任何指针都会有帮助

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

基本的想法是(通过设计),你的L1缓存比你的L2缓存快,L2缓存比你的L3缓存快…在任何正常的设计中,您的L1缓存也小于您的L2缓存,而L2缓存又小于您的L3缓存…

所以您想要分配一个较大的内存块,然后依次访问(读写)它[1],直到您注意到执行X访问所花费的时间急剧增加。然后继续前进,直到你再次看到同样的东西。您需要分配一个比您希望发现的最大缓存更大的内存块。

这需要为实际测量访问一些低开销的访问时间戳计数器(在参考答案中指出)。

[1]或者取决于你是否想要欺骗任何可能会扭曲结果的聪明的预取,随机地在一个顺序推进的n字节块中。

最新更新