【问题标题】:cache misss/ cache miss rate of a 2D array二维数组的缓存未命中/缓存未命中率
【发布时间】:2014-06-22 02:58:50
【问题描述】:

我正在 Linux 上执行我的 C++ 代码。在我的代码中,有一些结构的大型二维数组。该数组是随机访问的。我必须找出访问该二维数组时发生了多少缓存未命中。除了 valgrind(因为计算结果需要花费太多时间)之外,还有其他解决方案可以帮助我找到该数组的缓存未命中率和缓存未命中率。

【问题讨论】:

  • 如果对数组的访问被封装了,或许可以为给定的缓存属性写一个简单的缓存模拟器,然后挂钩到数组访问?
  • 如果是真正的随机访问,那么命中/未命中率就是cache_size/array_size。

标签: c++ performance caching


【解决方案1】:

通常,您的程序不只是访问二维数组,因此内存访问包括其他变量。它可能或多或少会产生一些影响。

如果数组访问密集(或封装),也许您可​​以使用简单的模拟器来评估未命中率。

否则,您可能需要一些工具。我推荐Pin,一个动态二进制插桩工具,原理和valgrind差不多,虽然我觉得开销可以接受,但是要自己写分析代码。

或者更好的选择是英特尔的性能分析工具Vtune,试试缓存分析。不过,你需要一些时间来学习它。

【讨论】:

    【解决方案2】:

    由于细微的差异(在替换策略、协议等方面),模拟缓存可能无法重现完全相同的行为。

    更好的选择是分析代码 - 最简单的 linux 分析工具可能是 perf。这里有一个相当不错的教程 - https://perf.wiki.kernel.org/index.php/Tutorial

    另见 - Are there any way to profile cache miss in linux kernel? ,它包含一个特定示例统计列表以检查缓存性能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 2015-02-24
      • 2012-05-13
      相关资源
      最近更新 更多