如何在Windows上测量内存带宽利用率?

r55awzrz  于 2023-03-09  发布在  Windows
关注(0)|答案(5)|浏览(404)

我有一个高度线程化的程序,但我相信它不能很好地跨多个核心扩展,因为它已经饱和了所有的内存带宽。
是否有任何工具可以测量内存带宽的使用量?

Edit:请注意,典型的分析器会显示内存泄漏和内存分配之类的信息,我对此不感兴趣,我只关心内存带宽是否饱和。

woobm2wo

woobm2wo1#

如果您有最新的英特尔处理器,可以尝试使用英特尔(r)性能计数器监视器:http://software.intel.com/en-us/articles/intel-performance-counter-monitor/它可以直接从内存控制器测量消耗的内存带宽。

enxuqcxy

enxuqcxy2#

我推荐使用Visual Studio Sample Profiler,它可以收集特定硬件计数器上的样本事件。例如,您可以选择对缓存未命中. Here's an article explaining how to choose the CPU counter进行采样,但也可以使用其他计数器。

7kqas0il

7kqas0il3#

很难找到一种工具来测量应用程序的内存带宽利用率。
但是,由于您面临的问题是一个可疑的内存带宽问题,您可以尝试并测量您的应用程序是否每秒生成大量的页面错误,这肯定意味着您离理论内存带宽还很远。
你还应该衡量你的算法对缓存的友好程度。如果它们该高速缓存造成了冲击,你的内存带宽利用率将受到严重影响。在好的资源上搜索“测量缓存缺失”,它会告诉你如何做。

gopyfrb3

gopyfrb34#

使用任何一种纯软件解决方案都不可能正确地测量内存总线利用率。(在80年代左右曾经是这样。但后来我们得到了流水线、缓存、无序执行、多核、具有多个总线的非均匀内存架构等)。
你绝对必须有硬件监控内存总线,以确定它有多“忙碌”。
幸运的是,大多数PC平台都有一些,所以你只需要驱动程序和其他软件来与它对话:
wenjianhn评论说,在https://github.com/opcm/pcm上有一个专门针对英特尔硬件的项目(他们称之为处理器计数器监视器
对于Windows上的其他体系结构,我不确定,但是有一个项目(针对Linux)在https://github.com/RRZE-HPC/likwid上提供了对不同体系结构的支持
原则上,计算机工程师可以将合适的示波器连接到几乎任何PC并“直接”进行监控,尽管这可能需要经过适当培训的计算机工程师以及性能相当高的测试仪器(请阅读:两者都非常昂贵)。
如果您自己尝试这样做,那么您可能需要一些工具,或者至少需要一些分析工具,这些工具能够了解您打算监视的总线的协议,以了解其使用情况。
这有时候真的很容易,对于一些总线-例如旧的并行FIFO硬件,它通常有一个单独的电线为'fifo满'和另一个为'fifo空'。
这种芯片通常用于单向链路上较快的总线和较慢的总线之间。“fifo已满”信号,即使它通常偶尔触发,也可以被监控为过长的“长”电平:以USB 2.0高速链路为例,当操作系统没有按时轮询USB fifo硬件时,就会发生这种情况。测量这些“holdups”的频率和持续时间,然后可以测量总线利用率,但仅限于此USB 2.0总线。
对于PC内存总线,我想你也可以尝试只监控你的RAM接口使用了多少功率--这可能会随着使用而缩放。但你可能会“走运”。你需要为总线提供VccIO的电源电流。这实际上应该比那些老式的80年代系统更适合较新的PC硬件(开机时总是满功率运行)。
一个相当普通的示波器就足以满足这两个例子--您只需要一个只能在“长于给定宽度的脉冲”上触发的示波器,并让它一直运行,直到它触发为止,这是长时间进行“浸泡测试”的好方法。
您可以通过查看“空闲”时间的变化来监控这两种方式的利用率。
但是现代的PC内存总线要复杂得多,也快得多。
要直接通过点击总线来实现这一点,您至少需要一个示波器(和有源探头),专门设计用于监控PC上DDR总线的生成,沿着软件分析选项(通常单独出售),以便对协议进行足够的解码,从而找出正在发生的活动类型,从中您可以找出您想要测量的“空闲”活动类型。
您甚至可能需要一个主板的设计,让您作出这些测量也。
这并不像仅仅寻找无活动的时段那样直截了当-所有DRAM至少都需要定期刷新周期,这可能会也可能不会伴随着明显的总线活动而发生(有些DRAM自动刷新,有些需要特定的命令来触发,有些可以继续寻址并传输未处于刷新状态的存储体中的数据,有些则不能,等等)。
因此,仪器需要能够对数据进行足够深入的分析,以便你提取出它有多忙碌。
你最好的,也是最简单的赌注是找到一个PC硬件(CPU)供应商谁拥有的工具,做你想要的,并购买硬件,以便您可以使用这些工具。
这甚至可能涉及到在VM中运行应用程序,因此您可以从托管它的不同操作系统中的更好的工具中获益。
为此,您可能希望尝试Linux KVM(是的,即使是Windows --也有Windows访客驱动程序),并将您的虚拟机固定到特定的CPU,同时您还配置Linux以避免将其他作业放在这些相同的CPU上。

p8ekf7hl

p8ekf7hl5#

https://www.hwinfo.com/支持某些报告这些指标的现代CPU

相关问题