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

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

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

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

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

你可以使用RDPMC指令或__readpmc MSVC编译器内在,这是一回事。

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

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

那个HCP参考怎么样? 它不能提供你想要的东西吗?