我使用perf來測試理論上被證明是緩存友好算法的代碼。爲什麼高速緩存未命中指令比率是緩存性能的一個更好的指標,與高速緩存未引用高速緩存未命中比率相比?
根據this article指令緩存未命中是緩存性能的一個很好的指標。
緩存未命中與指令的比率將指示緩存如何工作;比例越低越好。在這個示例中,比率是1.26%(6,605,955次緩存未命中/ 525,543,766次 次)。由於RAM存儲器與高速緩存訪問之間的成本差異較大(100個週期與<個20個週期) 即使緩存未命中率的小改進也可以顯着提高 的性能。如果每條指令的高速緩存未命中率超過5%,則需要進一步調查。
然而,當我運行PERF的是這樣的:
perf stat -B -e cache-references,cache-misses,instructions ./td 1.txt 2.txt
逆足會發布如下:
Performance counter stats for './td 1.txt 2.txt':
93,497,101 cache-references
56,452,246 cache-misses # 60.379 % of all cache refs
8,115,626,200 instructions
2.509309040 seconds time elapsed
所以它更側重於緩存引用緩存缺失率而不是文章中提出的那個。
緩存缺失到緩存引用的比率看起來很差,60%,這意味着我的應用訪問緩存的時間有60%我得到緩存缺失。另一方面,緩存缺失率與指令比率僅爲0.6%。
我不知道該從哪弄出什麼。我應該優化哪個比例?