Amdahl 定律與並行主題 (Amdahl's Law & Concurrency Themes)

Overview Table

小節 主題 核心概念 一句話重點
1.9 開場 (p.58) Important Themes 系統 = 硬體 + 系統軟體 系統不只是硬體,而是交織合作的硬體與軟體集合
1.9.1 (p.58-60) Amdahl's Law S=1(1α)+α/k 只加速一部分,整體加速受限於未加速的部分
1.9.2 (p.60-62) Concurrency vs Parallelism 三層平行:thread / instruction / SIMD 並行是「多活動同時存在」,平行是「用並行讓系統更快」
1.9.3 (p.62-63) Abstractions ISA、files、virtual memory、processes、virtual machine 用抽象層隱藏實作複雜度
1.10 (p.63-64) Summary 全章總結 硬體+系統軟體合作執行應用程式

1.9.1 Amdahl's Law(p.58-60)

Gene Amdahl 的觀察:加速系統的某一部分時,對整體效能的影響同時取決於「該部分佔多重」與「加速多少」。設原始執行時間為 Told,某部分佔整體時間比例 α(0 ≤ α ≤ 1),該部分被加速 k 倍,則:

Tnew=(1α)Told+αToldk=Told[(1α)+αk]

整體加速比 (speedup) S=Told/Tnew:

(1.1)S=1(1α)+α/k

極限情形:k → ∞(Equation 1.2)

把某部分加速到耗時趨近於零 (k=),加速比仍有上限:

(1.2)S=11α
時間軸示意 (α = 0.6, 加速部分 → 0):

T_old:  |■■■■■■■■■■■■ α=0.6 ■■■■■■■■■■■■|▓▓▓▓▓ 1-α=0.4 ▓▓▓▓▓|
                    ↓ k = ∞(該段時間 → 0)
T_new:  |▓▓▓▓▓ 1-α=0.4 ▓▓▓▓▓|          ← 剩下這段砍不掉

S∞ = T_old / T_new = 1 / 0.4 = 2.5×  ← 上限(天花板)
Amdahl's Law 是通用原理

不僅適用於電腦系統加速,也適用於任何流程改善:書中舉例包括降低刮鬍刀片製造成本、提升學生 GPA(p.59)——只要「改善整體的一部分」,效果就受 α 限制。

相對效能的表達方式(Aside, p.59)

最佳表達方式是比值 Told/Tnew,有真正改善時 > 1.0,用後綴「×」表示(如 2.2× 讀作 "2.2 times")。傳統百分比表達在變化小時尚可,但定義有歧義(分母該用 Tnew 還是 Told?),且大幅變化時難以理解——「改善 120%」遠不如「2.2×」直觀。

Practice Problems 對應的計算模式(p.58-59, 解答 p.64)

給定 求解 方法
α、k S 直接代入 (1.1)
α、S k 由 (1.1) 反解 k(如 Problem 1.2:S=4、α=0.9 → 0.4 + 3.6/k = 1.0 → k = 6)
實際時間 S 直接算 Told/Tnew(卡車問題:25/(10+10) = 1.25×)
α、目標 S 局部所需速度 先求 Tnew=Told/S,扣掉不變部分,反推該段所需時間(卡車問題 B:Montana 段須 5 小時 → 300 km/hr)

1.9.2 Concurrency 與 Parallelism(p.60-62)

驅動電腦進步的兩個恆常需求:做更多 (do more)跑更快 (run faster)。兩者都靠處理器「同時做更多事」改善。

抽象層次(高 → 低)
┌─────────────────────────────────────────────┐
│ Thread-Level Concurrency    (多處理器/多執行緒) │  ← 建立在 process 抽象之上
├─────────────────────────────────────────────┤
│ Instruction-Level Parallelism (pipelining/    │  ← 每週期執行多條指令
│                               superscalar)    │
├─────────────────────────────────────────────┤
│ SIMD Parallelism            (單指令多資料)     │  ← 一條指令做多個運算
└─────────────────────────────────────────────┘

Thread-Level Concurrency(p.60-62)

建立在 process 抽象之上,多個程式同時執行;threads 更讓單一 process 內有多條控制流。自 1960 年代初 time-sharing 以來即有支援,但傳統上只是模擬的並行——單一處理器在多個行程間快速切換(如雜耍者拋接多顆球)。

Figure 1.16 處理器分類 (p.60)

              All processors
              ┌────────────────────────────┐
              │            ┌─────────────────────────┐
              │            │  Multiprocessors        │
              │ ┌────────┐ │ ┌───────┐ ┌───────────┐ │
              │ │  Uni-  │ │ │ Multi-│ │  Hyper-   │ │
              │ │processors│ │ core  │ │ threaded  │ │
              │ └────────┘ │ └───────┘ └───────────┘ │
              │            └─────────────────────────┘
              └────────────────────────────┘

Multi-core processor(Figure 1.17, p.61):多個 CPU(稱為 cores)整合在單一 IC 晶片上。每個 core 有自己的 L1 與 L2 cache,L1 又分成 i-cache(指令)與 d-cache(資料);所有 cores 共用 L3 cache 與主記憶體介面。業界預期單晶片將達數十甚至數百核。

Figure 1.17 四核處理器組織 (p.61)

Processor package
┌───────────────────────────────────────────────┐
│  Core 0                        Core 3          │
│ ┌────────────┐               ┌────────────┐    │
│ │    Regs    │               │    Regs    │    │
│ │ ┌───┐┌───┐ │      ...      │ ┌───┐┌───┐ │    │
│ │ │L1 ││L1 │ │               │ │L1 ││L1 │ │    │
│ │ │d-c││i-c│ │               │ │d-c││i-c│ │    │
│ │ └───┘└───┘ │               │ └───┘└───┘ │    │
│ │ L2 unified │               │ L2 unified │    │
│ └────────────┘               └────────────┘    │
│ ┌───────────────────────────────────────────┐ │
│ │     L3 unified cache (shared by all cores)│ │
│ └───────────────────────────────────────────┘ │
└───────────────────────┬───────────────────────┘
                        │
                 ┌──────┴──────┐
                 │ Main memory │
                 └─────────────┘

Hyperthreading(又稱 simultaneous multi-threading):讓單一 CPU 執行多條控制流。

Multiprocessing 改善效能的兩種方式(p.61-62):

  1. 減少執行多工時「模擬並行」的需要。
  2. 單一應用程式跑更快——但前提是該程式以多執行緒方式撰寫且能有效平行執行。詳見 12-Concurrent-Programming/02-Threads

Instruction-Level Parallelism(p.62)

更低的抽象層次:現代處理器可同時執行多條指令

SIMD Parallelism(p.62)

最低層次:single-instruction, multiple-data (SIMD) ——一條指令引發多個平行運算

平行層次 粒度 機制 書中章節
Thread-level 程式/執行緒 multi-core、hyperthreading Ch. 12
Instruction-level 指令 pipelining、superscalar Ch. 4、5
SIMD 資料 向量指令(一指令多運算) Ch. 5 + Web Aside

1.9.3 抽象 (Abstractions) 的重要性(p.62-63)

抽象是資訊科學最重要的概念之一。良好程式設計實務的一環是為一組函式制定簡單的 API,讓使用者不必深入內部運作;不同語言提供不同形式的抽象支援(Java class 宣告、C function prototypes)。

Figure 1.18 電腦系統提供的抽象層 (p.63)

                    Virtual machine ──────────────────────────┐
                          Processes ──────────────┐           │
   Instruction set                                │           │
     architecture ───┐        Virtual memory ──┐  │           │
                     │                         │  │  Files ─┐ │
   ┌──────────────┬──┴────────┬────────────────┴──┼─────────┴─┼──┐
   │  Operating   │ Processor │  Main memory      │ I/O devices  │
   │  system      │           │                   │              │
   └──────────────┴───────────┴───────────────────┴──────────────┘
   (抽象 → 被抽象的實體)
ISA 循序模型是抽象,不是實情

「處理器一次執行一條指令」只是 ISA 提供的假象;實際硬體以 pipelining、superscalar、out-of-order 等方式平行執行,只保證結果與循序模型一致。此落差正是 04-Processor-Architecture/05-Pipelined-PIPE-Implementation-and-Hazards05-Program-Optimization/02-Modern-Processor-Operation 的主題。


1.10 Summary(p.63-64)

第 1 章總結,對應各主題筆記:

Bibliographic Notes(p.64):Ritchie 關於 C 與 Unix 早期歷史的第一手記述;Ritchie & Thompson 的首篇 Unix 論文;Silberschatz 等人的 Unix 各流派歷史;GNU、Linux 網站與線上 Posix 標準。


Exam/Test Patterns

情境/關鍵字 答案
給 α、k 求整體 speedup S=1/[(1α)+α/k],直接代入
「加速到可忽略不計/無限快」 S=1/(1α),上限由未改善部分決定
α = 0.6、k = 3 的 speedup 1/[0.4 + 0.2] = 1.67×
α = 0.6、k = ∞ 的 speedup 1/0.4 = 2.5×
S = 4、α = 0.9,求 k 4 = 1/(0.1 + 0.9/k) → 0.4 + 3.6/k = 1 → k = 6
為何整體加速遠小於局部加速 Amdahl's Law:效果受該部分佔比 α 限制
表達效能改進的最佳方式 比值 Told/Tnew 加後綴 ×(百分比定義有歧義)
concurrency vs parallelism 區別 concurrency = 多個同時活動的一般概念;parallelism = 用 concurrency 讓系統更快
平行的三個層次(高→低) thread-level → instruction-level → SIMD
單一 OS kernel 控制多處理器 multiprocessor system
每核有 L1(i/d 分離)、L2,共用 L3 multi-core processor 組織(Figure 1.17)
CPU 逐週期切換 thread、部分硬體多份 hyperthreading(simultaneous multi-threading);複製 PC、register file,不複製浮點單元
傳統 thread 切換成本 約 20,000 clock cycles
4 核 × 每核 2 threads(Core i7) 可平行執行 8 threads
每週期持續執行 >1 條指令的處理器 superscalar processor
一條指令平行加 8 對 float SIMD parallelism
multiprocessing 讓單一程式變快的前提 程式須以可有效平行執行的多執行緒撰寫
files / virtual memory / processes / virtual machine 各抽象什麼 I/O 裝置 / 程式記憶體(主記憶體+磁碟)/ 執行中的程式 / 整台電腦(含 OS)
ISA 抽象了什麼 實際處理器硬體:呈現「一次一條指令」的循序模型
virtual machine 的提出者與年代 IBM,1960 年代
從單一系統看網路 只是另一種 I/O 裝置