3

我正在尝试使用 PAPI 读取硬件计数器之一。当我尝试从perf_event列表中读取事件时,它工作正常。但是现在我需要从perf_event_uncore列表中读取其中一个计数器,该计数器是用 获得的papi_native_avail,但我得到一个错误。它在级联湖架构上运行,具有 linux 5.4.0-3-amd64 版本。

int err = PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL",&native);
if (err != PAPI_OK)
    printf("PAPI_event_name_to_code error: %d\n", err);

err = PAPI_add_event(EventSet, native);

if (err!= PAPI_OK)
      printf("PAPI_add_event error: %d\n", err);

即使PAPI_event_name_to_code返回 PAPI_OK,也会PAPI_add_event返回 -1,即PAPI_EINVAL- 无效参数。我尝试了几种计数器形式perf_event_uncore,但遇到了同样的问题。我是否需要使用不同的功能将其添加到事件集中?还是我做错了什么?

4

1 回答 1

2

我发现了一些似乎是解决方案的东西。像这样添加 cpu=0 规范后:调用函数PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native)时没有进一步的错误。PAPI_add_event

另外需要注意的是,我已经检查过了,这个特定的硬件计数器不能和其他计数器一起计算,所以它应该是事件集中唯一的事件。

于 2020-03-22T15:29:08.667 回答