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