管線
此條目沒有列出任何參考或來源。 (2010年2月9日) |
管線(pipeline),亦稱流水線,是現代電腦處理器中必不可少的部分,是指將電腦指令處理過程拆分為多個步驟,並通過多個硬體處理單元並列執行來加快指令執行速度。其具體執行過程類似工廠中的管線,並因此得名。
如果作出類比,則電腦指令就是管線傳送帶上的產品,各個硬體處理單元就是管線旁的工人。
在使用管線的處理器中一個指令不是在處理器的一個定時器訊號中完成的,而是被分到多個訊號中去完成,但是與此同時多個指令的分任務被同時處理。由於這些分任務比整個指令要簡單,因此可以通過使用管線提高定時器頻率。雖然每個指令需要多個訊號後才能完成,但是通過多個指令的並列運算每個訊號內一個指令可以完成,因此通過這個方法整個速度可以提高。
一條管線的每個分步驟被稱為管線級。它們被管線暫存器分開。除指令管線外在現代系統中還有其它管線,比如用來計算浮點數的算術管線。
計時器訊號
編輯一個級越簡單,處理它的頻率就可以越高。在現代的中央處理器中一個指令管線可以長於30級(參見NetBurst)。核節是一個指令每個管線級所需要的時間。在一個k級管線中每個指令由k個級組成,每個級需要k個訊號數來完成。由於在每個訊號里一個新指令開始執行,因此在理想狀態下在每個訊號中也應該有一個指令完成,離開管線。
每個節由管線的周期決定,它由所有級持續時間 中的最大級持續時間 和一個附加時間 的和組成。這個其中附加時間是因為把每個級的結果存到管線暫存器中去導致的。
效率提高
編輯通過管線指令完成的總速度提高。設周期時間為 ,完成 個 級指令總時間為:
總時間為
一開始管線是空的,在 步中被充滿。每級後一個新的指令被調入管線,而另一個指令完成。因此剩下的指令在 步後完成。
將使用沒有管線的指令執行時間除以管線的指令執行時間獲得的商代表著管線帶來的加速:
假如在管線中總是有足夠的指令等待執行的話,則在 趨向無窮大時:
也就是說隨著級數 的提高加速可以無限地提高。但是一個指令無法被分成無限多個級。此外級數的提高也會導致資料和指令衝突的嚴重性提高,硬體的複雜性也隨之提高。
管線危障
編輯管線危障(pipeline hazards)是當一個指令在執行時,需要等待管線上前一個指令先執行完畢的話,那麼這兩個指令相互之間彼此有依賴關係。這可能導致流水線衝突的現象發生。以下三種衝突情況可能出現:
- 資源衝突:管線上的一個指令需要使用已經被另一個指令占據的資源
- 資料衝突
- 指令層的資料衝突:指令需要的資料還沒有計算出來
- 傳輸層的資料衝突:指令需要的暫存器(register)內容還沒有被存入暫存器
- 控制流衝突:管線必須等待一個有條件Goto指令是否會被執行。
這些衝突導致相對應的指令,必須在管線的開始處等候,這會在管線上導致空缺。這樣的話管線就不能順利執行,處理速度便開始下降。因此要儘量避免這樣的衝突:
通過增加功能單位可以解決資源衝突。通過把管線後面的計算結果立刻向前傳可以避免許多資料衝突。
通過分支預測器可以避免控制衝突。在這裡處理器預測性地繼續運算,直到正式預測是正確為止。假如預測錯誤的話那麼在其中已經執行的指令要被推翻。尤其管線非常長的處理器(比如英特爾的奔騰4或者IBM的PowerPC)在這種情況下要浪費許多時間。因此這些處理器擁有非常進階的分支預測技術,只有百分之一的分支預測會發生錯誤,其管線需要清除。
優缺點
編輯長管線的優點在於它能夠大大地提高處理器速度。缺點在於許多指令被同時執行。假如分支預測錯誤的話整個管線上所有的指令全部要被取消,管線要被重新充滿。這需要從記憶體或者中央處理器快取中呼叫指令,導致延遲時間,在這段時間裡處理器沒有工作。NetBurst架構管線一開始有20級、而後增加至31級,放大其缺點;其後繼者Intel Core微處理器架構就減少管線級數。