2015-11-19 25 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%的命中率下,那麼可能值得嘗試優化緩存訪問。

相關問題