libPAPI :最大同时事件测量

libPAPI : Maximum simultaneous events measure

我想使用图书馆提供的 PAPI 5.5.1 to check out performances about some of my text algorithms in order to observe differences about cycles, number of mispredictions and pipeline. I have checked the native events,并且我已使用工具 papi_avail.[= 验证我的计算机支持它们14=]

当我尝试同时测量最多 5 个本机事件时,效果很好。但是之后,PAPI拒绝开始计数。

这是我的简化内容:

#define NB_EVENTS 6
int CS_Events[NB_EVENTS] = {PAPI_BR_INS, PAPI_BR_MSP, PAPI_TOT_CYC, PAPI_TOT_INS, PAPI_RES_STL, PAPI_TOT_IIS};
PAPI_start_counters(CS_Events, NB_EVENTS); /* return PAPI_ECNFLCT */

PAPI_ECNFLCTdescription 是:

Hardware event exists, but cannot be counted due to counter resource limitations


我在 PAPI/perf 文档中没有找到关于此的更多信息。 (我对 x86(32|64) 和 ARM 处理器很感兴趣)。

PAPI(和其他性能监控库)基于硬件性能计数器。基本上,您编写一些特定于机器的寄存器来监视一组事件。显然,您可以监视的事件数量限制在 4 到 8 之间,这还取决于您是否启用了超线程(即禁用超线程后您可以访问 more )。正如评论指出的那样,了解您正在使用的体系结构,您可以通过查看文档了解可用计数器的数量。

如果您想监控比可用计数器数量更多的事件,那么您应该使用一种称为多路复用的技术。您可以使用 PAPI 执行此操作,但我从未尝试过:http://icl.cs.utk.edu/projects/papi/wiki/Multiplexing .

您也可以尝试使用perf。非常好,还有跟踪功能。