2015-11-19 66 views
1

我上运行我们的程序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架构和应用程序的要求,但是它有一个通用的允许值吗?

+0

就其本身而言,缓存命中/未命中并不能真正告诉您除潜在优化之外的任何其他内容。 – Jason

+0

那么,你怎么知道缓存未命中是你的应用程序的瓶颈? – rvlander

+0

缓存命中/未命中不会告诉您缓存未命中的类型。有不止一个(强制性,能力,冲突等)。 – Jason

回答

2

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

  • 如果每一个内存访问到同一位置,或跨距和感兴趣的高速缓存级别中符合(比如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次错失率。 Heres描述了这个工作量:https://www.spec.org/cpu2000/CINT2000/181.mcf/docs/181.mcf.html。它可能会也可能不会寻求内存子系统,比如你对优化感兴趣的内容。回到您可能首先提出问题的原因:如果其他分析数据显示您对缓存或内存访问的限制比算术,锁定等更多,那么您可以选择一些启发式价值在哪里,如果你在80%或95%的命中率下,那么可能值得尝试优化缓存访问。

相关问题