我想使用PAPI 5.5.1来检查我的某些文本算法的性能,以便观察有关周期,错误预测的数量和管道的差异。我已经检查了库提供的the native events,并且使用工具 papi_avail 验证了我的计算机支持它们。
当我尝试同时测量最多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_ECNFLCT 的description是:
存在硬件事件,但由于计数器资源限制而无法计数
我在PAPI / perf文档中找不到关于此的信息。 (我对x86(32 | 64)和ARM处理器很感兴趣。)
所以计数器似乎有硬件限制?
是否存在要知道的表处理器/限制值?
还有其他方法吗?
答案 0 :(得分:1)
PAPI(以及其他性能监视库)基于硬件性能计数器。基本上,您可以对一些机器专用寄存器进行编程,以监视一组事件。显然,您可以监视的事件数限制在4到8之间,这取决于您是否启用了超线程(即,禁用超线程时,您可以访问更多)。正如评论所指出的那样,了解您所使用的体系结构之后,您可以通过查看文档来了解可用计数器的数量。
如果要监视的事件多于可用计数器的数目,则应使用称为多路复用的技术。您可以使用PAPI做到这一点,但我从未尝试过:http://icl.cs.utk.edu/projects/papi/wiki/Multiplexing。
您也可以尝试使用perf。这非常好,并且具有跟踪实用程序。