2012-01-25 63 views
2

標題幾乎總結了它。我需要像每個線程緩存命中/未命中一樣的東西。我如何獲得這些信息? Cachegrind似乎不工作,基於我的順序程序給出了執行的X個指令的計數和Y對於我的並行程序的事實,除了X = Y這一事實外,一切正常。我認爲Cachegrind不適用於線程?我可以使用任何其他工具?謝謝。如何衡量多線程應用程序中的緩存性能?

回答

2

您可以使用perf從硬件性能計數器獲取所需的信息。

嘗試:

$ perf stat -e cache-misses,cache-references /bin/ls /tmp/ 
... 

Performance counter stats for '/bin/ls /tmp/': 

      3,534 cache-misses    # 16.605 % of all cache refs  
      21,283 cache-references            

     0.001649284 seconds time elapsed 
+0

但是'PERF stat'無法輸出分離每個線程計數器;只有總結... http://perf.wiki.kernel.org/index.php/Tutorial#Counting_with_perf_stat「默認情況下,進程的所有線程和後續子進程和線程的perf stat計數,可以使用-i選項。不可能獲得每個線程或每個進程的計數分解。「 – osgx