3

我想知道如何使用 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-cycles相差cpu_clk_unhalted.ref_tsc约 25%。现在的问题是,这两个值中哪一个是正确的计算值?还是两种方法都错了?

4

1 回答 1

4

cpu-cycles是随 turbo / power-save P-states 变化的实际核心时钟频率。如果您关心微体系结构的事情,例如您要实现的每时钟 4 微指令前端瓶颈有多接近,请使用它。

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

有趣的事实:它使用与 RDTSC 相同的时钟源,但是当时钟停止时,事件计数器不会滴答作响,例如在 CPU 频率转换期间)。 英特尔丢失周期?rdtsc 和 CPU_CLK_UNHALTED.REF_TSC 之间的不一致

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

于 2018-07-20T09:47:07.883 回答