【发布时间】:2023-02-19 11:05:42
【问题描述】:
是否有用于读取 WIndows 上的 CPU 性能监控计数器 (PMC) 的 C/C++ API(用于英特尔和 AMD 处理器)?
到目前为止我发现了什么:
-
https://icl.utk.edu/papi/ 非常好的 API 但似乎不支持 MS Windows
-
https://www.agner.org/optimize/#testp 支持 Windows 但 API 功能有限,需要繁琐的工作流程 PMC 驱动程序“禁用驱动程序签名强制”
令人惊讶的是,即使是 AMD 开发人员资源站点似乎也没有提供用于读取 AMD CPU 性能计数器的 C/C++-API(或者我是否忽略了某些东西?)
编辑:找到了这个相关信息: https://randomascii.wordpress.com/2015/09/24/etw-central/
【问题讨论】:
-
尝试寻找探查器而不是性能。 learn.microsoft.com/en-us/windows-hardware/test/wpt
-
-cup:问题具体是关于 API/库,而不是关于分析工具
-
对硬件计数器进行编程需要内核支持。为了让每个用户空间任务都有计数器(而不是逻辑核心上的任何东西),你还需要内核支持来保存/恢复上下文切换的计数器,就像 Linux 支持 PAPI 一样。我猜想可能有一些带有内核驱动程序的库可以在 Windows 上使用,但似乎没有任何标准库。在 Linux 上,您也可以使用 perf/PAPI 以外的库,例如轻量级内核模块,只允许您在内核上编写计数器并在用户空间中使用
rdpmc。 -
@Peter Cordes:感谢您的评论。实际上,对于我的目的来说,在每个物理核心的基础上设置计数器就足够了(因为我在大多数时间关键循环中将线程固定到核心)。