2015-09-20 36 views
3

當我運行我的C程序時,有什麼方法可以知道緩存命中率或緩存的某些行爲嗎?知道C程序的緩存行爲

我想比較緩存如何與2個不同的函數實現進行比較。

+0

如果您的程序代碼正確無誤,請在代碼審查時詢問。正如所給出的那樣,問題在於OT的OT。 – Olaf

+3

請注意,支持它的工具是平臺和/或編譯器特定的。 Windows的答案與Linux不同,它與AIX,Mac OS X,HP-UX,Solaris等的答案不同。... –

+0

爲什麼你在意?更重要的是你的程序的整體性能,或者它內部的一個非常大的函數。緩存是平臺的一部分(實際上是處理器的一部分) –

回答

5

是的,有一些工具可以讓你這樣做,但正如人們所期望的那樣,它們是平臺/體系結構特定的。他們也可能有編譯器限制:

  1. Cachegrind:緩存和分支預測分析器。這可能是最接近你正在尋找的東西。您可以通過valgrind使用它(假設的Linux內核

    valgrind --tool=cachegrind your_program

它有微調更多的選項。看看文檔。在Cachegrind典型轉儲/輸出如下所示(剝離從網站)

==31751== I refs:  27,742,716 
==31751== I1 misses:   276 
==31751== LLi misses:   275 
==31751== I1 miss rate:  0.0% 
==31751== LLi miss rate:  0.0% 
==31751== 
==31751== D refs:  15,430,290 (10,955,517 rd + 4,474,773 wr) 
==31751== D1 misses:  41,185 ( 21,905 rd + 19,280 wr) 
==31751== LLd misses:  23,085 ( 3,987 rd + 19,098 wr) 
==31751== D1 miss rate:  0.2% (  0.1% +  0.4%) 
==31751== LLd miss rate:  0.1% (  0.0% +  0.4%) 
==31751== 
==31751== LL misses:   23,360 ( 4,262 rd + 19,098 wr) 
==31751== LL miss rate:   0.0% (  0.0% +  0.4%) 

對於視窗這裏也是WinCachegrind

  • gem5:模塊化平臺進行計算機系統架構研究。適用於ARM,X86,Alpha,SPARC。它還支持一些特定的GPU模型。不知道它是否支持非POSIX平臺。
  • CACTI:用於統一和非統一緩存體系結構的集成緩存訪問時間,週期時間,面積,泄漏和動態功耗模型。
  • MARSSx86:基於x86系統的微架構和系統模擬器。
  • +0

    非常感謝@romeric! –