了解C程序的缓存行为

Man*_*ena 3 c caching

当我运行我的C程序时,有没有办法知道缓存命中率或缓存内存的某些行为?

我试图比较缓存如何与函数的2个不同实现一起工作.

rom*_*ric 5

是的,有一些工具可以让你这样做,但正如人们所期望的那样,它们是特定于平台/架构的.他们也可能有编译器限制:

  1. Cachegrind:缓存和分支预测分析器.这可能是您最接近的目标.你可以使用它valgrind(假设一个Linux内核)

    valgrind --tool=cachegrind your_program

它还有一些用于微调的选项.看看文档.典型的转储/输出Cachegrind看起来像(从网站上剥离)

==31751== I   refs:      27,742,716
==31751== I1  misses:           276
==31751== LLi misses:           275
==31751== I1  miss rate:        0.0%
==31751== LLi miss rate:        0.0%
==31751== 
==31751== D   refs:      15,430,290  (10,955,517 rd + 4,474,773 wr)
==31751== D1  misses:        41,185  (    21,905 rd +    19,280 wr)
==31751== LLd misses:        23,085  (     3,987 rd +    19,098 wr)
==31751== D1  miss rate:        0.2% (       0.1%   +       0.4%)
==31751== LLd miss rate:        0.1% (       0.0%   +       0.4%)
==31751== 
==31751== LL misses:         23,360  (     4,262 rd +    19,098 wr)
==31751== LL miss rate:         0.0% (       0.0%   +       0.4%)
Run Code Online (Sandbox Code Playgroud)

对于Windows,还有WinCachegrind

  1. gem5:用于计算机系统架构研究的模块化平台.适用于ARM,X86,Alpha,SPARC.它还支持一些特定的GPU模型.不确定它是否支持非POSIX平台.
  2. CACTI:统一缓存访问时间,周期时间,面积,泄漏和动态功耗模型,用于统一和非统一缓存架构.
  3. MARSSx86:用于基于x86的系统的微架构和系统模拟器.