管線(pipeline),亦稱流水線,是現代電腦處理器中必不可少的部分,是指將電腦指令處理過程拆分為多個步驟,並通過多個硬件處理單元並列執行來加快指令執行速度。其具體執行過程類似工廠中的管線化,並因此得名。

如果作出類比,則電腦指令就是管線化傳送帶上的產品,各個硬件處理單元就是管線化旁的工人。

在使用管線化的處理器中一個指令不是在處理器的一個定時器訊號中完成的,而是被分到多個訊號中去完成,但是與此同時多個指令的分任務被同時處理。由於這些分任務比整個指令要簡單,因此可以通過使用管線化提高定時器頻率。雖然每個指令需要多個訊號後才能完成,但是通過多個指令的並列運算每個訊號內一個指令可以完成,因此通過這個方法整個速度可以提高。

一條管線化的每個分步驟被稱為管線化級。它們被管線化暫存器分開。除指令管線化外在現代系統中還有其它管線化,比如用來計算浮點數的算術管線化。

計時器訊號

一個級越簡單,處理它的頻率就可以越高。在現代的中央處理器中一個指令管線化可以長於30級(參見NetBurst)。核節是一個指令每個管線化級所需要的時間。在一個k級管線化中每個指令由k個級組成,每個級需要k個訊號數來完成。由於在每個訊號里一個新指令開始執行,因此在理想狀態下在每個訊號中也應該有一個指令完成,離開管線化。

每個節由管線化的周期決定,它由所有級持續時間中的最大級持續時間和一個附加時間的和組成。這個其中附加時間是因為把每個級的結果存到管線化暫存器中去導致的。

效率提高

通過管線化指令完成的總速度提高。設周期時間為,完成級指令總時間為:

總時間為

一開始管線化是空的,在步中被充滿。每級後一個新的指令被調入管線化,而另一個指令完成。因此剩下的指令在步後完成。

將使用沒有管線化的指令執行時間除以管線化的指令執行時間獲得的商代表着管線化帶來的加速:

假如在管線化中總是有足夠的指令等待執行的話,則在趨向無窮大時:

也就是說隨着級數的提高加速可以無限地提高。但是一個指令無法被分成無限多個級。此外級數的提高也會導致數據和指令衝突的嚴重性提高,硬件的複雜性也隨之提高。

管線化危障

管線化危障(pipeline hazards)是當一個指令在執行時,需要等待管線化上前一個指令先執行完畢的話,那麼這兩個指令相互之間彼此有依賴關係。這可能導致流水線衝突的現象發生。以下三種衝突情況可能出現:

  • 資源衝突:管線化上的一個指令需要使用已經被另一個指令佔據的資源
  • 數據衝突
    • 指令層的數據衝突:指令需要的數據還沒有計算出來
    • 傳輸層的數據衝突:指令需要的暫存器(register)內容還沒有被存入暫存器
  • 控制流衝突:管線化必須等待一個有條件Goto指令是否會被執行。

這些衝突導致相對應的指令,必須在管線化的開始處等候,這會在管線化上導致空缺。這樣的話管線化就不能順利執行,處理速度便開始下降。因此要儘量避免這樣的衝突:

通過增加功能單位可以解決資源衝突。通過把管線化後面的計算結果立刻向前傳可以避免許多數據衝突。

通過分支預測器可以避免控制衝突。在這裏處理器預測性地繼續運算,直到正式預測是正確為止。假如預測錯誤的話那麼在其中已經執行的指令要被推翻。尤其管線化非常長的處理器(比如英特爾的奔騰4或者IBMPowerPC)在這種情況下要浪費許多時間。因此這些處理器擁有非常進階的分支預測技術,只有百分之一的分支預測會發生錯誤,其管線化需要清除。

優缺點

長管線化的優點在於它能夠大大地提高處理器速度。缺點在於許多指令被同時執行。假如分支預測錯誤的話整個管線化上所有的指令全部要被取消,管線化要被重新充滿。這需要從記憶體或者中央處理器快取中呼叫指令,導致延遲時間,在這段時間裏處理器沒有工作。NetBurst架構管線化一開始有20級、而後增加至31級,放大其缺點;其後繼者Intel Core微處理器架構就減少管線化級數。

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.