2017-06-15 29 views
1

這是一個純粹的概念問題。爲什麼OS沒有切換任何時候從未被佔用的分支?動態分支預測僅適用於過去採用的分支,而靜態分支預測在某些情況下才是正確的。如果分支上沒有數據,則操作系統和處理器似乎應該開始將單獨的任務放入流水線,而不是盲目猜測分支。然後,您可以計算分支的結果,並在原始任務再次計劃時執行該分支。下次遇到分支時,處理器可以使用動態預測。每當發生未知分支時,操作系統爲什麼不安排新的任務?

這個方法沒有被使用的原因嗎?或者它被使用,我只是不知道?

回答

1

與僅執行分支相比,上下文切換的開銷非常高。

+0

我不太熟悉調度程序的工作原理。開銷是否由於必須將處理器配置爲正確的狀態以恢復其他任務而產生? – master565

+1

處理器必須保存進程(或線程)的完整狀態,這意味着定義狀態的所有寄存器。然後它必須爲新任務加載寄存器。這相當於20-30個移動指令。 – user3344003

+0

這很有道理。我想唯一可能的方式是值得的,如果你有一個瘋狂的大型流水線,比上下文切換開銷更大的清理開銷。感謝你的回答! – master565

0

這就是爲什麼SMT - simultanions多線程被髮明的原因,而一個線程與其分支錯開預測,同一個核心上的其他線程可能會前進。

新的Power處理器,甚至對每個核心8個硬件線程,以確保在

  1. 分支預測錯誤臉
  2. 指令高速緩存未命中
  3. 數據緩存缺失
  4. 數據的依賴性最大吞吐量
相關問題