2012-07-11 59 views
17

This question及其答案,最近被標記爲史詩般的答案,促使我想知道;在CPU分支預測失敗方面,我可以用Windows來衡量正在運行的應用程序的性能嗎?我知道存在一些靜態分析工具,這可能有助於優化代碼以在分支預測情況下獲得良好的性能,手動技術可以通過簡單地進行更改和重新測試來提供幫助,但我正在尋找一些可以實現的自動機制報告一段時間內分支預測失敗的總數,當Windows應用程序運行時,我希望某些用於Visual C++的Profiler工具可以幫助我。我可以測量現代英特爾酷睿CPU上的分支預測故障嗎?

爲了解決這個問題,有問題的應用程序要麼使用本地編譯器(如Visual C++ for Windows),要麼使用其他本地編譯器(如GCC,FreePascal,Delphi或TurboAssembler)構建。可執行文件可能根本沒有任何調試信息。我想知道是否可以檢測並計算分支預測失敗,也許可以通過像WMI這樣的Windows服務讀取內部CPU信息,或者也可以完全在運行Windows的虛擬化環境(如使用VirtualBox)內運行,然後完全運行使用我的測試應用程序虛擬化Windows環境,VirtualBox內部,以及對虛擬CPU進行運行時分析。或者我不知道的其他一些技術,這就是這個問題。

是的,我用Google搜索。唯一看起來很有希望的是來自AMD的this PDF。提到的東西非常接近我想要做的,但似乎寫在那些沒有任何操作系統的工作,在原始評估硬件平臺上:

5.1。分行。適用性。帶有許多決策邏輯的代碼中,有條件的分支預測失誤可能是一個重要的問題。

當 選擇真或假路徑的可能性是隨機或接近50-50分割時,可能會錯誤預測條件分支。 分支預測硬件無法「學習」模式,而分支 預測不正確。採集。收集在此表 的事件來測量分支預測性能:

分行計算在該分支是採取 率和使用 這些公式每個分支指令的數量的比率:分支採取率= Taken_branches/ Ret_instructions分公司採取比= Taken_branches /分行每個分支
說明= Ret_instructions /分行

更新:我想我可以說,我在尋找一種方式來閱讀英特爾酷睿i7 PMU模塊,或其他同等功能的CPU。看起來英特爾VTUNE(來自Adrian的評論)與我所要求的非常接近。

+1

我沒有足夠的信心把這個答案,但我認爲從VTune™可視化英特爾將能夠告訴你錯過了分支預測,至少如果你剖析在英特爾處理器上。 – 2012-07-11 17:17:38

+0

這個? (http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/) - 哇。看起來不錯。對於只是一個PMU閱讀器,它看起來也有這個:http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ – 2012-07-11 17:35:52

+0

@Adrian McCarthy:據我所知,這是正確的。 vTune非常令人印象深刻,雖然不便宜。不幸的是,在許多使用情況下,英特爾CPU的限制可能會成爲問題。 – 0xC0000022L 2012-07-11 18:07:35

回答

5

VTune性能分析器可以做到!順便說一句,如果您正在研究這些主題,請參閱Intel Press的「Optimization Cookbook」。

注:評論陳述相同的答案,但有一些不確定性,我用VTune和我測量了英特爾CPU的分支預測率。所以我100%肯定。

here is the link for VTune

here is the link for the book

+0

不幸的是,這本書的鏈接已經過時了,但是感謝您的參考! – andreee 2015-10-02 22:09:06