1. 程式人生 > >流水線、超流水線、超標量(superscalar)技術對比(轉)

流水線、超流水線、超標量(superscalar)技術對比(轉)

流水線

     流水線技術是一種將每條指令分解為多步,並讓各步操作重疊,從而實現幾條指令並行處理的技術。程式中的指令仍是一條條順序執行,但可以預先取若干條指令,並在當前指令尚未執行完時,提前啟動後續指令的另一些操作步驟。這樣顯然可加速一段程式的執行過程。 
市場上推出的各種不同的1 6位/ 3 2位微處理器基本上都採用了流水線技術。如8 0 4 8 6和P e n t i u m均使用了6步流水線結構,流水線的6步為: 
( 1 ) 取指令。C P U從快取記憶體或記憶體中取一條指令。 
( 2 ) 指令譯碼。分析指令性質。 
( 3 ) 地址生成。很多指令要訪問儲存器中的運算元,運算元的地址也許在指令字中,也許要經過某些運算得到。 
( 4 ) 取運算元。當指令需要運算元時,就需再訪問儲存器,對運算元定址並讀出。 
( 5 ) 執行指令。由A L U執行指令規定的操作。 
( 6 ) 儲存或"寫回"結果。最後運算結果存放至某一記憶體單元或寫回累加器A。 
       在理想情況下,每步需要一個時鐘週期。當流水線完全裝滿時,每個時鐘週期平均有一條指令從流水線上執行完畢,輸出結果,就像轎車從組裝線上開出來一樣。P e n t i u m、Pentium Pro和Pentium II處理器的超標量設計更是分別結合了兩條和三條獨立的指令流水線,每條流水線平均在一個時鐘週期內執行一條指令,所以它們平均一個時鐘週期分別可執行2條和3條指令。 
     流水線技術是通過增加計算機硬體來實現的。例如要能預取指令,就需要增加取指令的硬體電路,並把取來的指令存放到指令佇列快取器中,使M P U能同時進行取指令和分析、執行指令的操作。因此,在1 6位/3 2位微處理器中一般含有兩個算術邏輯單元A L U,一個主A L U用於執行指令,另一個A L U專用於地址生成,這樣才可使地址計算與其它操作重疊進行。

超流水線

      超級流水線以增加流水線級數的方法來縮短機器週期,相同的時間內超級流水線執行了更多的機器指令。採用簡單指令以加快執行速度是所有流水線的共同特點,但超級流水線配置了多個功能部件和指令譯碼電路,採用多條流水線並行處理,還有多個暫存器埠和匯流排,可以同時執行多個操作,因此比普通流水線執行的更快,在一個機器週期內可以流出多條指令。

 

      一般而言,CPU執行一條指令需要經過以下階段:取指->譯碼->地址生成->取運算元->執行->寫回,每個階段都要消耗一個時鐘週期,同時每個階段的計算結果在週期結束以前都要傳送到階段之間的鎖存器上,以供下一個階段使用。所以,每個時鐘週期所消耗的時間就是由以上幾個階段中的耗時最長的那個決定的。假設耗時最長的階段耗時為s秒,那麼時鐘頻率就只能設計到1/s赫茲(這裡不考慮階段間訊號傳遞的時間和鎖存器的反應時間)。

      那麼,要提高時鐘頻率,一種可能的方法就是減小每個階段的時間消耗。其中一種最簡單的辦法,就是將每個階段再進行細分成更小的步驟,同樣是細分後的每個階 段,單個階段的運算量小了,單位耗時s也就減少,這樣實際上就是提高了時鐘頻率。這種將標準流水線細分的技術,就是超級流水線技術。當然,流水線和超級流 水線之間並沒有很明顯的區別。這樣的技術,雖然提高了CPU的主頻,但是也帶來了很大的副作用:

      首先,細分後的每一個階段都要在其後使用鎖存器鎖存,因此將一個階段細分為N的子階段並不能讓單位時間減少到s/N, 而是s/N + d, 其中d為鎖存器的反應時間。這實際上就是增加了多餘的時間消耗。

      其次,隨著流水線級數的加深,一旦分支預測出現錯誤,會導致CPU中大量的指令作廢,這樣的消耗是十分巨大的。

      以上原因,也就是什麼Pentium IV具有31級的流水線,指令的執行效率卻趕不上只有14級流水線的Pentium M

超標量
  超標量(superscalar)是指在CPU中有一條以上的流水線,並且每時鐘週期內可以完成一條以上的指令,這種設計就叫超標量技術。 其實質是以空間換取時間。而超流水線是通過細化流水、提高主頻,使得在一個機器週期內完成一個甚至多個操作,其實質是以時間換取空間。

將一條指令分成若干個週期處理以達到多條指令重疊處理,從而提高cpu部件利用率的技術叫做標量流水技術。超級標量是指cpu內一般能有多條流水線,這些流水線能夠並行處理。在單流水線結構中,指令雖然能夠重疊執行,但仍然是順序的,每個週期只能發射(issue)或退休(retire)一條指令。超級標量結構的cpu支援指令級並行,每個週期可以發射多條指令(2-4條居多)。可以使得cpu的IPC(InstructionPerClock)>,從而提高cpu處理速度。超級標量機能同時對若干條指令進行譯碼,將可以並行執行的指令送往不同的執行部件,在程式執行期間,由硬體(通常是狀態記錄部件和排程部件)來完成指令排程。超級標量機主要是藉助硬體資源重複(例如有兩套譯碼器和ALU等)來實現空間的並行操作。熟知的pentium系列(可能是p-II開始),還有SUNSPARC系列的較高階型號,以及MIPS若干型號等都採用了超級標量技術。

超長指令字

超常指令字(VLIW:VeryLongInstructionWord)是由美國Yale大學教授Fisher提出的。它有點類似於超級標量,是一條指令來實現多個操作的並行執行,之所以放到一條指令是為了減少記憶體訪問。通常一條指令多達上百位,有若干運算元,每條指令可以做不同的幾種運算。那些指令可以並行執行是由編譯器來選擇的。通常VLIW機只有一個控制器,每個週期啟動一條長指令,長指令被分為幾個欄位,每個欄位控制相應的部件。由於編譯器需要考慮資料相關性,避免衝突,並且儘可能利用並行,完成指令排程,所以硬體結構較簡單。   

VLIW機器較少,可能不太容易實現,業界比較有名的VLIW公司之一是Transmeta,在加州矽谷SantaClara(矽谷聖地之一,還有SanJose,PaloAlto)。它做的機器採用X86指令集,VLIW實現,具體資料可以去訪問公司的網站。

向量機

平時接觸的計算機都是標量機,向量機都是大型計算機,一般用於軍事工業,氣象預報,以及其他大型科學計算領域,這也說明了向量機都很貴。國產的銀河計算機就是向量機普通的計算機所做的計算,例如加減乘除,只能對一組資料進行操作,被稱為標量運算。向量運算一般是若干同類型標量運算的迴圈。向量運算通常是對多組資料成批進行同樣運算,所得結果也是一組資料。很多做科學計算的大(巨)型機都是向量機,例如國產銀河。

SIMD技術

單指令多資料(SingleInstructionMultipleData)簡稱SIMD。SIMD結構的CPU有多個執行部件,但都在同一個指令部件的控制下。SIMD在效能優勢呢:以加法指令為例,單指令單資料(SISD)的CPU對加法指令譯碼後,執行部件先訪問記憶體,取得第一個運算元;之後再一次訪問記憶體,取得第二個運算元;隨後才能進行求和運算。而在SIMD型CPU中,指令譯碼後幾個執行部件同時訪問記憶體,一次性獲得所有運算元進行運算。這個特點使得SIMD特別適合於多媒體應用等資料密集型運算。AMD公司的3DNOW!技術其實質就是SIMD,這使K6-2處理器在音訊解碼、視訊回放、3D遊戲等應用中顯示出優異效能。