我想知道如何使用perf正确地测量每个周期的指令。作为参考:ISPASS18.pdf使用inst_retired.any和cpu_clk_unhalted.ref_tsc进行计算,我现在想知道这是否是正确的方法。相比之下,PAPI使用硬件计数器PAPI_TOT_INS和PAPI_TOT_CYC来计算IPC。
经过一些测量,我得出结论:
inst_retired.any:u似乎和PAPI_TOT_INS一样cpu-cycles似乎和PAPI_TOT_CYC一样在一个例子中,cpu-cycles与cpu_clk_unhalted.ref_tsc的差别约为25%。现在的问题是,这两个值中哪一个是计算正确的?还是两种方法都错了?
发布于 2018-07-20 09:47:07
cpu-cycles是随涡轮/省电P状态变化的实际核心时钟频率.如果你关心的是微体系结构的东西,比如每个时钟前端瓶颈离你有多近,那就用它吧。
cpu_clk_unhalted.ref_tsc是参考周期,总是以(接近) CPU的额定/粘贴速度运行。(例如,我的4 4GHz i7-6700k上有一个固定的4008 MHz )。使用它(或task-clock),如果你关心的工作时间,包括选择涡轮增压或保持低时钟速度时,部分内存限制。(取决于EPP能源-性能-首选项设置。)
有趣的事实:它使用与RDTSC相同的时钟源,但是当时钟停止时,事件计数器不会勾选,例如在CPU频率转换期间)。TSC
(半相关:64 from C++?获得更多关于TSC和rdtsc的信息)
https://stackoverflow.com/questions/51438407
复制相似问题