【问题标题】:How to correctly measure IPC (Instructions per cycle) with perf如何使用 perf 正确测量 IPC(每周期指令)
【发布时间】:2018-12-28 12:31:24
【问题描述】:

我想知道如何使用 perf 正确测量每个周期的指令。作为参考:http://www2.engr.arizona.edu/~tosiron/papers/SPEC2017_ISPASS18.pdf 使用inst_retired.anycpu_clk_unhalted.ref_tsc 进行计算,我现在想知道这是否是正确的方法。相比之下,PAPI 使用硬件计数器PAPI_TOT_INSPAPI_TOT_CYC 来计算 IPC。

经过一些测量,我得出结论:

  • inst_retired.any:u 好像和PAPI_TOT_INS 一样
  • cpu-cycles 好像和PAPI_TOT_CYC 一样

在一个示例基准测试中,cpu-cyclescpu_clk_unhalted.ref_tsc 相差约 25%。现在的问题是,这两个值中哪一个是正确的计算值?还是两种方法都错了?

【问题讨论】:

  • 如果您提供有关应用程序、系统和系统配置的具体信息,我们可以提供更好的答案。

标签: x86 performancecounter perf papi


【解决方案1】:

cpu-cycles 是实际的核心时钟频率,它会随着 turbo / power-save P-states 而变化。如果您关心微架构方面的问题,例如您要实现的每时钟 4 微指令前端瓶颈有多接近,请使用它。

cpu_clk_unhalted.ref_tsc 是参考周期,并且始终以(接近)CPU 的额定/标定速度滴答。 (例如,我的 4GHz i7-6700k 上的固定 4008 MHz)。如果您关心每次的工作,包括选择加速或在部分内存受限时保持低时钟速度,请使用它(或task-clock)。 (取决于 EPP 能源性能偏好设置。)

有趣的事实:它使用与 RDTSC 相同的时钟源,但是当时钟停止时事件计数器不会滴答作响,例如在 CPU 频率转换期间)。 Lost Cycles on Intel? An inconsistency between rdtsc and CPU_CLK_UNHALTED.REF_TSC

(半相关:How to get the CPU cycle count in x86_64 from C++? 了解更多关于 TSC 和rdtsc

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多