适用于Windows的硬件性能计数器API

时间:2012-01-06 21:17:10

标签: c performance profiling x86 x86-64

我想使用hardware performance counter,特别是x86 CPU来获取缓存未命中或分支错误预测。性能计数器在英特尔VTune等高级分析器中大量使用。请不要在Windows操作系统上混淆性能计数器。

为了在C / C ++程序中使用这些计数器,可以使用PAPI:http://icl.cs.utk.edu/papi/

这使您可以轻松使用性能计数器,但仅限Linux。 PAPI曾经支持Windows,但现在不支持。

最近是否有人尝试使用PAPI或其他API在Windows上使用硬件性能计数器?

2 个答案:

答案 0 :(得分:5)

您可以使用RDPMC指令或__readpmc MSVC编译器内在,这是相同的。

但是,Windows禁止用户模式应用程序通过将CR4.PCE设置为0来执行此指令。可能这样做是因为每个计数器的含义由MSR寄存器确定,这些寄存器只能在内核模式下访问。换句话说,除非您是内核模式模块(例如设备驱动程序),否则您将获得特权指令"如果您尝试执行此指令,则陷阱。

如果你正在编写一个用户模式的应用程序,你唯一的选择就是(正如@Christopher在评论中提到的那样)编写一个内核模块,它将为你执行这个指令(你会招致用户 - > ;内核调用惩罚)并在您的机器上启用测试签名,因此您可能是自签名的"驱动程序"可以加载。这意味着您无法轻松分发此应用,但这可以用于内部调整。

答案 1 :(得分:1)

HCP Reference怎么样?它没有提供你想要的东西吗?