从OS /应用程序分析CPU高速缓存/内存?

mez*_*hic 8 linux windows cpu caching

我希望编写的软件本质上可以分析CPU缓存(L2,L3,可能是L1)和内存,以分析性能.

我认为这是不可行的,因为软件无法访问缓存内容吗?

另一种措辞我的问:有什么方法可以从操作系统/应用程序级别知道哪些数据已加载到缓存/内存中?

编辑:操作系统Windows或Linux和CPU Intel Desktop/Xeon

Arj*_*kar 8

您可能想看看英特尔的PMU即性能监控单元.有些处理器有一个.它是一组专用寄存器(英特尔称之为模型特定寄存器或MSR),您可以使用RDMSRWRMSR指令对其进行编程以计算事件,如缓存未命中.

这是关于i7和Xeon 5500的性能分析的文档.

您可能需要查看英特尔的性能计数器监视器,它基本上是一些抽象PMU的例程,您可以在C++应用程序中使用它来实时测量多个性能指标,包括缓存未命中.它还有一些用于独立使用的GUI/Commandline工具.

显然,Linux内核具有操作MSR的功能.

还有其他实用程序/ API也使用PMU:perf,PAPI.


Pav*_*ath 5

缓存性能通常用命中率和未命中率来衡量。

有很多工具可以帮助您完成此操作。检查Valgrind 如何进行缓存分析

此外,缓存性能通常是按每个程序来测量的。编写得好的程序将导致更少的缓存未命中和更好的缓存性能,反之亦然。

测量实际缓存速度是硬件制造商头疼的问题,您可以参考他们的手册来了解这个值。

Callgrind / Cachegrind组合可以帮助您跟踪缓存命中/未命中

  • “写得好的程序”......这就是为什么我想知道是否可以监视哪些变量正在加载到缓存中? (2认同)