如何访问英特尔 CPU 计数器

     2023-03-06     270

关键词:

【中文标题】如何访问英特尔 CPU 计数器【英文标题】:How can i access the Intel CPU Counter 【发布时间】:2009-08-12 13:30:18 【问题描述】:

是否有任何小工具可以让我访问英特尔 CPU 计数器收集的数据(例如 L1/L2 缓存未命中、分支预测失败……您知道现代 Core2 CPU 上有很多此类数据)。

它必须在 Windows 上工作(同时能够在 Solaris、FreeBSD、Linux、MacOSX 上使用它当然很好)。

【问题讨论】:

好吧,与此同时我找到了 PAPI 库。但这或多或少只是 Linux(仅在 Sparc 上支持 Solaris)并且需要一些 linux 内核补丁——是的,我知道 Linus 说过性能监控是两个真正的弱点之一。我发现 perfmon2 和 rabbit(一个死项目)也只是 Linux。到目前为止,还没有一款适用于 Windows 的产品。 【参考方案1】:

查看英特尔 PCM(性能计数器监视器)工具,该工具完全符合您的要求。

链接:https://software.intel.com/en-us/articles/intel-performance-counter-monitor-a-better-way-to-measure-cpu-utilization

英特尔 PCM 提供了丰富的 API,可让您检测代码。此外,迄今为止,PCM 也是读取非核心事件的唯一工具。

【讨论】:

【参考方案2】:

这个帖子似乎有点老了,但如果你仍然感兴趣,我最近写了一个howto 关于这个主题,在 Linux 中只使用 rdmsr 和 wrmsr。它只处理用于 Westmere 的英特尔非核心的性能计数器,但我描述的过程可能会帮助您弄清楚您需要什么(如果您还没有的话)。我确信 Windows 对 RDMSR 和 WRMSR 有一些等效的程序或函数调用。问题是您需要成为 ring 0(内核模式)才能读取 MSR。我不知道如何在 Windows 中做到这一点。我无法帮助解决任何 Windows 问题,但如果您有任何问题,我可能能够回答一些与 MSR 相关的问题。不过,我绝不是专家。

【讨论】:

【参考方案3】:

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

在 Windows 前端,Visual Studio 2010 Premium 带有性能资源管理器。如果您在检测模式下运行任何项目或二进制文件,则可以访问硬件事件,例如已停用的指令。

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

英特尔 V-tune 性能分析器也原生公开了这些。我还没有玩过这个工具,但它可能是比 Visual Studio 2010 公开的更灵活的 API。

【讨论】:

谢谢,但我自己从事开发和销售 IDE 的业务。所以这显然对我没有帮助。【参考方案4】:

你没有写你正在寻找一个应用程序或一个库。

对于 Windows,有 Intel VTune。但这不完全是一个小工具。对于 linux,我使用了 oprofile,它可以在没有内核补丁的情况下工作。

【讨论】:

我正在寻找一个库,因为我想编写一个记录 INSTRUCTION_RETIRED 事件而不是毫秒的检测分析器。是的,也许还有一些其他的东西,所以你可以把它看作是我想自己写的一个类似于 VTune 的小工具。 我认为没有图书馆。通过 rdmsr 和 wrmsr 指令访问性能监视器寄存器。首先,您可以查看“Intel 64 and IA-32 Architectures Software Developers Manual”(谷歌获取最新版本)第 3B 卷,第 18.11 章ff。准确描述了访问性能计数器所需的内容。【参考方案5】:

在 OS X 上,Shark 可让您从 PMC 获取数据。我不确定 Windows 上除了 Intel 的工具(VTune,如 drhirsch 提到的)之外还有什么可用的。

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

这个帖子看起来很旧。但是,上面提到的所有计数器都可以在Intel PCM 获得。这些计数器可以用作 Microsoft Perfmon 插件或命令提示符界面。英特尔 PCM 提供 L2 和 L3 缓存命中率、缓存未命中率等信息。

【讨论】:

如何对从 C# 应用程序中退出的指令进行采样

...】:2010-10-1512:41:13【问题描述】:我希望从C#应用程序的英特尔芯片中采样硬件事件“已停用的指令”或“已停用的独占指令”。具体来说,我需要在函数调用的开始和结束时对这个数字进行采样,因此根据这篇文章在VisualStudio2... 查看详情

linux有问必答:如何知道进程运行在哪个cpu内核上?

...点上调度最相关的进程可以减少缓慢的远程内存访问。像英特尔SandyBridge处理器,该处理器有一个集成的PCIe控制器,你可以在同 查看详情

linux内核内存管理linux内核堆内存管理③(cpu计数器瓶颈|per-cpu计数器|linux内核percpu_counter结构体源码)(代码片段)

文章目录一、CPU计数器瓶颈二、per-CPU计数器及percpu_counter结构体源码一、CPU计数器瓶颈如果操作系统中有多个CPU,假设只有一个CPU计数器工作,如果某个CPU正在访问计数器,其它CPU需要等待计数器释放,才能访问CPU计数器,这里CPU计数... 查看详情

Intel的RAPL如何估算功耗

...如果您认为我应该在那里提问,请告诉我。我有兴趣测量英特尔CPU中每个CPU内核的能耗。我已阅读英特尔的英特尔64位开发人员手册,据我了解,RAP 查看详情

在 Windows 中访问 Intel CPU I/O 寄存器的简单方法

...节TLP有效负载大小的PCIe板。我的CPU支持(Corei7-3930K)和英特尔主板,DX79SR不提供BIOS中的TLP有效负载大小设置。默认情况下,最大TLP有效负载为128字节,我需要 查看详情

如何在x86程序集中正确索引数组(代码片段)

...提前感谢您的意见。答案使用SI非常好。SI具有在大多数英特尔呼叫约定中成为保留寄存器的优点。此外,从历史上看,SI是少数可用作内存加载操作索引的寄存器之一;在现代的英特尔CPU中,任何寄存器都可以。SI仍然得到lods指... 查看详情

cpu推理|使用英特尔sapphirerapids加速pytorchtransformers(代码片段)

...近的一篇文章中,我们介绍了代号为SapphireRapids的第四代英特尔至强CPU及其新的先进矩阵扩展(AMX)指令集。通过使用AmazonEC2上的SapphireRapids服务器集群并结合相应的英特尔优化库,如英特尔PyTorch扩展(IPEX),我们展示了如何使用CPU... 查看详情

intel Vtune 的整数加减法事件计数在哪里?

...【发布时间】:2016-05-0317:11:58【问题描述】:我正在使用英特尔VTune来分析我的程序。我使用的CPU是IVYBridge。所有硬件指令事件都可以在这里找到:https://software.intel.com/en-us/node/5 查看详情

英特尔自动矢量化行程计数解释?

】英特尔自动矢量化行程计数解释?【英文标题】:IntelAuto-VectorizationTripCountExplanation?【发布时间】:2016-01-2300:53:47【问题描述】:我已经完成了相当多的线程级和进程级并行性,现在我正在尝试使用英特尔C++编译器进入指令级... 查看详情

如何访问代码中的 C# 性能计数器?

】如何访问代码中的C#性能计数器?【英文标题】:HowcanIaccesstheC#performancecounterinthecode?【发布时间】:2010-04-2610:25:26【问题描述】:我想在我的程序中使用性能计数器输出。如何在不使用perfmon.exe的情况下访问代码中的性能计数... 查看详情

如何优化访问计数器 SQL 查询?

】如何优化访问计数器SQL查询?【英文标题】:HowtooptimizevisitcounterSQLquery?【发布时间】:2021-02-0315:34:52【问题描述】:使用SQLServer2016,我创建了表VISIT,其中包含3列ID、settoday、counter。这是我用来计算每日访问次数的asp代码。... 查看详情

服务器cpu选购纠结,e5-2683v3和e5-2696v4该如何选?

...服务器用的cpu适用对象:服务器核心数:十四核心品牌:Intel/英特尔Intel型号:其它Intel/英特尔型号CPU主频:2.6GHz三级缓存容量:35MB接口类型:LGA2011-3包装种类:散片芯片制程:22纳米TDP功率:145W参考技术A要考虑性能的话,按照英特尔的命名... 查看详情

如何探测英特尔® 高级矢量扩展的可用性?

】如何探测英特尔®高级矢量扩展的可用性?【英文标题】:HowtoprobetheavailabilityofIntel®AdvancedVectorExtensions?【发布时间】:2012-03-3011:32:17【问题描述】:如何使用Delphi2007检查一个盒子是否支持AVX。我的问题仅限于查询CPU中的支持... 查看详情

英特尔、amd、英伟达,三大厂商同台竞技混合gpu+cpu

...果说英伟达的GraceCPU超级芯片的架构是CPU+GPU是巧合,那么英特尔和AMD推出的FalconShoresXPU芯片、InstinctMI300芯片同样是CPU+GPU结构时,CPU+GPU一体的架构就很难称之为巧合了。更为“碰巧”的是,以上三种芯片其都是用于数据中心的场... 查看详情

如何解释片上系统 CPU 供应商字符串?

...puvendorstring?【发布时间】:2019-09-1005:28:25【问题描述】:英特尔手册定义了cpuid叶0x17负责cpu供应商字符串。输出取决于ecx中的值。所以根据注释:叶17H输出取决于ECX中的初始值。SOC供应商BrandString是一个UTF-8编码的字符串,用尾... 查看详情

如何访问 Android (TV) 上的推送通知计数器?

】如何访问Android(TV)上的推送通知计数器?【英文标题】:HowtoaccessthePushNotificationcounteronAndroid(TV)?【发布时间】:2021-05-2121:48:12【问题描述】:我想访问当前可用的推送通知的数量如下:,这里是AndroidTV模拟器图像..那么我如何... 查看详情

cpu上下文切换(代码片段)

...行,也就是说,需要系统事先帮它设置好CPU寄存器和程序计数器(ProgramCounter,PC)。CPU寄存器,是CPU内置的容量小、但速度极快的内存。而程序计数器,则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令位置。... 查看详情

英特尔cpu是至强系列好还是酷睿系列好?

参考技术A英特尔CPU是至强系列好还是酷睿系列好?看具体型号,至强型号比酷睿I5和I7加起来还多。有跟I5和I7性能接近的型号。有核心数远超I7的型号。游戏还是I7更胜一些,至强针对服务器,普遍多核心,低主频。普遍游戏优... 查看详情