2011-09-21 26 views
4

是否在C中打開一個switch語句(假設它使用一個跳轉表)來清空x86處理器的管道?我想這可能是因爲它需要查找表的結果來知道接下來要執行的指令。它能否將這個結果提前回溯到管道沒有完全排空?C中的switch語句是否爲空的x86管道?

+1

有條件的跳轉通常會導致流水線抖動。 –

回答

7

跳轉表不一定會清空流水線。在現代處理器上預測間接分支,並且分支預測因子的表現比您預期的要好。顯然,正確預測的間接分支不會導致失速。

根本沒有分支是可取的,但通常是不可能的(或引入如此多的開銷以至於淨損失)。用一系列條件分支替換跳轉表有時是有益的,但前提是替換序列中的分支數量相當小。