如何将intel PCM数据缩小到单个进程?

时间:2019-03-01 22:42:14

标签: intel performancecounter cpu-cache intel-pmu

我正在尝试使用英特尔性能计数器监控器(PCM)来了解L3缓存未命中以及代码中的其他一些性能标准。

我不确定如何从我得到的数字中弄清楚,并希望获得一些见识。

理想情况下,我希望从下面的代码中读取0字节,但是我得到的数字接近240KB。如果我尝试运行其他进程,则240KB的数字会波动(不会单调上升/下降,而是会产生有意义的波动(先上升然后下降))。

    volatile SystemCounterState before_sstate = getSystemCounterState();
    volatile SystemCounterState after_sstate = getSystemCounterState();

    cout << "Instructions per clock: "  << getIPC( before_sstate, after_sstate )
         << ", L3 Cache hit ratio: "    << getL3CacheHitRatio( before_sstate, after_sstate )
         << ", L3 Missed Cycles: "         << getCyclesLostDueL3CacheMisses(before_sstate, after_sstate )
         << ", Bytes read: "            << getBytesReadFromMC( before_sstate, after_sstate )
         << ", L3 Occupancy: "          << getL3CacheOccupancy( after_sstate ) << endl;

这是我得到的输出:

  

尝试使用Linux性能事件...

     

使用Linux性能成功编程的内核PMU

     

每时钟指令:0.637448,三级高速缓存命中率:0.820139,丢失周期:0.075492,读字节:263488,三级占用率:0

有人知道为什么我实际上没有读取任何内容,但为什么我却读取了240KB吗?它是否与其他进程共享计算资源,并可能还会从其他进程中获取统计信息? 如果是这样,我如何确保捕获的信息与正在运行的此代码/进程隔离?

0 个答案:

没有答案