【发布时间】:2012-08-30 09:33:57
【问题描述】:
我正在分析一些代码并使用 cachegrind 来获取执行中的缓存未命中数(L2 和 L3)。
我的问题是如何根据缓存未命中来确定等待缓存准备就绪所花费的时间?
我希望能够说“我的代码获得 90% 的 cpu 利用率”之类的话
是否可以根据缓存研磨输出来做到这一点?
【问题讨论】:
-
根据documentation of cachegrind,“在现代机器上,L1 未命中通常会花费大约 10 个周期,LL 未命中可能会花费多达 200 个周期,并且错误预测的分支成本在该地区10 到 30 个周期。”
-
您可以从系统规格中挖掘数字——如果你找到它们——或者使用像lmbench 这样的工具来测量它。然后您可以将它们插入
cachegrind(或者它是我们用来可视化数据的kcachegrind的一个功能?)。 -
@MatteoItalia:假设我有 1.000 次 L2 未命中,转换为 200.000 个未使用的周期。 2.0 GHz 芯片意味着 0.001 秒的等待?
-
@AProgrammer:我只是在读取
valgrind --tool=cachegrind的输出 -
@Martin:CPU 行为过于复杂,无法如此简单地量化。如果不可用的数据被证明是不需要的,缓存未命中对性能的影响可能为零。
标签: c++ c memory-profiling cachegrind