我有一个高度线程化的程序,但我相信它不能在多个内核之间很好地扩展,因为它已经饱和了所有的内存带宽。
有没有任何工具可以测量多less内存带宽被使用?
编辑 :请注意,典型的分析器显示内存泄漏和内存分配的东西,我不感兴趣,我只是内存带宽是否饱和。
如果您有最新的英特尔处理器,则可以尝试使用英特尔(R)性能计数器监视器: http : //software.intel.com/zh-cn/articles/intel-performance-counter-monitor/它可以直接测量消耗内存控制器的内存带宽。
这将是很难找到一个工具,测量您的应用程序的内存带宽利用率。
但是由于你面对的问题是一个怀疑的内存带宽问题,你可以试着去衡量一下,如果你的应用程序每秒产生大量的页面错误,这肯定意味着你不在理论内存带宽附近。
您还应该测量缓存如何友好您的算法。 如果他们颠簸缓存,你的内存带宽利用将受到严重阻碍。 谷歌“测量缓存未命中”的好资源,告诉你如何做到这一点。
我建议Visual Studio示例分析器可以收集特定硬件计数器上的示例事件。 例如,您可以选择在缓存未命中时进行采样。 这里有一篇文章解释如何选择CPU计数器 ,尽管还有其他的计数器也可以使用。