什么被认为是一个很好的缓存命中/未命中率?

时间:2015-11-19 21:23:27

标签: optimization cpu-cache oprofile

我在我们的程序上运行ocount以计算L2缓存读取事件,我们得到以下结果:

Event                               Count                    % time    
counted
l2_rqsts:all_demand_data_rd         14,418,959,276           80.01
l2_rqsts:demand_data_rd_hit         6,297,000,387            80.00
l2_rqsts:demand_data_rd_miss        6,104,577,343            80.00
l2_rqsts:l2_pf_hit                  667,709,870              80.01
l2_rqsts:l2_pf_miss                 1,641,991,158            79.99

但是我们不知道这些结果是否应被视为总缓存垃圾邮件。

您认为L2缓存的良好比率命中/未命中率是多少?

我希望它在很大程度上取决于CPU架构和应用程序要求,但是它有一个普遍允许的价值吗?

1 个答案:

答案 0 :(得分:4)

这取决于应用程序。极端情况:

  • 如果每个内存访问都位于相同的位置,或跨越并适合感兴趣的缓存级别(例如典型L2缓存的总大小为256KB)而没有因关联冲突而导致的任何驱逐,则应用程序可以达到100%的命中率率。
  • 如果内存访问发生在比缓存大得多的区域并且是真正随机的,那么最终可能会达到50%的命中率(我不确定分析方法是否达到确切的数字但是我猜它会取决于击中给定线的概率分布。)
  • 您可以故意构建一个病态案例,其中您的应用程序将内存访问交替到两个不同的内存位置,这两个内存位置碰巧碰撞在同一个缓存行上,无论处理器处理关联性的方式如何。在这种情况下,命中率将接近0%。

我怀疑是否有任何关于分析模型的工作来预测您可能会看到哪种类型的值以获得更实际的工作负载,但肯定有一些配置文件在常见基准测试上运行。例如:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.152.3943&rep=rep1&type=pdf。这些人在SPECcpu2000的mcf工作负载上显示每千条指令(MPKI)的20到50个未命中率。这是对工作量的描述:https://www.spec.org/cpu2000/CINT2000/181.mcf/docs/181.mcf.html。它可能会或可能不会像您对优化感兴趣的内存子系统一样。

回到你可能首先提出这个问题的原因:如果其他分析数据显示你对缓存或内存访问的约束比算术,锁定等更多,那么你可能会选择一些启发式值,如果您的命中率达到80%或95%,则可能值得尝试优化缓存访问。