如何清除L1,L2和L3缓存?

use*_*112 5 c++ cpu performance caching cpu-architecture

我正在做一些缓存性能测量,我需要确保缓存在计时之前没有"有用的"数据.

假设一个L3缓存为10MB就足以创建一个10M/4 = 2,500,000个浮点数的向量,遍历整个这个向量,对数字求和,并在迭代之前清空其中的任何数据的整个缓存向量?

mer*_*011 4

是的,这应该足以刷新L3有用数据的缓存。

我已经完成了类似类型的测量,并使用英特尔的缓存计数器进行了交叉验证,以验证我L3在测试期间是否出现了预期的缓存未命中次数。

如果你想绝对确定,你还应该使用计数器。特别是,您可以在大多数 Intel 架构中使用来测量末级缓存未命中情况Event select 2EH, Umask 41H。

有关这些计数器的详细信息,请参阅英特尔手册。