我正在linux上執行我的C++代碼。在我的代碼中,有一些結構很大的2D數組。該數組是隨機訪問的。當訪問2D數組時,我必須找出有多少緩存未命中。除valgrind之外是否還有其他解決方案(因爲它需要太多時間來計算結果),這可以幫助我找到此陣列的緩存未命中和緩存未命中率。二維陣列緩存misss /緩存缺失率
0
A
回答
0
通常,您的程序不會訪問二維數組,因此內存訪問包含其他變量。它可能有一些效果,或多或少。
如果數組訪問密集(或封裝),也許你可以使用一個簡單的模擬器來評估未命中率。
否則,您可能需要一些工具。我建議Pin,一個動態的二進制工具工具,其原理與valgrind類似,但我認爲開銷是可以接受的,但是你必須編寫分析代碼。
或者更好的選擇是來自intel的Vtune性能分析工具,請嘗試緩存分析。不過,你需要一些時間來學習它。
0
模擬緩存風險由於細微差異(替換策略,協議等)而不能再現完全相同的行爲。
一個更好的選擇是分析代碼 - 對於linux最簡單的分析工具可能是perf。這裏有一個相當不錯的教程 - https://perf.wiki.kernel.org/index.php/Tutorial
參見 - Are there any way to profile cache miss in linux kernel?,它包括的具體實例統計列表,檢查緩存性能
相關問題
- 1. 陣列的緩存缺失率
- 2. Php陣列緩存
- 3. 使用紋理緩存/ Image2D的二維數組的缺點?
- 4. 緩存堆陣列性能
- 5. Adobe Flex緩存陣列
- 6. 在二級緩存中緩存NHibernate DetachedCriteria
- 7. 緩存缺失率度量之間的差異
- 8. 多級緩存和最大漏失率
- 9. Couchbase作爲緩存和緩存失效
- 10. NHibernate二級緩存
- 11. NSMutableArray緩存失敗
- 12. 查詢緩存效率
- 13. 提高緩存命中率
- 14. 優化不同陣列的ARM緩存使用率
- 15. 緩存列表
- 16. 測量緩存內存使用率
- 17. 緩存使用率爲0%時的Azure緩存帳單
- 18. 存在新對象的緩存策略導致緩存失效
- 19. 缺少緩存標頭的IE 8默認緩存行爲
- 20. Rails的:如何緩存陣列中的
- 21. 緩存無視先行陣列
- 22. 陣列中的緩存功能
- 23. 緩存友好陣列迭代圖案
- 24. 休眠:batch_size?二級緩存?
- 25. Hibernate.initialize()和二級緩存
- 26. 二級緩存配置
- 27. Glassfish with infinispan二級緩存
- 28. 休眠二級緩存
- 29. 學說:二級緩存
- 30. 休眠二級緩存
如果訪問陣列封裝,也許寫一個簡單的緩存模擬器給出緩存屬性並將其掛接到數組訪問? – JarkkoL
如果它是真正的隨機訪問,那麼命中率就是cache_size/array_size。 –