有没有一款小工具可以让我访问由英特尔CPU计数器收集的数据(例如L1 / L2缓存未命中,分支预测失败……您知道现代Core2 CPU上有数百个这样的计数器)。
它必须在Windows上运行(当然,能够在Solaris、FreeBSD、Linux、MacOSX上使用它会很好)。
有没有一款小工具可以让我访问由英特尔CPU计数器收集的数据(例如L1 / L2缓存未命中,分支预测失败……您知道现代Core2 CPU上有数百个这样的计数器)。
它必须在Windows上运行(当然,能够在Solaris、FreeBSD、Linux、MacOSX上使用它会很好)。
这个帖子看起来有点旧了,但如果你仍然感兴趣,我最近写了一篇如何使用rdmsr和wrmsr在Linux中的文章,只使用了rdmsr和wrmsr,仅涉及Intel Westmere未核心的性能计数器,但我描述的过程可能会帮助你找出你需要的内容。我相信Windows也有一些等效的程序或函数调用RDMSR和WRMSR。问题是你需要处于ring 0(内核模式)才能读取MSR。我不知道如何在Windows上做到这一点。我不能回答任何Windows相关的问题,但如果你有任何与MSR相关的问题,我可能能够回答一些。尽管如此,我并不是专家。
PAPI是一个非常有前途的线索,但我相信他们在几年前就停止了对Windows(因此.NET C#)的支持。
在Windows方面,Visual Studio 2010 Premium带有性能资源管理器。如果您以仪器模式运行任何项目或二进制文件,则可以访问诸如指令退役等硬件事件。
结果可能会因外部因素而有所不同和不一致,但它与Visual Studio很好地集成,并且您可以获得每个方法/模块级别的详细计数(平均值、最大值、总计)。
Intel V-tune性能分析器也本地公开了这些内容。我还没有使用过这个工具,但它可能比Visual Studio 2010公开的API更灵活。
这个帖子看起来很老了。但是,所有上述提到的计数器都可以在Intel PCM找到。这些计数器可以用作Microsoft Perfmon插件或命令提示符接口。Intel PCM提供诸如L2和L3缓存命中率、缓存未命中等信息。
您没有说明您是在寻找应用程序还是库。
对于Windows,有Intel VTune。但这不是一个小工具。对于Linux,我使用过oprofile,它可以在不进行内核补丁的情况下运行。