如何对从 C# 应用程序中退出的指令进行采样
Posted
技术标签:
【中文标题】如何对从 C# 应用程序中退出的指令进行采样【英文标题】:how to sample instructions retired from C# application 【发布时间】:2010-10-15 12:41:13 【问题描述】:我希望从 C# 应用程序的英特尔芯片中采样硬件事件“已停用的指令”或“已停用的独占指令”。
具体来说,我需要在函数调用的开始和结束时对这个数字进行采样,因此根据这篇文章在 Visual Studio 2010 中使用 cpu 计数器运行分析运行:
http://msdn.microsoft.com/en-us/library/bb385772.aspx
没有帮助。使用 CPU 计数器并运行采样配置文件,您可以获得整个应用程序停用的指令总数。我不能重新组装这个应用程序来只调用这个函数,所以我需要更具体地说明这个指令退役样本的“开始”和“结束”。
有人知道一些汇编指令会读取指令退役硬件事件吗?据推测,如果这可用,我可以以某种方式直接从我的 C# 方法的开头和结尾调用此汇编指令。
【问题讨论】:
How can i access the Intel CPU Counter的可能重复 【参考方案1】:PAPI 是一个非常有前途的领导者,但是,我相信他们在几年前就停止了对 Windows(以及因此 .NET C#)的支持。
在 Windows 前端,Visual Studio 2010 Premium 带有性能资源管理器。如果您在检测模式下运行任何项目或二进制文件,则可以访问硬件事件,例如指令退役。
根据外部因素,结果可能有些混杂和不一致,但它与 Visual Studio 很好地集成,您可以获得每个方法/模块级别的详细计数(平均、最大值、总计)。
英特尔 V-tune 性能分析器也原生公开了这些。我还没有玩过这个工具,但它可能是比 Visual Studio 2010 公开的更灵活的 API。
【讨论】:
以上是关于如何对从 C# 应用程序中退出的指令进行采样的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 VS2010 分析器对 C# 中的主线程以外的线程进行采样