如何访问英特尔CPU计数器

8

有没有一款小工具可以让我访问由英特尔CPU计数器收集的数据(例如L1 / L2缓存未命中,分支预测失败……您知道现代Core2 CPU上有数百个这样的计数器)。

它必须在Windows上运行(当然,能够在Solaris、FreeBSD、Linux、MacOSX上使用它会很好)。


好的,与此同时我找到了PAPI库。但这更多地是适用于Linux(仅支持Sparc上的Solaris),并且需要一些Linux内核补丁 - 是的,我知道Linus说性能监测是两个真正的弱点之一。我还发现perfmon2和rabbit(一个已经停止的项目),它们也只适用于Linux。到目前为止,对于Windows没有任何结果。 - Lothar
7个回答

5

4

这个帖子看起来有点旧了,但如果你仍然感兴趣,我最近写了一篇如何使用rdmsr和wrmsr在Linux中的文章,只使用了rdmsr和wrmsr,仅涉及Intel Westmere未核心的性能计数器,但我描述的过程可能会帮助你找出你需要的内容。我相信Windows也有一些等效的程序或函数调用RDMSR和WRMSR。问题是你需要处于ring 0(内核模式)才能读取MSR。我不知道如何在Windows上做到这一点。我不能回答任何Windows相关的问题,但如果你有任何与MSR相关的问题,我可能能够回答一些。尽管如此,我并不是专家。


1

PAPI是一个非常有前途的线索,但我相信他们在几年前就停止了对Windows(因此.NET C#)的支持。

在Windows方面,Visual Studio 2010 Premium带有性能资源管理器。如果您以仪器模式运行任何项目或二进制文件,则可以访问诸如指令退役等硬件事件。

结果可能会因外部因素而有所不同和不一致,但它与Visual Studio很好地集成,并且您可以获得每个方法/模块级别的详细计数(平均值、最大值、总计)。

Intel V-tune性能分析器也本地公开了这些内容。我还没有使用过这个工具,但它可能比Visual Studio 2010公开的API更灵活。


2
谢谢,但我从事开发和销售集成开发环境的业务。所以这显然对我没有帮助。 - Lothar

0

尝试这个http://icl.cs.utk.edu/papi/。它是一个完整的库,可以让你读取任何CPU计数器数据,适用于Windows和Linux[以及其他操作系统]。


0
在OS X上,Shark允许您从PMCs获取数据。我不确定Windows上除了英特尔的工具(如drhirsch所提到的VTune)之外还有什么可用的。

0

这个帖子看起来很老了。但是,所有上述提到的计数器都可以在Intel PCM找到。这些计数器可以用作Microsoft Perfmon插件或命令提示符接口。Intel PCM提供诸如L2和L3缓存命中率、缓存未命中等信息。


0

您没有说明您是在寻找应用程序还是库。

对于Windows,有Intel VTune。但这不是一个小工具。对于Linux,我使用过oprofile,它可以在不进行内核补丁的情况下运行。


1
我正在寻找一个库,因为我想编写一个仪器化分析器,记录INSTRUCTION_RETIRED事件而不是毫秒。是的,可能还有其他一些东西,所以你可以把它看作是一个类似VTune的小工具,我想自己编写。 - Lothar
我认为没有相应的库。可以通过rdmsr和wrmsr指令访问性能监视器寄存器。首先,您可以查看“英特尔64和IA-32架构软件开发人员手册”(谷歌搜索最新版本)第3B卷,第18.11节及以下内容。其中详细描述了如何访问性能计数器。 - Gunther Piez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接