缓存未命中的价格是多少

时间:2012-08-30 09:33:58

标签: c++ c memory-profiling cachegrind

我正在分析一些代码并使用cachegrind来获取执行中的cachemisses(L2和L3)的数量。

我的问题是如何根据缓存未命中确定等待缓存获取预留的时间?

我希望能够说出“我的代码获得90%的cpu利用率”

是否可以根据缓存研磨输出执行此操作?

3 个答案:

答案 0 :(得分:2)

Cachegrind简单地模拟CPU上的执行,模拟缓存和分支预测器的行为方式。为了能够知道在缓存上花费多长时间,需要更多信息。具体而言,您需要知道何时可以推测执行以及可以并行分派多少指令(以及如何同时协调内存访问)。 Cachegrind无法做到这一点,任何可能在很大程度上依赖于处理器的工具(而缓存未命中的处理器依赖性要小得多)。

如果您可以使用现代的英特尔CPU,我建议您免费获得一份VTune(用于非商业用途)并查看其内容。它可以告诉处理器收集有关缓存未命中的数据并将其报告给您,这样您就可以看到实际发生的事情,而不仅仅是模拟。它将为每行代码提供每个指令的时钟,使用它可以看到哪些行在缓存上阻塞(以及多长时间),它还可以为您提供cachegrind可以提供的所有其他信息。

你可以在这里得到它:

http://software.intel.com/en-us/articles/non-commercial-software-download/

答案 1 :(得分:1)

唯一可以确定的方法是使用CPU的性能监视计数器来测量特定的CPU - 即使这样,结果也非常具体,基于此的任何优化都可能对具有不同高速缓存大小的CPU执行得非常糟糕,总线架构或内存配置。

答案 2 :(得分:1)

可以在几个时钟周期内从缓存中获取变量。

如果它不在缓存中,则可能需要一百多个时钟周期才能从RAM中获取它。