使用者:AnthonyDonlon/archives/操作數轉發

操作數轉發(英文:Operand forwarding),也稱數據轉發,是一種對流水線CPU的優化策略。 [1] [2] 若流水線CPU當前執行的指令必須等待尚未完成的指令產生的結果時,流水線中將產生數據冒險,這需要引入流水線停頓解決。操作數轉發可降低此時流水線停頓帶來的時間開銷。

實例

編輯

假設一個帶有五級流水線的 CPU 將執行以下兩條偽匯編指令,其中第二條指令的原操作數 A 是第一條指令的計算結果:

ADD A B C  #A=B+C
SUB D C A  #D=C-A

CPU 在完成第二條指令的取指(IF)和解碼(ID)步驟後,由於源操作數 A 在第一條指令中仍未被回寫(WB),因此需要引入流水線停頓。直到上一指令的回寫操作完成後,該指令才能被執行(EX)。

無操作數轉發
1 2 3 4 5 6 7 8
ADD IF ID EX MEM WB
SUB IF ID 停頓 停頓 EX MEM WB

但是,由於操作數 A 實際上在上一指令的執行(EX)階段(第三個時鐘周期)就已經準備好了,因此可以用上一指令執行步驟的結果作為下一指令執行步驟的源操作數,提前進行第二條指令的執行步驟,從而減小流水線的開銷。

帶操作數轉發
1 2 3 4 5 6
ADD IF ID EX MEM WB
SUB IF ID EX MEM WB

技術實現

編輯

CPU 的控制單元必須加入檢測何時能夠進行操作數轉發的邏輯。 隨後可以使用一個數據選擇器來選擇合適的寄存器觸發器以從中讀取操作數。

參考資料

編輯
  1. ^ CMSC 411 Lecture 19, Pipelining Data Forwarding. University of Maryland Baltimore County Computer Science and Electrical Engineering Department. [2020-01-22]. 
  2. ^ High performance computing, Notes of class 11. hpc.serc.iisc.ernet.in. September 2000 [2014-02-08]. (原始內容存檔於2013-12-27). 

外部連結

編輯

[[Category:指令处理]]