循序執行與亂序執行的差異:發出順序、危障、電路規模、IPC 比較

循序執行的 CPU 依程式順序發出並執行指令。前面的指令因快取未命中等原因等待時,後面的指令也會停下來。亂序執行的 CPU 會檢查相依關係,從準備好的指令先執行,結果則以重排序緩衝區(ROB)依程式順序確定。由於能在等待期間推進其他指令,IPC 較高,但需要暫存器重新命名與選擇指令的電路,電路規模與功耗會變大。

項目循序執行亂序執行
指令發出與執行的順序程式順序從準備好的指令開始,調換順序執行
結果的確定(引退)程式順序以重排序緩衝區(ROB)依程式順序確定
前面的指令在等待時後面的指令也會停下(停滯)先推進沒有相依關係的後續指令
資料危障的處理轉送與停滯。指令的排列依賴編譯器除了轉送外,由硬體動態排程指令
假性相依(WAR、WAW)因為遵守順序,基本上不太會造成問題以暫存器重新命名重新分配實體暫存器來消除
主要的額外電路少。簡單的管線重新命名表、實體暫存器、發出佇列、ROB、載入/儲存佇列
快取未命中的影響大。每次未命中管線都容易停下在數百道指令的視窗中推進其他指令,可隱藏部分等待時間
IPC較低。在相同發出寬度下低於亂序執行高。搭配寬的發出寬度可遠大於 1
電路規模與功耗小。容易提高每單位面積或功耗的效能大。選擇指令的電路與 ROB 的面積和功耗增加
使用場合微控制器、嵌入式小型核心、部分以省電為優先的核心、GPU 的運算核心PC、伺服器、智慧型手機的高效能核心

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

循序執行
想壓低面積與功耗,或想讓執行時間容易預測時。用於微控制器、嵌入式核心,以及排列大量小型核心的設計等。
亂序執行
想盡可能快速執行單一執行緒時。用於 PC、伺服器、智慧型手機的高效能核心。
搭配使用
有些晶片在同一顆晶片上配置亂序執行的高效能核心,以及循序執行或縮小規模之亂序執行的省電核心。將繁重的處理分配給高效能核心,輕量的處理分配給省電核心,兼顧效能與功耗。

常見問題

亂序執行會不會改變程式的結果?

在單一執行緒內不會。即使調換執行順序,也會遵守真正的資料相依(RAW),結果則以重排序緩衝區依程式順序確定。發生分支預測錯誤或例外時,會捨棄其後指令的結果並回復到正確狀態,因此從外部看起來就像依程式順序執行一樣。

循序執行也能在 1 個週期內執行多道指令嗎?

可以。有在遵守順序的前提下,同時發出相鄰且無相依關係之指令的循序超純量處理器。但前面的指令停下時後面也無法前進,因此 IPC 無法像亂序執行那樣提高。

暫存器重新命名與 ROB 各自負責什麼?

暫存器重新命名藉由重新分配實體暫存器,消除重複使用相同暫存器名稱所產生的假性相依(WAR 與 WAW),增加可平行執行的指令。ROB 保存調換順序執行之指令的結果,依程式順序確定,以實現精確例外。

如何提高循序執行 CPU 的效能?

由編譯器調整指令的排列,例如將使用載入結果的指令放得離載入指令遠一些,排成不易發生等待的順序。除了以轉送減少停滯外,減少快取未命中的資料排列方式與預取也有效果。

理解度檢測

檢查指令的相依關係,從可以執行的指令開始,以不同於程式順序的次序執行以提升效能的方式是下列何者?

  1. A循序執行(in-order execution)
  2. B亂序執行(out-of-order execution)
  3. C單週期執行
查看答案與解析

正確答案:B. 亂序執行(out-of-order execution)

在亂序執行中,正在等待前一道指令的結果或來自記憶體資料的指令會被往後挪,先執行已準備就緒的後續指令。尤其能在快取未命中的等待時間內處理其他工作,是很大的優點。它需要在數百道指令的視窗中尋找可執行指令的電路、暫存器重新命名,以及按順序確定結果的重排緩衝區(reorder buffer)等,電路與功耗都會增大。

在亂序執行的 CPU 中,用來將調換順序執行之指令的結果,依程式原本的順序確定(引退,retire)的機制是下列何者?

  1. A重排緩衝區(reorder buffer)
  2. B窺探過濾器(snoop filter)
  3. CTLB
查看答案與解析

正確答案:A. 重排緩衝區(reorder buffer)

重排緩衝區是暫時保存調換順序執行之指令的結果,並依程式順序確定(引退)的機制,在近來的高效能核心中,其大小可達數百道指令。當發生分支預測失誤或例外時,可捨棄其後指令的結果並恢復到正確的狀態,因此從外部看來,就像是依照程式原本順序執行一樣(精確例外,precise exception)。

亂序執行 CPU 所使用之暫存器重新命名(register renaming)的主要目的為何?

  1. A減少暫存器的數量以縮小電路
  2. B在不改變程式所使用暫存器名稱的情況下,重新分配實體暫存器,以消除表面上的相依(WAR 與 WAW)
  3. C將暫存器的值加密
查看答案與解析

正確答案:B. 在不改變程式所使用暫存器名稱的情況下,重新分配實體暫存器,以消除表面上的相依(WAR 與 WAW)

指令集的暫存器數量有限,約 16〜32 個,因此同一個暫存器名稱會被重複使用,進而產生與真正資料流向無關的相依(反相依 WAR、輸出相依 WAW)。暫存器重新命名動態分配數百個實體暫存器,每次寫入都使用新的實體暫存器以消除這些相依,增加可平行執行的指令。真正的相依(RAW)則無法消除。

  1. 在一個時脈週期內同時發出並執行多道指令的處理器方式稱為什麼?
  2. 在管線中,當下一道指令立即使用前一道指令的結果(資料危障)時,不等待寫入暫存器,而將運算結果直接交給下一道指令的手法是下列何者?
  3. 表示每個時脈可執行之指令數的指標是下列何者?

前往CPU與架構的練習題

相關名詞的解說

亂序執行
檢查指令的相依關係,從可執行的指令開始,以與程式順序不同的順序執行來提升性能的方式。結果以重排序緩衝區依原本的順序確定。
超純量
在 1 個時脈週期內同時發出、執行多個指令的處理器方式。並排多個運算單元,平行處理彼此不相依的指令。
IPC
為 Instructions Per Cycle 的縮寫,指每個時脈可執行的指令數。表示 CPU 設計上的效率,性能大致為 IPC 與時脈頻率的乘積。其倒數是 CPI。
管線化處理
將指令的處理分成擷取、解碼、執行等階段,使多個指令錯開一些時間同時處理的方式。
分支預測
在執行前預測條件分支的結果,不使管線停頓而處理後續指令的技術。預測錯誤時會重新處理。

相關的比較