複選題

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 筆)

#7223092

【解題思路】

先抓三句核心觀念:

  1. Pipeline 提高的是「吞吐量(Throughput)」,不是縮短單條指令時間。

  2. Pipeline 會遇到 hazard(競 hazards),是最大難題。

  3. 若沒有 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 通常包含:

  1. IF(Instruction Fetch)

  2. ID(Instruction Decode)

  3. EX(Execute)

  4. MEM(Memory Access)

  5. WB(Write Back)

Hazards 是考題重點:

  • Data hazard:RAW、WAR、WAW

  • Control hazard:分支(branch)造成

  • Structural hazard:硬體資源衝突

Pipeline 的 CPI 理論極限 = 1。

【記憶技巧】

一句話背:

「管線提量不提速,三種 hazard 常吃苦。」

或:

「吞吐量↑、latency =、hazard 多、無 hazard 才能一拍一條。」

【常見錯誤】

  1. 認為 Pipeline 會讓每條指令跑更快(錯!)

  2. 以為 Pipeline 一定加速(遇到 hazard 常常反而慢)。

  3. 忽略 D 選項的「理論上」關鍵字。

0
0