複選題
8.關於「指令管線 Pipeline」的敘述,哪些是正確的?
(A) Pipeline 可以提高指令吞吐量
(B) Pipeline 會增加 每一條指令的執行時間
(C) Pipeline 容易產生 hazard
(D) 假如沒有 hazard,理論上指令可以一拍一條完成
(E) Pipeline 保證所有程式一定加速
統計: A(17), B(9), C(13), D(9), E(5) #3678264
詳解 (共 1 筆)
【解題思路】
先抓三句核心觀念:
-
Pipeline 提高的是「吞吐量(Throughput)」,不是縮短單條指令時間。
-
Pipeline 會遇到 hazard(競 hazards),是最大難題。
-
若沒有 hazard,理論上可以做到每個 clock 完成一條指令。
只要掌握上面三項,就能得出 A、C、D 正確。
【逐步講解觀念】
什麼是 Pipeline(指令管線)?
CPU 將一條指令拆成多個階段(如取指 IF、解碼 ID、執行 EX、記憶體 MEM、寫回 WB),
讓不同指令在不同階段同時進行。
就像工廠「製程分工」→ 每道工序同時運作。
Pipeline 的三大重點:
1. 提高吞吐量(Throughput)(A 正確)
同時讓多條指令在不同階段執行,
所以單位時間「完成更多指令」。
2. 並不改善單條指令的執行時間(B 錯)
一條指令仍然必須經過 IF→ID→EX→MEM→WB
每一條指令的 latency(延遲時間)不變,甚至可能更高。
Pipeline 改善的是「整體產量」,不是「單件速度」。
3. 容易遇到 hazard(危險)(C 正確)
Hazard 包含三種:
-
資料 hazard(Data hazard)
-
控制 hazard(Control hazard)
-
結構 hazard(Structural hazard)
Pipeline 最大難題就是解決 hazard。
4. 如果沒有 hazard,可以做到每拍出一條指令(D 正確)
理論上的最佳狀態:
每一個 clock cycle pipeline 都滿的 → 一個 cycle retire 一條指令。
5. Pipeline 不保證所有程式都會變快(E 錯)
例如:
-
程式分支太多 → Control hazard變多
-
指令依賴重 → Data hazard
-
pipeline flush 被迫重來
-
極短迴圈 + hazard 多 → 反而沒有加速
Pipeline 不是萬靈丹。
【選項逐一破題】
(A) Pipeline 可以提高指令吞吐量 → 正確
吞吐量↑,不是單條指令時間↓。
(B) Pipeline 會增加每一條指令的執行時間 → 錯
Pipeline 的 latency 通常不變,pipeline 只是「讓多條同時進行」。
(C) Pipeline 容易產生 hazard → 正確
Pipeline 等於 hazard 的起源。
(D) 假如沒有 hazard,理論上指令可以一拍一條完成 → 正確
理想 pipeline:CPI = 1。
(E) Pipeline 保證所有程式一定加速 → 錯
hazard、多分支、資料依賴會降低 pipeline 效能,有時甚至不如非 pipeline。
【延伸知識】
CPU Pipeline 舉例:
五階段 RISC pipeline 通常包含:
-
IF(Instruction Fetch)
-
ID(Instruction Decode)
-
EX(Execute)
-
MEM(Memory Access)
-
WB(Write Back)
Hazards 是考題重點:
-
Data hazard:RAW、WAR、WAW
-
Control hazard:分支(branch)造成
-
Structural hazard:硬體資源衝突
Pipeline 的 CPI 理論極限 = 1。
【記憶技巧】
一句話背:
「管線提量不提速,三種 hazard 常吃苦。」
或:
「吞吐量↑、latency =、hazard 多、無 hazard 才能一拍一條。」
【常見錯誤】
-
認為 Pipeline 會讓每條指令跑更快(錯!)
-
以為 Pipeline 一定加速(遇到 hazard 常常反而慢)。
-
忽略 D 選項的「理論上」關鍵字。