Multithreading PAPI_继承_所有和RAPL事件可以一起工作吗?
我使用PAPI在skylake处理器上收集性能和能量信息。目标应用程序是多线程的,我希望在所有正在运行的线程之间聚合统计信息。如果我只跟踪非RAPL事件,这很好,但是如果我尝试跟踪RAPL和CPU计数器,CPU计数器不会聚合(即,它们只对应于一个线程) 一切似乎都正常。我检查了PAPI呼叫的所有错误代码,一切都Multithreading PAPI_继承_所有和RAPL事件可以一起工作吗?,multithreading,performancecounter,energy,papi,Multithreading,Performancecounter,Energy,Papi,我使用PAPI在skylake处理器上收集性能和能量信息。目标应用程序是多线程的,我希望在所有正在运行的线程之间聚合统计信息。如果我只跟踪非RAPL事件,这很好,但是如果我尝试跟踪RAPL和CPU计数器,CPU计数器不会聚合(即,它们只对应于一个线程) 一切似乎都正常。我检查了PAPI呼叫的所有错误代码,一切都PAPI\u OK 我对组件0(CPU)的事件集应用PAPI\u INHERIT\u ALL。对RAPL组件执行相同操作失败,因此我不这样做 下面的输出是针对我的测试程序的两次运行。唯一的
PAPI\u OK
我对组件0(CPU)的事件集应用PAPI\u INHERIT\u ALL
。对RAPL组件执行相同操作失败,因此我不这样做
下面的输出是针对我的测试程序的两次运行。唯一的区别是第二次运行包括rapl:::PACKAGE\u ENERGY:PACKAGE0
。如果没有rapl事件,循环和指令计数会随着线程计数而缩放。如果没有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
没有一件惊心动魄的事
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
以惊人的速度
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