1

我想使用PAPI 5.5.1来检查我的一些文本算法的性能,以观察周期、错误预测数量和管道的差异。我检查了库提供的本机事件,并使用工具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描述是:

硬件事件存在,但由于计数器资源限制无法计数


我在 PAPI/perf 文档中再也找不到这方面的信息了。(我对 x86(32|64) 和 ARM 处理器很感兴趣)。

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

  • 是否存在表处理器/限制的值来了解它?

  • 有没有其他方法可以做到这一点?

4

1 回答 1

1

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

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

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

于 2018-06-29T10:00:48.787 回答