我想使用hardware performance counter,特别是x86 CPU来获取缓存未命中或分支错误预测。性能计数器在诸如英特尔VTune之类的高级性能分析器中大量使用。请不要混淆Windows操作系统上的性能计数器。
为了在C/C++程序中使用这些计数器,可以使用PAPI:http://icl.cs.utk.edu/papi/
这使您可以轻松地使用性能计数器,但仅限于Linux。PAPI曾经支持Windows,但现在不支持。
有没有人最近在Windows上尝试过PAPI或其他API来使用硬件性能计数器?
发布于 2012-01-10 16:14:16
您可以使用RDPMC指令或__readpmc MSVC编译器内部,这是相同的事情。
但是,Windows通过将CR4.PCE设置为0来禁止用户模式应用程序执行此指令。据推测,这样做是因为每个计数器的含义由MSR寄存器确定,这些寄存器只能在内核模式下访问。换句话说,除非你是一个内核模式模块(例如设备驱动程序),否则如果你试图执行这条指令,你将会得到“特权指令”陷阱。
如果你正在编写一个用户模式的应用程序,你唯一的选择就是(正如@Christopher在评论中提到的)编写一个内核模块,它将为你执行这条指令(你将招致user->内核调用惩罚),并在你的机器上启用测试签名,这样你可能自签名的“驱动程序”就可以加载了。这意味着你不能很容易地发布这个应用程序,但这将适用于内部调整。
发布于 2013-09-03 16:24:58
这个HCP Reference怎么样?它不能提供你想要的东西吗?
https://stackoverflow.com/questions/8764639
复制相似问题