當你調試性能關鍵代碼,看着拆卸,這不是太難以發現由於數據高速緩存未命中的瓶頸:什麼是非數據緩存未命中的跡象(指令,TLB等)?
加載/存儲指令往往是平時的瓶頸,這意味着如果您停止該程序,則可能會停止接近從某個不可預知的內存地址加載的加載/存儲指令。
同樣,找到分支預測失誤的一種方法是觀察並查看是否破壞程序通常會將其停止在特定跳轉附近,然後查看代碼以查看跳轉是否可預測。
(或者,至少,這是怎麼我試圖找到這樣的瓶頸。如果我找錯了症狀讓我知道..)
什麼,然而,症狀其他種類的緩存未命中?
我做知道他們是罕見的,但我仍然想知道如何/當他們出現時發現他們。
「其他」的緩存,我的意思是一樣的東西:
- 指令緩存(S)
- 轉換後備緩衝器
- 的,我應該知道,但我不是其他重要緩存獎勵積分意識到
這些符號是您在探查器輸出中看到的數字。可以讀取處理器實現的性能計數器的任何像樣的分析器支持。請避免列表問題,只是谷歌「英特爾處理器性能計數器」。 –
@HansPassant:好點,但是當我沒有適合當前語言的分析器時,有沒有辦法做到這一點?我之前提到的數據緩存的症狀不需要分析器 - 它們只是需要隨機暫停程序幾次。它們並不總是需要反彙編器 - 通過查看源代碼中的當前行,使用任何語言,都不難看出由於指針加載或難以預測的分支造成的可能瓶頸。我們可以爲其他類型的瓶頸做同樣的事嗎? – Mehrdad
這些計數器與語言無關,它們嚴格遵守機器代碼執行。當然這是普遍的。試圖從「暫停程序幾次」收集配置文件信息完全沒有意義,這只是浪費時間。使用適當的工具。 –