408答疑
文章目錄
- 六、指令流水線
- 指令流水線的基本概念
- 流水線的基本實現
- 流水線設計的原則
- 流水線的邏輯結構
- 流水線的時空圖表示
- 八、參考資料
- 鮑魚科技課件
- 26王道考研書
六、指令流水線
- 前面介紹的指令都是在單周期處理機中采用串行方法執行的,同一時刻 CPU 中只有一條指令在執行,因此各功能部件的使用率不高。
- 現代計算機普遍采用指令流水線技術,同一時刻有多條指令在 CPU 的不同功能部件中并發執行,大大提高了功能部件的并行性和程序的執行效率。
指令流水線的基本概念
-
可以從兩方面提高處理機的并行性:
- 時間上的并行技術:將一個任務分解為幾個不同的子階段,每個子階段在不同的功能部件上并行執行,以便在同一時刻能夠同時執行多個任務,進而提升系統性能,這種方法被稱為流水線技術。
- 空間上的并行技術:在一個處理機內設置多個執行相同任務的功能部件,并讓這些功能部件并行工作,這樣的處理機被稱為超標量處理機。
-
一條指令的執行過程可分解為若干階段,每個階段由相應的功能部件完成。若將各階段視為相應的流水段,則指令的執行過程就構成了一條指令流水線。
-
假設一條指令的執行過程分為如下 5 個階段(也稱功能段或流水段):
- 取指(IF):從指令存儲器或 Cache 中取指令。
- 譯碼/讀寄存器(ID):操作控制器對指令進行譯碼,同時從寄存器堆中取操作數。
- 執行/計算地址(EX):執行運算操作或計算地址。
- 訪存(MEM):對存儲器進行讀/寫操作。
- 寫回(WB):將指令執行結果寫回寄存器堆。
-
把 k + 1 k+1 k+1 條指令的取指階段提前到第 k k k 條指令的譯碼階段,從而將第 k + 1 k+1 k+1 條指令的譯碼階段與第 k k k 條指令的執行階段同時進行,如下圖所示。
-
理想情況下,每個時鐘周期都有一條指令進入流水線,每個時鐘周期都有一條指令完成,每條指令的時鐘周期數(CPI)都為 1。
-
-
為了利于實現指令流水線,指令集應具有如下特征:
- 指令長度應盡量一致:有利于簡化取指令和指令譯碼操作。否則,取指令所花的時間長短不一,使得取指部件極其復雜,并且也不利于指令譯碼。
- 指令格式應盡量規整:盡量保證源寄存器的位置相同,有利于在指令未知時就可取寄存器操作數,否則須譯碼后才能確定指令中各寄存器編號的位置。
- 采用 LOAD/STORE 型指令:其他指令都不能訪問存儲器,這樣可把 LOAD/STORE 指令的地址計算和運算指令的執行步驟規整在同一個周期中,有利于減少操作步驟。
- 數據和指令在存儲器中“按邊界對齊”存放:這樣,有利于減少訪存次數,使所需數據在一個流水段內就能從存儲器中得到。
流水線的基本實現
流水線設計的原則
-
在單周期實現中,雖然不是所有指令都必須經歷完整的 5 個階段,但只能以執行速度最慢的指令作為設計其時鐘周期的依據,單周期 CPU 的時鐘頻率取決于數據通路中的最長路徑。
-
流水線設計的原則:
- 指令流水線段個數以最復雜指令所用的功能段個數為準;
- 流水段的長度以最復雜的操作所花的時間為準。
-
假設某條指令的 5 個階段所花的時間分別如下:① 取指:200 ps;② 譯碼:100 ps;③ 執行:150 ps;④ 訪存:200 ps;⑤ 寫回:100 ps。
- 該指令的總執行時間為 750 ps。
- 按照流水線設計原則,每個流水段的長度為 200 ps,所以每條指令的執行時間為 1ns,反而比串行執行時增加了 250 ps。
- 假設某程序有 N N N 條指令,單周期處理機所用的時間為 N × 750 p s N \times 750ps N×750ps,而流水線處理機所用的時間為 ( N + 4 ) × 200 p s (N + 4) \times 200ps (N+4)×200ps。
- 由此可見,流水線方式并不能縮短單條指令的執行時間,但對于整個程序來說,執行效率得到了大幅提高。
流水線的邏輯結構
- 每個流水段后面都要增加一個流水段寄存器,用于鎖存本段處理完的所有數據,以保證本段的執行結果能在下個時鐘周期給下一流水段使用,如下圖所示。
- 各種寄存器和數據存儲器均采用統一時鐘 CLK 進行同步,每來一個時鐘,各段處理完的數據都將鎖存到段尾的流水段寄存器中,作為后段的輸入。同時,當前段也會收到前段通過流水段寄存器傳遞過來的數據。
- 一條指令會依次進入 IF、ID、EX、MEM、WB 五個功能段進行處理,第一條指令進入 WB 段后,各流水段都包含一條不同的指令,流水線中將同時存在 5 條不同的指令并行執行。
在考試中,若沒有明確說明,則可以不用考慮流水寄存器的時延。
流水線的時空圖表示
-
通常用時空圖來直觀地描述流水線的執行情況,如下圖所示。
- 在時空圖中,橫坐標表示時間,它被分割成長度相等的時間段 T T T;
- 縱坐標為空間,表示當前指令所處的功能部件。
-
在上圖中,
- 第一條指令 I 1 I_1 I1? 在時刻 0 進入流水線,在時刻 5T 流出流水線。
- 第二條指令 I 2 I_2 I2? 在時刻 T T T 進入流水線,在時刻 6T 流出流水線。
- 以此類推,每隔一個時間 T T T 就有一條指令進入流水線,從時刻 5T 開始每隔一個時間 T T T 就有一條指令流出流水線。
-
從上圖中可看出,在時刻 10T 時,流水線上便有 6 條指令流出。若采用串行方式執行,在時刻 10T 時,只能執行 2 條指令,可見使用流水線方式成倍地提高了計算機的速度。
只有大量連續任務不斷輸入流水線,才能充分發揮流水線的性能,而指令的執行正好是連續不斷的,非常適合采用流水線技術。對于其他部件級流水線,如浮點運算流水線,同樣也僅適合于提升浮點運算密集型應用的性能,對于單個運算是無法提升性能的。
八、參考資料
鮑魚科技課件
b站免費王道課后題講解:
網課全程班: