3

我在我们的程序上运行 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 架构和应用程序要求,但它有一般可接受的值吗?

4

1 回答 1

4

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

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

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

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

于 2016-08-01T20:59:46.490 回答