使用 PAPI 从 perf_event_uncore 列表中读取硬件计数器
Reading hardware counters from perf_event_uncore list with PAPI
我正在尝试使用 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
returns PAPI_OK, PAPI_add_event
returns -1 即 PAPI_EINVAL
- 无效参数。我尝试了几个计数器形式 perf_event_uncore
,但我遇到了同样的问题。我是否需要使用不同的功能将其添加到事件集中?还是我做错了什么?
我找到了一些似乎是解决方案的东西。像这样添加 cpu=0 规范后: PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native)
调用 PAPI_add_event
函数时没有进一步的错误。
还要注意,我已经检查过,这个特定的硬件计数器不能和其他的一起计数,所以它应该是事件集中唯一的事件。
我正在尝试使用 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
returns PAPI_OK, PAPI_add_event
returns -1 即 PAPI_EINVAL
- 无效参数。我尝试了几个计数器形式 perf_event_uncore
,但我遇到了同样的问题。我是否需要使用不同的功能将其添加到事件集中?还是我做错了什么?
我找到了一些似乎是解决方案的东西。像这样添加 cpu=0 规范后: PAPI_event_name_to_code("skx_unc_imc0::UNC_M_WPQ_CYCLES_FULL:cpu=0",&native)
调用 PAPI_add_event
函数时没有进一步的错误。
还要注意,我已经检查过,这个特定的硬件计数器不能和其他的一起计数,所以它应该是事件集中唯一的事件。