推測執行

推測執行(亦作預測執行投機性執行,英語:Speculative execution)是最佳化技術的一類,採用這個技術的電腦系統會根據現有資訊,利用空轉時間提前執行一些將來可能用得上,也可能用不上的指令。如果指令執行完成後發現用不上,系統會拋棄計算結果,並回退執行期間造成的副作用(如快取)。

推測執行的目標是在處理器系統資源過剩的情況下並列處理其他任務,實際上電腦處理器在工作中,閒置效能的這種情況還不少。因此為了充分運用效率,推測執行無處不在。流水處理器的分支預測、數值預測、[1] 預讀取主記憶體和檔案、以及資料庫系統樂觀並行控制等機能中都採用到了推測執行。[2][3]最終可以達到提高整體效能的目的。

舉例

假設某程式的結構如下:

  • 從網絡上下載一個數據A,耗時30秒。
  • 如果下載A成功,則直接給出A的答案。
  • 如果下載A失敗,則計算30秒的算數B,並給出這個答案。

如果沒有推測執行功能,那麼當A下載後發現失敗,那麼就要再花30秒做算術B,總共耗時1分鐘。但是,由於下載過程中CPU是空轉,CPU可以認識到反正閒着也是閒着,不如在下載A的同時將B算出。這樣如果將來需要到B,就節省了30秒的時間。就算不需要,丟棄B即可,僅增加些許功耗之外,也沒有什麼壞處。

參見

參考文獻

  1. ^ "A Survey of Value Prediction Techniques for Leveraging Value Locality頁面存檔備份,存於互聯網檔案館)", S. Mittal, Concurrency and Computation, 2017
  2. ^ Lazy and Speculative Execution頁面存檔備份,存於互聯網檔案館Butler Lampson Microsoft Research OPODIS, Bordeaux, France 12 December 2006
  3. ^ International Business Machines Corporation. Research Division; Prabhakar Raghavan; Hadas Schachnai; Mira Yaniv. Dynamic schemes for speculative execution of code. IBM. 1998 [18 January 2011]. (原始內容存檔於2020-11-27).