我对PAPI(性能应用程序编程接口)有疑问。我下载并安装了PAPI库。仍然不确定如何正确使用它以及我需要什么其他东西才能使其正常工作。我正在尝试在C语言中使用它。我有一个简单的程序:
int retval;
retval = PAPI_library_init(PAPI_VER_CURRENT);
if (retval != PAPI_VER_CURRENT && retval > 0) {
printf("PAPI error: 1\n");
exit(1);
}
if (retval < 0)
printf("PAPI error: 2\n");
retval = PAPI_is_initialized();
if (retval != PAPI_LOW_LEVEL_INITED)
printf("PAPI error: 2\n");
int num_hwcntrs = 0;
if ((num_hwcntrs = PAPI_num_counters()) <= PAPI_OK)
printf("This system has %d available counters. \n", num_hwcntrs);
我已经包含了papi.h库,并且正在使用gcc -lpapi标志进行编译。我在路径中添加了库,因此它可以编译和运行,但是结果是:
此系统有0个可用计数器。
思想初始化似乎可以正常工作,因为它不提供错误代码。 任何建议或建议都将有助于确定我做错了什么或错过了正确运行它的方法。我的意思是,我的系统中应该有可用的计数器,更准确地说,我需要缓存未命中和缓存命中计数器。
运行另一个简单程序后,我尝试对可用计数器进行计数,并给出错误代码-25:
int numEvents = 2;
long long values[2];
int events[2] = {PAPI_L3_TCA,PAPI_L3_TCM};
printf("PAPI error: %d\n", PAPI_start_counters(events, numEvents));
更新:我只是尝试使用以下命令从终端硬件信息中进行检查:papi_avail |更多;我知道了:
可用的PAPI预设和用户定义的事件以及硬件信息。
PAPI版本:5.7.0.0
操作系统:Linux 4.15.0-45-通用
供应商字符串和代码:GenuineIntel(1,0x1)
模型字符串和代码:Intel(R)Core(TM)i5-6200U CPU @ 2.30GHz(78,0x4e)
CPU版本:3.000000
CPUID:系列/型号/步进6/78 / 3,0x06 / 0x4e / 0x03
CPU最高MHz:2800
CPU最低MHz:400
总核心数:4
每个内核的SMT线程:2
每个插槽的核心数:2
套接字:1
每个NUMA区域的核心数:4
NUMA个区域:1
在VM中运行:否
硬件计数器数量:0
最大复用计数器:384
快速计数器读取(rdpmc):否
PAPI预设事件
Name Code Avail Deriv Description (Note)
PAPI_L1_DCM 0x80000000否否1级数据缓存未命中
PAPI_L1_ICM 0x80000001否否1级指令高速缓存未命中
PAPI_L2_DCM 0x80000002否否2级数据缓存未命中
PAPI_L2_ICM 0x80000003否否2级指令高速缓存未命中 .......
因此,由于Number Hardware Counters为0,我不能使用此工具来计数PAPI预设事件的缓存未命中吗?是否有任何有用的配置,或者在更换笔记本电脑之前我应该忘记它吗?