我正在使用 PAPI 收集 skylake 处理器的性能和能量信息。目标应用程序是多线程的,我想汇总所有正在运行的线程的统计信息。如果我只跟踪非 RAPL 事件,这很好用,但如果我尝试跟踪 RAPL 和 CPU 计数器,CPU 计数器不会聚合(即它们只对应一个线程。
一切似乎都在正常工作。我检查了 PAPI 调用的所有错误代码,一切都是PAPI_OK
.
我适用PAPI_INHERIT_ALL
于组件 0 (CPU) 的事件集。对 RAPL 组件执行相同操作会失败,所以我不这样做。
下面的输出是我的测试程序的两次运行。唯一的区别是第二次运行包括rapl:::PACKAGE_ENERGY:PACKAGE0
. 如果没有 RAPL 事件,周期和指令计数会随着线程计数而变化。有了它,他们就不会(但能量计数器显示包裹能量一直在缩放)。
我在 papi-5.7.0 下运行。
uname -a
:
Linux 80b3989af663 4.4.0-134-generic #160-Ubuntu SMP Wed Aug 15 14:58:00 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
没有 RAPL 事件
WallTime | threads | PAPI_TOT_CYC | PAPI_TOT_INS
-------------------------------------------------
2.0 | 1.0 | 2.997G | 12.945G
2.0 | 2.0 | 5.995G | 25.888G
2.0 | 3.0 | 8.992G | 38.835G
2.0 | 4.0 | 11.989G | 51.778G
与 RAPL 一起举办活动
WallTime | threads | PAPI_TOT_CYC | PAPI_TOT_INS | rapl:::PACKAGE_ENERGY:PACKAGE0
-----------------------------------------------------------------------------------
1.999 | 1.0 | 2.997G | 12.944G | 10.643G
2.0 | 2.0 | 2.997G | 12.945G | 12.896G
2.0 | 3.0 | 2.997G | 12.92G | 16.109G
2.0 | 4.0 | 2.997G | 12.946G | 19.471G