代码之家  ›  专栏  ›  技术社区  ›  Mark

快速使缓存失效

  •  3
  • Mark  · 技术社区  · 16 年前

    3 回复  |  直到 16 年前
        1
  •  1
  •   Anon.    16 年前

    我假设这是为了性能测试,您希望消除运行之间的缓存效应。

    在这种情况下,您需要知道的是如何高效地执行此操作:

    1. 二级缓存的分配大小
    2. 二级缓存中有多少个分配

    那基本上就是一个触动记忆的问题 allocation_size 在完全刷新缓存之前,字节之间的距离将一直保持不变。

    上下文切换通常也会使缓存失效—这样可能会更快地恢复缓存 wait 一毫秒后,如果操作系统将你换入换出,很可能最终会清除缓存。

        2
  •  1
  •   Omnifarious    16 年前

    当然,对于指令缓存来说,这可能不是一个很容易管理的解决方案,仅对于数据缓存来说,即使这样,处理堆栈也会很棘手。

    如果您关心的话,我也想不出一种方法可以让这种方法在TLB缓存中可靠地工作。

    这种方法的另一个问题是,可能仍然存在脏缓存线,稍后运行代码将导致将它们刷新到主内存的成本。

        3
  •  -2
  •   Charles Eli Cheese    16 年前

    您想使用内存围栏。在vc++中:

    void SThreadUtil::synchronizeCache()
    {
        _mm_mfence();
    }
    

    很抱歉冲水用的应该是 _mm_clflush