CPU 與指令架構:從開機到管線執行
本頁為依教材與考古題整理的原創摘要;考古題答案經技術覆核,但不是官方答案。
第一次接觸也沒關係
這堂先懂這些詞
先記住白話意思,不必急著背英文。看到正文時,再把正式名稱接回來。
阿姆達爾定律
也會看到:Amdahl's law、speedup用不能平行化的部分,估算整體加速的最高上限。
- 生活例子:
- 十道工序只有八道能多人一起做,剩下兩道仍會限制總完工速度。
- 別搞混:
- 增加處理器不會讓含有固定串行部分的工作無限加速。
指令集架構
也會看到:ISA、Instruction Set Architecture軟體與 CPU 之間約定好的命令清單與操作規則。
- 生活例子:
- 像餐廳菜單規定客人能點哪些菜,但不規定廚房內部怎麼煮。
- 別搞混:
- ISA 不是某一顆 CPU 的內部電路設計;後者叫微架構。
管線冒險
也會看到:pipeline hazard、hazard、data hazard、control hazard多條指令重疊執行時,因資料或下一步尚未確定而必須等待的情況。
- 生活例子:
- 像洗車線上前車還沒沖完,後車不能立刻進入下一站。
- 別搞混:
- pipeline 不是多顆 CPU;hazard 也不一定是程式錯誤。
暫存器
也會看到:register、CPU registerCPU 內極小但極快、用來暫放眼前資料與狀態的儲存位置。
- 生活例子:
- 像廚師手邊的小碟子,只放當下馬上要用的材料。
- 別搞混:
- 不是一般記憶體,也不是硬碟;容量小得多但速度快。
儲存程式架構
也會看到:stored-program、Von Neumann architecture、馮紐曼架構把程式指令和資料都放進記憶體,讓 CPU 依序取出並執行。
- 生活例子:
- 像把食譜步驟和食材清單都放在同一本工作手冊裡,廚師逐項讀取。
- 別搞混:
- 它是電腦的基本組織觀念,不代表所有硬體都只有一條資料通道。
以 stored-program 架構為起點,串起 CPU 組成、instruction cycle、ISA、RISC/CISC、pipeline hazard 與平行加速上限。重點是分清抽象層級,避免把韌體、作業系統、指令集與微架構混在一起。對應考古題答案均為非官方技術覆核。
先抓住這幾件事
- 說明 Von Neumann stored-program 架構的主要功能單元與 CPU 內部角色。
- 依 fetch、decode、execute、write-back 流程追蹤一條指令的執行。
- 比較 RISC 與 CISC 的設計取向,而不把名稱誤解為絕對效能排名。
- 判斷 pipeline hazard,並用 Amdahl's law 計算平行化加速上限。
先想像這個場景
自動分貨中心的一張張工作單
想像一座自動分貨中心:倉庫同時放著待處理包裹與機器看得懂的工作單,控制台依序取出工作單、判讀動作,再指揮掃描、計算或搬運站執行。若把多張工作單分散在不同站點重疊處理,整體出貨可能更快;但後一站若必須等待前一站剛產生的標籤,就不能假裝兩件事完全獨立。
先別急著往下看,花十秒想一想:
把四個處理站都加倍,整座中心就一定能在一半時間完成同一批工作嗎?先找出必須依序完成的步驟,再判斷加速上限。
把故事換成電腦語言
| 生活中的角色 | 對應到 | 技術概念 |
|---|---|---|
| 控制台依工作單選擇並協調下一個站點動作 | CPU 的 control unit 依 instruction 協調 instruction cycle 與所需執行資源 | |
| 標示下一張待取工作單位置的號碼牌 | program counter 保存下一條預計 fetch 的 instruction address | |
| 中心只接受一套明定格式與動作名稱的工作單 | ISA 是 software 可見的 hardware contract,定義 instructions、registers 與 addressing modes 等 | |
| 不同包裹同時位於讀單、貼標與裝車等不同站點 | pipeline 讓多條 instructions 重疊位於不同執行階段,以提高 throughput | |
| 後一張工作單必須等前一站剛算出的重量標籤 | 後一條 instruction 依賴尚未可用的 operand,形成 data hazard,需 forwarding 或 stall |
題目出現這些字,先想到
- 開機後先初始化硬體並交棒:BIOS/UEFI 是 firmware,不要和 CMOS 設定區或 OS kernel 混為一談。
- 下一條指令位置、取出、判讀、執行:對應 program counter 與 fetch-decode-execute。
- software 看得見的 instructions/registers 是 ISA;pipeline、cache、execution units 是 microarchitecture。
- 後一條指令等前一條結果是 data hazard;算多核心上限時,把不可平行比例放進 Amdahl's law 的 serial 部分。
1.Stored-program 與開機邊界
Von Neumann 架構是現代電腦的基本設計藍圖,其核心概念是 stored-program:指令和資料都存放在同一個可定址的記憶體中。CPU 按照 program counter(PC)指向的位址,依序從記憶體取出指令並執行。這與早期需要用實體接線或打孔卡片來改變程式行為的機器截然不同。 Von Neumann 架構的四個主要功能單元:(1) Processor(CPU)包含 control unit(控制單元,協調指令流程)和 ALU(算術邏輯單元,執行加減乘除和邏輯運算)。(2) Memory 保存待執行的指令和資料。(3) Input devices 接收外部輸入。(4) Output devices 輸出結果。CPU 內部還有 registers — 少量但極快的暫存空間,用來存放正在處理的資料和指令。 【開機流程】電源開啟後,CPU 從預設的記憶體位址開始執行韌體(firmware)。傳統 PC 使用 BIOS(Basic Input/Output System),現代系統使用 UEFI(Unified Extensible Firmware Interface)。韌體完成硬體初始化(POST = Power-On Self-Test)後,將控制權交給 boot loader(如 GRUB),boot loader 再載入作業系統 kernel。注意:BIOS/UEFI 是 firmware,CMOS 是保存 BIOS 設定的非揮發記憶體,boot loader 是載入 OS 的程式,三者角色不同。 【Harvard vs Von Neumann】Harvard 架構把指令記憶體和資料記憶體在架構層級上分離,各有獨立的匯流排,可同時存取指令和資料。現代處理器常在 L1 cache 層級使用 Harvard 式的 I-cache 和 D-cache 分離,但在 main memory 層級仍是統一定址的 Von Neumann 模型。考古題常問兩者的核心差異 — 答案聚焦在「指令與資料的記憶體/通路是否在架構模型上分離」。
- CPU 主要包含 control unit、ALU 與 registers;memory 保存待執行指令與資料。
- program counter 保存下一條預計取出的指令位置。
- BIOS/UEFI 是 firmware;CMOS/非揮發設定儲存區保存部分設定,不是執行初始化流程的韌體名稱。
- Von Neumann 與 Harvard 的核心差別之一,是指令與資料的記憶體/通路是否在架構模型上分離。
2.Instruction cycle 與時脈
CPU 的基本運作是不斷重複 instruction cycle(指令週期)。在簡化的四階段模型中,每個週期包含:(1) Fetch — 依 program counter 的位址從記憶體取出指令,同時 PC 自動遞增指向下一條指令。(2) Decode — 控制單元解讀指令的 opcode(操作碼),確定要執行什麼運算、需要哪些 operands。(3) Execute — ALU 或其他功能單元執行運算,可能包括算術計算、邏輯判斷、記憶體存取或分支跳轉。(4) Write-back — 將結果寫回 register 或 memory。 時脈(clock)提供 CPU 狀態更新的節奏。Clock frequency 以 Hz 為單位:1 MHz = 10⁶ Hz(每秒一百萬個 clock cycles),1 GHz = 10⁹ Hz(每秒十億個 clock cycles)。注意 MHz 和 GHz 差了 1000 倍 — 考古題曾出現把 3 GHz 誤標為 3 MHz 的題目。 【clock frequency ≠ 效能】更高的 clock frequency 不等於更快的程式執行。實際效能取決於多個因素:CPI(Cycles Per Instruction)— 每條指令平均需要幾個 clock cycle;IPC(Instructions Per Cycle)— 每個 cycle 平均完成幾條指令(superscalar 處理器可 > 1);cache miss 導致的等待時間;branch misprediction 造成的 pipeline flush。因此,執行時間 = 指令數 × CPI × clock cycle time。 【考試連結】題目常給出 clock frequency 和 CPI,要求計算執行時間或比較兩個 CPU 的效能。記住不能只比 GHz — 還要看 CPI 和實際完成的工作量。
- fetch 依 program counter 取得 instruction,並準備下一個位址。
- decode 判讀 opcode、operands 與所需執行資源。
- execute 可能使用 ALU、存取 memory、改變控制流程或執行 I/O 相關操作。
- MHz 是每秒百萬 cycles,GHz 是每秒十億 cycles;不能把單位差一千倍的規格視為近似。
3.ISA、RISC 與 CISC
Instruction Set Architecture(ISA)是軟體和硬體之間的契約,定義了程式設計師(或編譯器)可以使用的所有指令、registers、資料型態、addressing modes 和 exception 處理機制。ISA 是「可見」的抽象層 — 它規定了「能做什麼」,但不規定「怎麼做」(那是 microarchitecture 的事)。 兩大設計哲學: RISC(Reduced Instruction Set Computer)的設計原則:(1) 指令格式固定長度,便於 decode 和 pipeline。(2) 指令簡單,每條指令通常在一個 cycle 完成。(3) Load/Store 架構 — 只有 load 和 store 指令存取記憶體,其他運算都在 register 之間進行。(4) 大量 registers 減少記憶體存取。代表:ARM、MIPS、RISC-V。 CISC(Complex Instruction Set Computer)的設計原則:(1) 指令長度可變,功能複雜的指令可能需要多個 cycle。(2) 單條指令可以完成較複雜的工作(如 memory-to-memory 運算)。(3) 指令數量多,addressing mode 豐富。代表:x86。 【重要澄清】RISC 和 CISC 是設計取向(design philosophy),不是效能排名。RISC 不一定比 CISC 快。現代 x86 處理器內部會把 CISC 指令拆成類 RISC 的 micro-operations 再執行。較少的 assembly instructions(CISC 可能用更少行數表達同樣工作)不等於較少的 execution time — 因為每條複雜指令可能需要更多 cycles。 【考試連結】題目常列出 ISA 的特徵要你分辨 RISC/CISC,或問「以下哪個是 ISA 層級的概念」— registers、instructions 是 ISA;pipeline depth、cache size 是 microarchitecture。
- x86 通常歸為 CISC,ARM 通常歸為 RISC,但現代內部實作可能把 instructions 轉成較細的 operations。
- 較少的動態 instruction count 不必然代表較少 cycles 或較短執行時間。
- RISC/CISC 比較應同時看 instruction complexity、encoding、compiler 與 microarchitecture。
- ISA 是可見契約;pipeline depth、cache 與 execution units 屬 microarchitecture 實作。
4.Pipeline hazard 與平行加速上限
Pipeline 是提升 CPU throughput 的關鍵技術。原理類似工廠流水線:當第一條指令在 execute 階段時,第二條指令已經在 decode 階段,第三條指令正在 fetch。理想情況下,雖然每條指令仍需要經過所有階段(latency 不變),但每個 clock cycle 都能完成一條指令(throughput 提升到接近 1 IPC)。 三種 pipeline hazard(危障): (1) Data hazard:後一條指令需要前一條指令尚未產生的運算結果。例如 ADD R1,R2,R3 後緊接 SUB R4,R1,R5 — R1 的新值還沒寫回,SUB 就需要讀取。解法:Forwarding(也叫 bypass)— 直接把 ALU 輸出轉送給下一條指令,不等寫回 register file;或插入 Stall(bubble)— 暫停後續指令一個 cycle。 (2) Control hazard:遇到分支指令(如 if-else、loop)時,下一條指令的地址在 branch 結果確定前未知。解法:Branch prediction — 預測分支方向,猜對就繼續;猜錯就 flush pipeline 重來。現代處理器的 branch predictor 準確率通常超過 95%。 (3) Structural hazard:兩條指令同時需要同一個硬體資源(如同時要讀記憶體)。解法:增加硬體資源(如分離 I-cache 和 D-cache)。 【Amdahl's Law】即使有多個 processors,程式中不可平行的部分仍然限制整體加速。公式:Speedup = 1 / (p + (1-p)/n),其中 p 是不可平行比例(serial fraction),n 是 processors 數量。例如 p=0.2、n=4 時,Speedup = 1/(0.2+0.8/4) = 1/0.4 = 2.5 倍,不是 4 倍。 【考試陷阱】(1) 把 data hazard 和 cache miss 混淆 — data hazard 是指令間的資料相依,cache miss 是資料不在 cache 中。(2) 套 Amdahl's law 時把 p 誤當「可平行比例」— p 是不可平行比例。
- data hazard 來自資料相依;control hazard 常由 branch 的下一個 PC 尚未確定造成。
- stall 插入等待週期,會降低 pipeline 的有效 throughput。
- branch prediction hit 與 cache hit 通常減少等待,不是最直接造成 stall 的事件。
- 若不可平行比例為 p、processors 為 n,理想 speedup 為 1 / (p + (1-p)/n)。
一起拆題目
範例 1:簡化 CPU 依序執行 LOAD R1,[100]、ADD R3,R1,R2、STORE [104],R3。請追蹤每條指令的主要工作。
- LOAD 經 fetch/decode 後讀取位址 100,將值寫入 R1。
- ADD 讀取 R1 與 R2,交由 ALU 相加,再把結果寫入 R3。
- STORE 讀取 R3,將結果寫到記憶體位址 104。
- program counter 在每次順序 fetch 後前進;若沒有 branch,不需改成非連續目標。
所以答案是:三條指令分別完成 memory-to-register、register arithmetic、register-to-memory;control unit 協調流程,ALU 執行加法。
範例 2:在五階段 pipeline 中,I1: ADD R1,R2,R3 緊接 I2: SUB R4,R1,R5。為何 I2 可能等待?
- I2 的來源 operand 包含 R1。
- R1 是 I1 計算後才產生的結果。
- 若 I2 需要 R1 時,I1 尚未把結果送到可用位置,就形成 RAW data hazard。
- 有 forwarding 時可提早轉送結果;否則控制邏輯需插入 stall。
所以答案是:I2 依賴 I1 尚未完成的 R1,形成 read-after-write data hazard;以 forwarding 或 stall 解決。
範例 3:某程式有 20% 執行時間無法平行,其餘 80% 可平均分給 4 個 processors。理想 speedup 是多少?
- 設定不可平行比例 p=0.2,processor 數 n=4。
- 平行後正規化時間為 p+(1-p)/n。
- 代入得到 0.2+0.8/4=0.4。
- speedup 是原時間 1 除以新時間 0.4。
所以答案是:理想 speedup 為 1/0.4=2.5 倍;不是 4 倍,因為 20% serial fraction 仍存在。
範例 4:規格表把現代 CPU clock 寫成 3 MHz。若原意是 3 GHz,兩者相差多少?
- 1 MHz 等於 10^6 Hz。
- 1 GHz 等於 10^9 Hz。
- 3 GHz / 3 MHz = 10^9 / 10^6。
所以答案是:相差 1000 倍;3 GHz 是每秒 30 億 cycles,3 MHz 是每秒 300 萬 cycles。
這裡最容易選錯
- 把 BIOS/UEFI、CMOS 設定儲存區、boot loader 與 OS kernel 當成同一層。
- 認為 Von Neumann 架構把指令與資料放在不同記憶體;那更接近 Harvard 模型。
- 用 clock frequency 單獨判定整體程式效能,忽略 CPI、cache 與 pipeline。
- 把 RISC 解讀成一定比 CISC 快,或把 instruction count 直接當 execution time。
- 把 data hazard 與 branch prediction hit、cache hit 混淆。
- 套 Amdahl's law 時把 p 誤當可平行比例,導致公式兩部分對調。
換你快速判斷
先在心中作答,再展開答案。答不出來時,回頭找本課的對照關係。
1Von Neumann stored-program 架構的四個功能單元是什麼?
Processor、memory、input、output;在此模型中,指令與資料共用可定址記憶體。
CPU 內再包含 control unit、ALU 與 registers;不要把次層元件誤列成四大功能單元。
2BIOS/UEFI、設定儲存區與 OS kernel 的角色如何區分?
BIOS/UEFI 是開機韌體,負責早期硬體初始化;設定儲存區保存配置;kernel 在後續接手並提供作業系統服務。
三者位於不同啟動階段,不能因都參與開機就視為同一類軟體。
3為什麼現代 CPU 規格中的 3 MHz 很可能是單位錯誤?
現代個人電腦 CPU 時脈通常以 GHz 表示;3 GHz 是 3000 MHz,與 3 MHz 相差 1000 倍。
Clock rate 不是整體效能的唯一指標,但 MHz/GHz 的量級仍可用來排除明顯不合理的規格敘述。
4RISC 與 CISC 的典型設計取向有何差異?
RISC 傾向規則、較簡單且利於 pipeline 的 instructions;CISC 傾向更多或較複雜的 instructions,以較少指令表達工作。
這是取向而非絕對效能結論;實際效能還受 compiler、CPI 與 microarchitecture 影響。
5什麼是 pipeline data hazard?
後續指令需要的 operand 尚未由前一指令產生或變得可用,因而需要 forwarding、stall 或重新排程。
典型例子是後一條 instruction 立即讀取前一條尚未寫回的 register。
6Amdahl's law 如何表示 n 個 processors 的理想 speedup?
若不可平行比例為 p,speedup = 1 / (p + (1-p)/n)。
即使 n 持續增加,不可平行部分 p 仍構成上限;n 趨近無限時 speedup 上限為 1/p。
最後用考古題驗證
本課連結的題目都已通過可重現的技術覆核,可逐題練習與判分。
開始本課考古題練習參考來源
- Computer Science: An Overview, 13th Edition — J. Glenn Brookshear