libPAPI:最大同时发生事件量度

时间:2018-06-28 10:05:31

标签: c hardware papi

我想使用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处理器很感兴趣。)

  • 所以计数器似乎有硬件限制?

  • 是否存在要知道的表处理器/限制值?

  • 还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

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

如果要监视的事件多于可用计数器的数目,则应使用称为多路复用的技术。您可以使用PAPI做到这一点,但我从未尝试过:http://icl.cs.utk.edu/projects/papi/wiki/Multiplexing

您也可以尝试使用perf。这非常好,并且具有跟踪实用程序。