2012-08-13 224 views
9

在計算機體系結構中,猜測與預測的區別

(分支)預測和猜測有什麼區別?

這些看起來很相似,但我認爲它們之間有一個微妙的區別。

回答

11

分支預測由處理器完成,試圖確定在條件跳轉之後執行的位置將繼續,以便它可以從內存中讀取下一條指令。

推測執行更進一步,並確定執行下一條指令的結果。如果分支預測正確,則使用結果,否則將被丟棄。

請注意,即使代碼中沒有實際的條件分支,也可以應用推測執行。處理器可以從幾個通常會連續執行的指令中確定結果,但是可以通過例如算術溢出中斷來停止執行。

0

嗯,我是編程和計算機科學的小老頭,但這是我的結論。這兩種'技術'的目的是保持管道充滿,防止浪費資源。當處理器激發條件測試指令時,通常您會希望它在進入下一條指令之前等待條件已經過測試。

在推測性執行中,無論如何希望條件測試是TRUE而不是拖延管道並傷害資源,您都要執行指令。否則,你只是放棄結果。

在分支預測中,您會更進一步,根據過去的條件測試結果(您預測程序將分支到的方向)來預測條件是否爲TRUE。

希望能夠解決問題。從這裏得到了這個學期的信息和一門課程。 http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html

0

如果你想推測性地做某件事情,你可以通過準確預測推測哪條路徑來增加它有用的機會。

在某些情況下,預測是微不足道的(例如預測加載/存儲不會出現段錯誤)。在其他情況下,這很難(分支預測)。

在任何一種情況下,如果發生異常,您需要能夠恢復/丟棄推測性計算。


是可能的推測沒有預測,到推測的方式從分支的兩個方向執行指令,並只保留結果從後來發現已經在正確的道路線。

當前的硬件沒有使用這個分支,但同樣的事情發生在像x86指令的並行解碼這樣的小得多的本地規模上。解碼器在每個可能的指令邊界開始解碼,並且只有在先前指令的解碼確定長度時才確定哪個開始位置是正確的。