【问题标题】:Using Intel's PIN tool to count the number of cache hits/misses in a program使用英特尔的 PIN 工具计算程序中缓存命中/未命中的次数
【发布时间】:2014-11-25 11:49:58
【问题描述】:

我一直在尝试编写一个 pintool 来检测给定程序中的缓存命中和未命中。 我发现有诸如 INS_IsMemoryRead/Write 之类的调用来确定指令是否为 LD/ST。

  • 有没有办法确定指令是否命中或未命中?
  • 如果是这样,是否还可以获得从缓存/内存中获取数据所花费的周期数?

【问题讨论】:

    标签: c caching memory instrumentation intel-pin


    【解决方案1】:

    这两个都不可能。

    pin 自带的缓存工具“Memory”是一个非常简单的缓存功能模拟器。换句话说,通过使用缓存工具,可以查看/模拟应用程序可能有多少缓存未命中,具体取决于缓存组织,例如大小、路数、缓存级别。通过一些简单的代码编写,可以报告发生缓存未命中的指令,然后将这些指令映射回源代码。但是,即使缓存模拟器配置为与真实系统具有相同的缓存组织,缓存模拟的命中/未命中结果也可能与真实计算机系统不同或不对应。

    此外,缓存工具的另一个限制是它是单线程的。您不能将它用于多线程应用程序。

    此外,不可能获得任何时间信息,例如服务缓存未命中所需的周期数。这是非常依赖于架构的,我不知道有什么工具可以从真实系统中提供这些信息。相反,人们使用 CPU 时序模拟器。示例 CPU 时序模拟器是 Gem5 http://www.gem5.org/ 和基于 PtlSim http://marss86.org/ 的 Marss。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2019-07-04
      • 2019-08-11
      • 2019-10-05
      • 2019-03-03
      • 2014-11-09
      • 2012-08-26
      相关资源
      最近更新 更多