【问题标题】:Force to L1 cache miss强制 L1 缓存未命中
【发布时间】:2016-09-03 03:00:23
【问题描述】:

我想强制我的程序每次(或几乎每次)都错过缓存 L1。

所以,我的 IvyBridge 有 32 KB L1 缓存,它是 8 路的。因此,每组包含 8 行,每行有 64 个字节。要设置的地址映射的前 6 位,最后 7 位映射到行内偏移,其他位确定标签。

如何错过缓存?我应该使用同一组的 8 个(每组有 8 行)不同的加载操作吗?

【问题讨论】:

  • 这不清楚。缓存未命中的最简单方法是仅加载当前不在缓存中的地址。
  • 顺便说一下,L1 缓存行是 64 字节。
  • 你为什么要这么做?你想完成什么?

标签: x86


【解决方案1】:

是的,你在正确的轨道上。使用所有都在同一个集合中的地址可以让您测试具有最少不同地址的 L1 缓存未命中。

但是,8 个不同的地址显然是不够的,因为它们都可以放在一组中。最好的选择是将它翻倍或翻四倍,让 LRU 驱逐算法有足够的机会在你返回之前驱逐一条线。

但是,如果您在太多页面上使用了太多不同的地址,请注意 TLB 未命中。 2MB 大页面在这里可以提供帮助。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 2016-10-18
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多