本文導讀:
一、並行技術 1.並行技術分類 2.新技術的設計與實現 3.指令周期 二、流水線技術 1.什么是流水線 2.指令重疊方式 3.流水工作設計 4.流水線的描述方法(時空圖) 5.流水線特點 三、流水線的分類(了解) 四、流水線相關及沖突(重點) 1.流水線相關 2.流水線沖突 3.流水線沖突帶來問題 4.數據沖突及其解決方案 5.結構沖突及其解決方案 6.控制沖突及其解決方案 五、流水線性能分析(含例題講解) 1.流水線的基本參數——吞吐率 2.流水線的基本參數——加速比 3.流水線的基本參數——效率 4.結果分析 5.有關流水線性能的若干問題
六、循環展開優化 1.指令調度 2.循環展開
七、多指令流出技術(拓展了解) 1.超標量 2.超長指令字
一、
並行技術
- 現流行的並行技術大都可以從三個方面實現:
- 資源重復:如多核
- 資源共享:如CPU分時技術
- 時間重疊:如流水線技術
- 新技術的設計與實現
- 引入新技術進行優化
- 出現新問題
- 解決新問題
采用一些機制可以解決
權衡
- 整體評估、反饋、再改進
- 指令周期
- 單周期處理機模型:一個周期完成一個指令(每個周期是等長的),指令長度可能不一樣,會造成很大的浪費
- 多周期處理機模型:將一個指令的完成划分成若干個周期來實現
- 流水線模型

二、流水線技術
1. 什么是流水線?
- 計算機中的流水線是把一個重復的過程分解為若干個子過程,每個子過程與其他子過程並行進行。由於這種工作方式與工廠中的生產流水線十分相似, 因此稱為流水線技術
- 從本質上講,流水線技術是一種時間並行技術。
2.指令重疊方式
- 順序執行:控制簡單,節省設備;但是速度慢,功能部件的利用率低
- 重疊執行方式 :指令的執行時間縮短 ,功能部件的利用率明顯提高 ;但是需要增加一些硬件;控制過程稍復雜
3.流水線工作設計
- 基本思想:延伸重疊方式,使指令解釋過程進一步細化, 提高各部件的利用率,以提高指令執行速度
- 理想目標:完成任務的時間與操作處理過程無關,只與提供操作的速度有關(假設一個任務有n個指令,將完成一個指令分為m個段,每段執行時間為△t ,則理想目標是完成任務的時間是T=m△t+(n-1)△t;當n >> m時,T=(n-1)△t。 指令執行頻率為 1 / △t: 即 與m無關,只和提供操作的速度△t有關)。
4.流水線的描述方法
- 時間—空間圖 Ⅰ:
橫坐標:表示時間,即各個任務在流水線中所經過的時間
縱坐標:表示空間,即流水線的各個子過程,也稱為級、 段、流水線深度(Stage)

- 時間—空間圖 Ⅱ:
橫坐標:表示時間,即各個任務或指令在流水線中 所在該時刻所對應的子過程
縱坐標:表示某個任務或某條指令,即流水線依次 處理的任務或指令

IF:Instruction Fetch,
取指令,用到部件:指令存儲器,Adder( 全加器,full-adder,是用門
電路實現兩個二進制數相加並求出和的組合線路,稱為一位全加器。一位全加器可以處理低位進位,並輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。常用二進制四位全加器74LS283)
ID:Instruction Decode,
譯碼(應該是取數同時譯碼的過程),用到部件:指令譯碼器寄存器堆讀口(這里面的寄存器堆的讀口和寫口可以看作兩個不同的部件),這塊有大量寄存器,WB也是從寫口將數據寫到這塊的寄存器中。
EX:Exec,
執行,計算內存單元地址。用到部件:ALU,擴展器
MEM:
訪存,從數據存儲器中讀。用到部件:數據存儲器。
WB:Write Back,
寫回,將數據寫到寄存器中。用到部件:寄存器堆寫口。
- 工作流程:分裝入、流水、排空 三個流程
- 同步處理:功能部件 + 鎖存器

- 硬件要求:
獨立工作的各子功能部件;
各部件處理時間盡可能相等,爭取最大工作頻率;
解決訪存沖突,即
允許不同指令的同時讀、寫功能;
解決同步問題,保證以相同的速度處理
5.流水線特點
在流水線處理器中,
連續任務是充分發揮流水線的效率必要條件之一
一個任務的執行過程可以划分成多個有聯系的子任務,每個子任務由一個專門的功能部件實現
每個功能部件后面都有緩沖存儲部件,用於緩沖本步驟的執行結果
同時有多個任務在執行;每個子任務的功能部件並行工作,但各個功能部件上正在執行的是不同的任務
各子任務執行的時間應盡可能相近
流水線有裝入時間和排空時間,只有
流水線完全充滿時, 流水線的效率能得到充分發揮
三、流水線的分類(了解)
1.按處理級別
操作級流水操作重疊
指令級流水指令執行重疊
處理器級(宏流水線)任務重疊

2.按功能分
單功能流水線:流水線只完成一種固定功能
多功能流水線:流水線可以完成多種功能,如 TI公司的ASC機,8段流水線,能夠實現:定點加減 法、定點乘法、浮點加法等功能
3.按同一時間內各段之間的連接方式分
靜態多功能流水線 :同一時間內,多功能結構只能按一種功能的連接方式工作。
動態多功能流水線:在同一時間內,可以有多種功能的連接方式同時工作
4.按處理的數據類型
標量流水線
向量流水線
5.按控制方式
同步流水線
異步流水線:當Si功能段要向Si+1段傳送數據時,首 先發出就緒信號,Si+1功能段收到信號后,向Si回送 一個回答信號。
6.按任務從輸出端的流出順序
順序流水方式:指令流出順序 = 指令流入順序
亂序流水方式:指令流出順序 != 指令流入順序
7. 線性流水線——不帶反饋回路的流水線

非線性流水線——帶反饋回路的流水線

線性流水線和非線性流水線對比
相同之處 : 都有從第一個功能段到最后一個功能段的單向傳輸線。
不同之處 :
非線性流水線一般有前饋線路或反饋線路;
非線性流水線的輸出端經常不在最后一個功能段,而可能從中間的任意一個功能段輸出。
任務經過流水線時,可能要多次經過同一功能段。
僅用功能段之間的連接圖並不能清楚地描述一個非線性流水線。一般需要連接圖和一張預約表共同描述。
四、流水線相關及沖突(重點)

1.
流水線相關(dependence):
兩條指令之間存在某種依賴關系。
- 數據相關
先寫后讀:后面指令用到前面指令的結果
或間接使用
- 名相關:換名技術
使用相同的寄存器或存儲器單元名稱/地址
反相關:
先讀后寫
輸出相關:
先寫后寫
真相關:
先寫后讀
- 控制相關
由分支指令引起的相關
2.
流水線沖突(hazards)
流水線沖突是指對於具體的流水線來說,由於"相關"的存在,使得指令流中的下一條指令不能在指定的時鍾周期執行
- 數據沖突:當指令在流水線中重疊執行時,因需要用到前面指令的執行結果而發生的沖突
- 控制沖突:流水線遇到分支指令和其他會改變PC值的指令所引起的沖突
- 結構沖突:因硬件資源滿足不了指令重疊執行的要求而發生的沖突,比如說,前面后面指令同時訪問存儲器
3.流水線沖突
帶來問題
- 導致錯誤的執行結果
- 流水線可能會出現停頓,從而降低流水線的效率和實際的加速比
- 我們約定當一條指令被暫停時,在該暫停指令之后流出的所有指令都要被暫停,而在該暫停指令之前流出的指令則繼續進行(否則就永遠無法消除沖突)
4.數據沖突:
舉例: 指令一:DADD R1,R2,R3 R2 + R3 --> R3
指令二:DSUB R4,R1,R5 R1 - R5 --> R4
指令三:XOR R6,R1,R7 R1 xor R7 -->R6
指令四:AND R8,R1,R9 R1 and R9 -->R8
指令五:OR R10,R1,R11 R1 or R11 --> R10

對上圖的解讀:
以指令一DADD R1,R2,R3為例:
第一周期:首先在IM中取出加法指令;
第二周期:在Reg中取出R2, R3寄存器中的值;
第三周期:在ALU中做R2 + R3加法運算;
第四周期:空;
第五周期:將R2 + R3的結果寫回到R1寄存器中;
很顯然,寄存器R1的正確數據是在第一條指令執行到第五周期才產生的,而后面四條指令都用到了直到第五周期才產生的R1數據,但是有些指令(指令二、三、四)不到第五周期就需要使用R1的數據(如指令二的減法指令在第二周期就需要使用R1的數據),這顯然是不合理的,會
產生數據沖突。下面逐個情況討論數據沖突及其解決辦法:
- 同一個周期數據沖突的情況:以指令四AND R8,R1,R9為例:在第五周期,第一條指令R2 + R3結果正准備寫入到R1中,但是此時第四條指令現在就需要使用R1(此時R1的值還不是R1 + R2),顯然會出現問題
解決辦法:
利用寄存器讀寫數據非常快的特點,無論是從存儲器中讀還是寫入存儲器往往都用不了一個完整周期(事實上半個周期就足夠完成寄存器的讀寫操作),所以可以設計規定:
上升沿寫數據,下降沿讀(取)數據。這樣一來,在第五周期的上升沿(即第五周期初時刻)將R2 + R3的結果寫到R1寄存器中,在第五周期下降沿(第五周期末)從R1寄存器中取出數據的方法解決此類數據沖突的問題。
- 在R1寫入寄存器的前一個周期(第四周期)就需要使用R1數據的情況:如指令三 XOR R6,R1,R7:這種情況顯然不適合利用上述解決辦法解決。但是可以換一個角度:雖然這個時候沒有任何辦法在Reg中取出正確的R1值,但是可以從ALU部件下手,因為從Reg取出R1數據最終目的就是計算R1 XOR R7,實際上就是計算(R2 + R3) XOR R7,所以只要保證輸入到的ALU中的數據是(R2 +R3)就可以了,那如何使(R2 + R3)的結果輸入到ALU參與(R2 + R3) XOR R7 運算呢?
解決辦法:采用
數據定向路徑技術解決!如下圖所示(藍色粗線所示):在第五周期初,對於指令三來說,從Reg讀出的錯誤的R1的值即將進入到ALU中參與XOR運算,此時,我們從DM后拉一根線到ALU之前,因為此時刻(第五周期初,即第四周期末)(R2 + R3)的結果正處在DM后面,這樣一來,(R2 + R3)的結果會通過我們剛拉的那根線傳到ALU前,這時候,我們在進入ALU之前設置一個多路選通器,不選擇錯誤的R1值,而是選擇使用傳過來的(R2 +R3)值,問題就解決了!
- 同樣道理,對於指令二:DSUB R4,R1,R5,在第四周期初要用到(R2 + R3)的值,可以從DM前(或者ALU后)拉一根線到ALU前,如綠色線所示,同樣可以解決問題。

- 綜上所述,綜對於數據沖突來說,可以通過定向技術減少數據沖突引起的停頓 (定向技術也稱為旁路或短路)。但是並不是所有的數據沖突都可以用定向技術來解決:如下例:
LD R1,0(R2)
DADD R4,R1,R5
AND R6,R1,R7
XOR R8,R1,R9


解決上述問題:增加流水線互鎖硬件,插入“暫停”(氣泡)。
5.結構沖突
- 如果某種指令組合因為資源沖突而不能正常執行,則稱該處理機有結構沖突(比如說,兩條指令在同一周期同時訪問內存,如下圖所示)
- 常見的導致結構相關的原因:
功能部件不是完全流水
資源份數不夠

- 有些流水線處理機只有一個存儲器,將數據和指令放在一起,訪存指令會導致訪存沖突
解決辦法Ⅰ:插入暫停周期 (“流水線氣泡”或“氣泡”) ,如下圖所示:


解決方法Ⅱ:
設置相互獨立的指令存儲器(指令Cache )和數據存儲器(指令Cache )。
- 有時流水線設計者允許結構沖突的存在
主要原因:減少硬件成本 : 如果把流水線中的所有功能單元完全流水化,或者重復設置足夠份數,那么所花費的成本將相當高
- 控制沖突
類似於判斷、循環、函數調用、遞歸等涉及到跳轉的會涉及到控制沖突。
1 //設s , i 初值都為0; 2 if (i < 10) 3 { 4 /*指令一:*/ s = s + i; 5 /*指令二:*/ i++; 6 } 7 /*指令三:*/ s = s - 2;
以此為例,在流水線環境中,首先執行指令一,緊接着執行指令二(當然不是直接執行高級語言,而是該句高級語言對應的機器語言),重點是下一步,按照我們思維,因為此時i = 1 < 10;所以應該繼續執行指令一,但是可惜計算機很“傻”,它此時還真不知道該執行指令一還是指令三,這是為什么?
指令編號
|
時鍾周期
|
||||||
1
|
2
|
3
|
4
|
5
|
6
|
7
|
|
DADD Rs, Rs ,Ri
(s = s + i )
|
IF
|
ID
|
EX
|
MEM
|
WB
|
||
DADD Ri, Ri, 1
( i = i + 1)
|
IF
|
ID
|
EX
|
MEM
|
WB
|
||
???
|
Start
|
結合上表所示,前兩條指令按照流水線方式依次執行,關於第三條指令,按照正常邏輯:若 i >= 10,則應該執行指令三;若是i < 10,則應該執行指令一。現在重點是落在i 此時到底是多少?請注意,此時正確的i 值取決於指令二:i++,但是在指令二中,i值直到第6周期才被更新(寫回到Ri寄存器),就算使用數據定向也不可能實現在第三周期初就能得到正確的i值,所以說,
涉及到分支跳轉語句時,計算機是不知道是該執行分支語句還是該忽略分支語句繼續向下順序執行。好的,現在先把這個結論放在一邊。
對於上述if分支語句而言,執行分支指令的結果就兩種:
- 分支成功(繼續執行if中的語句):此時,PC值改變為分支轉移的目標地址 。 在條件判定和轉移地址計算都完成后,才改變PC值。
- 分支失敗(執行if函數體外面的語句):PC的值保持正常遞增, 指向順序的下一條指令。
在上述的5段流水線中,改變PC值是在MEM段進行的,會給流水線帶來了3個時鍾周期的延遲(停頓),前面我們說過,流水線出現停頓(暫停)會影響流水線的效率和加速比(尤其是面對上億條指令時,停頓會經常出現)
- 可采取兩種措施來減少分支延遲。
在流水線中盡早判斷出分支轉移是否成功;
盡早計算出分支目標地址
關於第一個措施,上面我們已經分析過了,
計算機不能正確判斷出分支轉移是否成功,那該怎么辦呢?
第一種減少延遲時間的方法:猜!(確實是這樣的!)
猜的結果無非就兩種:猜對或者猜錯了。
這里面我們假設分支失敗:則允許分支指令后的指令繼續在流水線中流動,就好象什么都沒發生似的
- 如果猜對了,即已經確定分支失敗:將分支指令看作是一條普通指令,流水線正常流動
- 如果猜錯了,即已經確定分支成功,那也不要緊,流水線就把在分支指令之后 取出的所有指令轉化為空操作(到最后需要將結果寫入到寄存器時,就通過使能信號不讓它寫入就可以了 ),並按分支目地重新取指令執行。
但是這有一個前提:
要保證:分支結果出來之前不會改變處理機的狀態,以 便一旦猜錯時,處理機能夠回退到原先的狀態
第二種減少延遲時間的方法:延遲分支(指令調度)
- 主要思想:
從邏輯上“延長”分支指令的執行時間。把延遲分支看成是由原來的分支指令和若干個
延遲槽構成,不管分支是否成功,都要按順序執行延遲槽中的指令
分支延遲槽中的指令“掩蓋”了流水線原來必須插入的暫停周期(延遲時間),從而達到減少延遲時間的目的。
- 分支延遲指令的調度任務:在延遲槽中放入有用的指令( 由編譯器完成)
- 三種調度方法: 從前調度 從目標處調度 從失敗處調度

- 分支延遲受到兩個方面的限制:
可以被放入延遲槽中的指令要滿足一定的條件。
編譯器預測分支轉移方向的能力。
- 進一步改進:分支取消機制(取消分支)
當分支的實際執行方向和事先所預測的一樣時, 執行分支延遲槽中的指令,否則就將分支延遲槽中的 指令轉化成一個空操作
五、流水線性能分析
1.流水線的基本參數
——吞吐率
- 吞吐率(Through Put)—— 單位時間內流水線完成任務數量或輸出的結果數:TP = n / Tk
其中:n 為任務數; TK 為完成n個任務所用時間
在K級流水線中,
各段執行時間相等,輸入任務連續的情況下,時鍾周期為△t ,則完成n個任務需要的總時間為 Tk=(k+n-1) △t
因此吞吐率為
TP = n / (k+n-1) △t 當n-->無窮大時,TP MAX = 1 / △t
各段執行時間不等時:


2.流水線的基本參數——
加速比
- 加速比——完成一批任務,不使用流水線時間與使用流水線所用的時間之比。
S = 順序執行時間T0 / 流水線執行時間Tk
- 各段執行時間相等,輸入任務連續的情況下:S = k*n*△t / (k + n - 1)△t = k*n / (k + n -1) 當n—>無窮大時, S = k
3.流水線的基本參數——
效率(數格子)
效率(Efficiency)——
流水線的設備利用率。在時空圖上,流水線的效率定義為n個任務時間占用的時空區,與k個功能段總的時空之比
E = n個任務占用的時空區(有顏色的格子數) / k個流水段的總的時空區(所有格子數) = T0 / k * TK = k*n*△t / k * (k + n - 1)△t = k*n / k * (k + n -1) 當n—>無窮大時, E = 1

- 例一:流水線性能分析舉例
每個浮點加法都需要經過4級:求階差、對階、尾數加、規格化
用一條4段浮點加法器流水線求8個浮點數的和:Z = A+B+C+D+E+G+F+H,求流水線的吞吐率、效率、加速比。
解:首先畫出時空圖

吞吐率: TP = n / Tk = 7 / (15 * △t ) = 0.47 / △t
加速比: S = 4 * 7 / (15)= 1.87
效 率: E = 7 * 4 / (15 * 4)= 0.47 —— 數格子
- 例2:(a1+b1)*(a2+b2)*(a3+b3)*(a4+b4)在靜態、雙功能(加法和乘法)流水線上實現

計算順序: x1=a1+b1, x2=a2+b2, x3=a3+b3, x4=a4+b4; y1=x1*x2, y2=x3*x4; z=y1*y2
首先畫出時空圖(第一個是錯誤畫法):

下面一個是正確畫法:


吞吐率: TP = n / Tk = 7 / (17 * △t )
加速比: S = (4*3 + 3*5) / (17)= 1.88
效 率: E =(4*3 + 3*5) / (17 * 6)= 0.264 —— 數格子
4.結果分析:
- 建立、排空時間過多(流水線斷流—數據相關和操作變換)
- 功能切換必須等待排空后進行。(靜態通病)
- 動態流水線結果如何?(減少2個Δt)
- 如何提高流水線效率? 盡量細化各功能段,盡量減少功能切換,盡量減少數據相關,盡量增加一次處理的指令數量。
- 流水線適用范圍? 流水線適合於操作相同、操作數間無相關性的多個指令的執行。
5.有關流水線性能的若干問題
- 流水線並不能減少(而且一般是增加)單條指令的執行時間,但卻能提高吞吐率。
- 適當增加流水線的深度(段數)可以提高流水線的性能。
- 流水線的深度(級數)受限於流水線的延遲和流水線的額外開銷。
- 相關問題。如果流水線中的指令相互獨立 ,則可以充分發揮流水線的性能。但在實際中 ,指令間可能會是相互依賴,這會降低流水線的性能。
六、循環展開優化
在流水線中,往往因為指令順序安排不合理而導致CPU等待空轉,產生延遲,影響流水線效率。
解決辦法:
循環展開和指令調度
前提假設:假設采用MIPS的5段整數流水線:
分支的延遲:1個時鍾周期。
整數load指令的延遲:1個時鍾周期。
整數運算部件是全流水或者重復設置了足夠的份數。
從例題入手理解:
例: 對於下面的源代碼,轉換成MIPS匯編語言, 在不進行指令調度和進行指令調度兩種情況下,分析其代碼一次循環所需的執行時間。
for (i=1024; i>=0; i--) x[i] = x[i] + s;
Loop:L.D F0,0(R1)
ADD.D F4,F0,F2
S.D F4, 0(R1)
DADDIU R1,R1,#-8
BNE R1,R2,Loop
其中: 整數寄存器R1:指向向量中的當前元素(初值為向量中最高端元素的地址)
浮點寄存器F2:用於保存常數s
第二部浮點加法需要4個周期
分析:
假設一個浮點計算部件需要4周期完成一個計算,若該部件不使用流水線,則延遲為 :

2.循環展開:
在上例中,
只有L.D、ADD.D和S.D這3條指令是有效操作 (取、加、存) ,占用3個時鍾周期。 而DADDIU、空轉和BEN這3個時鍾周期都是附加的循環控制開銷。
可以通過循環展開的方式消除冗余,減少循環控制開銷。
- 循環展開技術
把循環體的代碼復制多次並按順序排列,然后相應調整循環的結束條件
這給編譯器進行指令調度帶來了更大的空間
將上述例子中的循環展開3次得到4個循環體,然后對展開 后的指令序列在不調度和調度兩種情況下,分析代碼的性能。
分配寄存器(不重復使用寄存器 ):
F0、F4:用於展開后的第1個循環體
F2:保存常數
F6、F8:展開后的第2個循環體
F10、F12:第3個循環體
F14、F16:第4個循環體
下面分三種情況比較循環展開和指令調度節省的時間:
- 第一種情況:


- 第二種情況:
對指令序列進行優化調度,以減少空轉周期
浮點加法部件采用流水指令流出時鍾


- 第三種情況:
對指令序列進行優化調度,以減少空轉周期
浮點運算部件不采用流水


- 循環展開和指令調度時要注意以下幾個方面:
保證正確性。 在循環展開和調度過程中尤其要注意兩個地方的正確性:循環控制,操作數偏移量的修改。
注意有效性。 只有能夠找到不同循環體之間的無關性,才能有效 地使用循環展開。
使用不同的寄存器。 (否則可能導致新的沖突)
刪除多余的測試指令和分支指令,並對循環結束代碼和新的循環體代碼進行相應的修正。
注意對存儲器數據的相關性分析
注意新的相關性
3.指令級並行
指令調度可以通過兩種形式實現:靜態調度和動態調度
- 靜態調度
依靠編譯器(編譯器需要做的很復雜,很完善)對代碼進行靜態調度,以減少相關和沖突。
它不是在程序執行的過程中、而是在編譯期間進行代碼調度和優化。
通過把相關的指令拉開距離來減少可能產生的停頓。
- 動態調度
在程序的執行過程中,依靠專門硬件對代碼進行調度,減少數據相關導致的停頓。
能夠處理一些在編譯時情況不明的相關(比如涉及到存儲器訪問的相關),並簡化了編譯器;
能夠使本來是面向某一流水線優化編譯的代碼在其他的流水線(動態調度)上也能高效地執行。
以硬件復雜性的顯著增加為代價
七、多指令流出技術(拓展了解)
- CPI:平均每條指令執行周期數
- 前面介紹的流水線最理想(實際上達不到)的狀態就是每個周期執行一條指令,即CPI = 1,速度的提升似乎就此止步了,但是人類的智慧超出你想象,我們有辦法讓CPI < 1 嗎?(即每條指令執行時間連一個周期也用不了)
- 答案是肯定的,我們可以通過多指令流出技術實現這一點。

1.多指令流出處理機有兩種實現方式:
- 超標量(Superscalar)
在每個時鍾周期流出的指令條數不固定,依代碼的具體情況而定。(但有上限)
設這個上限為n,就稱該處理機為n流出。
可以通過編譯器進行靜態調度,也可以基於 Tomasulo算法進行動態調度。
動態超標量調度技術的效果更好
- 超長指令字VLIW(Very Long Instruction Word)
在每個時鍾周期流出的指令條數是固定的,這些指令構成一條長指令或者一個指令包(就是把能並行執行的多條指令組裝成一條很長的指令,通常是100多位到幾百位 )。
指令包中,指令之間的並行性是通過指令顯式地表示出來的。
設置多個功能部件。
指令字被分割成一些字段,每個字段稱為一個操作槽 ,直接獨立地控制一個功能部件。
在VLIW處理機中,
所有的處理和指令調度都是由編譯器靜態完成的。
2.指令多流出處理器受哪些因素的限制呢?
主要受以下三個方面的影響:
程序所固有的指令級並行性。
硬件實現上的困難。
超標量和超長指令字處理器固有的技術限制。
3.由於指令多流出處理機受到多方面的限制,所以又引入了
超流水線處理機
超流水線處理機的特點是將每個流水段進一步細分,這樣在一個時鍾周期內能夠分時流出多條指令。
對於一台每個時鍾周期能流出n條指令的超流水線計算機來說,這n條指令不是同時流出的,而是每隔1/n 個時鍾周期流出一條指令。
實際上該超流水線計算機的流水線周期為1/n個 時鍾周期。
下面是一台每個時鍾周期分時流出兩條指令的超流水線計算機的時空圖
