iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
Software Development

渲染與GPU編程系列 第 2

Day 1 | GPU 與 CPU 的差異:為什麼渲染離不開 GPU?

  • 分享至 

  • xImage
  •  

Day 1|動畫電影的一切!GPU vs CPU:為什麼渲染離不開 GPU?

今天進入比較專業的語彙:從 核心數量/組織SM(Streaming Multiprocessor)SIMT記憶體階層固定功能單元,建立你對「為何渲染天然屬於 GPU」的工程直覺。


1) 核心觀念:少數強核 vs 海量並行

CPU 的設計取向

  • 少量高效能核心(一般 4–32 threads/consumer,伺服器更多),強調:

    • 分支密集與延遲敏感工作(系統、遊戲邏輯、AI、指令打包)
    • Out-of-OrderBranch Prediction、深層 L1/L2/L3 Cache
  • 適合控制流程複雜、資料依賴多的任務

GPU 的設計取向

  • 大量簡化核心,組成多個 SM(Streaming Multiprocessor)(NVIDIA 名稱;AMD 稱 CU,Intel 稱 EU 群)

  • 每個 SM 內含:

    • SIMT(Single-Instruction, Multiple-Threads)排程器
    • 成批的 ALU(俗稱 CUDA cores / shader cores)
    • Register FileShared Memory / LDSTexture/Load-Store Units
  • 適合**資料平行(Data-Parallel)吞吐量(Throughput)**導向的工作

示意圖:組織差異(簡化)

CPU: [超強核心]──大快取──[超強核心]──大快取──[超強核心]
GPU: [SM] [SM] [SM] [SM] [SM] [SM] ...(每個 SM 內含數十~上百 ALU)

CPU與GPU比較


2) SIMT 是什麼?為何對渲染剛好

GPU 不是純粹的 SIMD;實務上是 SIMT:以 Warp(NVIDIA,通常 32 threads)或 Wavefront(AMD,通常 64 threads)為單位,同步執行同一條指令流程。

渲染的像素/片段著色恰好符合這種型態:

  • 幾百萬個像素都要跑「相同的著色程式(Shader)」,但每顆像素用到的材質座標/法線/光照輸入不同 ⇒ 獨立資料 + 相同程式
  • SM 透過切換多個 warp 隱藏記憶體延遲(Latency Hiding),維持 ALU 的高利用率(Occupancy

示意圖:SM 內的排程(概念)

[ SM ]
  ├─ Warp Scheduler #1 → Warp A → ALU → 記憶體等待 → 切換 → Warp B
  ├─ Warp Scheduler #2 → Warp C → ALU → ...
  └─ Shared Mem / Registers / Texture Units

Warp 分歧(Divergence):若同一 warp 內 thread 的控制流程(if-else)不同,會序列化執行,效能下降——這也是 shader 設計要盡量避免分支發散的原因。


3) 記憶體階層:頻寬與局部性是關鍵

  • 顯存(GDDR6/HBM):極高頻寬(bandwidth),適合大量讀寫貼圖/幾何/緩衝
  • L2 Cache:全 GPU 共享
  • SM 級Shared Memory(可由程式控制的快取/ scratchpad)、Registers(檔位多、換取高吞吐)
  • Texture/Constant Cache:對取樣/廣播存取友善

示意圖:GPU 記憶體層級(簡化)

 DRAM(GDDR/HBM)
      │
    L2(全域)
  ┌───┴────┐
 [SM]    [SM] ...  →  每個 SM:Registers / Shared Mem / Texture Units

渲染的特性:貼圖取樣具空間局部性(鄰近像素多取相近座標),幫助快取命中;再加上大量並行,能有效榨乾頻寬。


4) 固定功能單元:不只可程式,還有「硬體加速段」

現代 GPU 除了可程式階段(Vertex/Fragment/Compute),還有**固定功能(Fixed-Function)**模組:

  • Rasterizer:把三角形離散化成片段(fragments)
  • Depth/Stencil 測試ROP(Render Output Unit) 混色(Blending)
  • Texture Sampler:硬體濾波、座標換算
  • RT Cores / Tensor Cores(特定廠牌/世代):光線追蹤加速、矩陣運算加速

這些模組讓渲染常見步驟「省心又省時」,直接把吞吐做滿。
cuda arch

5) 為什麼渲染離不開 GPU?

  1. 工作型態完全吻合:每像素/每片段跑相同 shader → SIMT + 多 SM 吞吐最大化
  2. 記憶體模型配合:高頻寬顯存 + 快取 + Shared Memory → 貼圖/幾何取樣效率高
  3. 固定功能協作:Raster/ROP/Sampler 帶來可觀的硬體加速
  4. 延遲隱藏:高 Occupancy 透過 warp 交替執行,掩蓋存取延遲

6) 從幀算起:粗估運算量(給直覺)

以 4K(3840×2160 ≈ 829 萬像素)、60 FPS 為例:
829 萬 × 60 ≈ 4.97 億像素/秒
每像素若進行 數十~上百次 ALU + 幾次貼圖取樣 → 數百億級指令/秒
CPU 就算單核 IPC 再高,也很難在延遲與分支條件下達到同級吞吐;GPU 以 上萬條執行緒並行 迎戰,才是正解。


7) CPU 仍是關鍵:「餵飽 GPU」的調度官

  • 場景/遊戲邏輯資源管理命令錄製(Vulkan:Command Buffer)、綁定資源(Descriptor/BindGroup)、管線切換

  • 效能常見瓶頸:

    • CPU-bound:Draw Call 過細、每幀生成/銷毀資源、同步太頻繁
    • GPU-bound:像素過多、shader 複雜、過度採樣/大量分支、記憶體訪問模式差

示意圖:簡化資料路徑

CPU(建資料/錄指令/綁定) → 提交 → GPU(多 SM 併行執行) → ROP/輸出

8) 小工具箱:判斷你卡哪邊

  • CPU-bound 指標:提交隊列空、GPU 利用率低、Command Buffer 建立時間長
  • GPU-bound 指標:片段時間高、像素相關 Pass 佔比大、CC(compute)或 FS(fragment)占滿、顯存頻寬接近極限
  • Shader 問題:Warp divergence 高、register 壓力過大導致 occupancy 降、貼圖訪問不具局部性

9) 三個常見誤解(工程澄清)

  1. 「GPU core 越多一定越快」:要看 頻寬/快取/時脈/架構/Occupancy,以及你的 workload 是否能有效並行
  2. 「SIMD=SIMT」:概念相近、實作不同;SIMT 以 thread 為抽象,warp 同步執行指令,分歧會序列化。
  3. 「片段 shader 加個 if 沒差」:warp divergence 會拖垮吞吐;盡量以遮罩/混合取代分支,或把分支搬到 tile/材質階段處理。 (在 GPU 的 SIMT 模型中,分支發生於 warp 粒度:若同一 warp 內的 thread 對 if 條件不一致,硬體以活動遮罩將 warp 分段,依序執行所有被任一 thread 採用的分支,未採用的 thread 在該段停用;之後在後支配點自動匯合。若分支在 warp 內一致,只會執行單一路徑,幾乎無額外成本。)

10) 文字示意圖

A. CPU vs GPU 組織

CPU:少數強核心 + 深快取 + 複雜控制 → 低延遲任務
GPU:多個 SM + SIMT + 高頻寬顯存     → 高吞吐任務(渲染/計算)

B. SM 內部(抽象)

[Warp Sched]─┬─ Warp0 → ALU/Load/Texture → 等待 → 切換 Warp1
              └─ Warp2 → ...
  Registers / SharedMem / Texture Units / L/S Units

C. 渲染資料流

頂點資料→頂點著色→光柵化→片段著色→測試/混色→影格
      (GPU 可程式 + 固定功能協作)

11) 立刻可做的小實驗(五分鐘得到直覺)

  1. 解析度縮放:把 4K 降為 1080p,觀察 GPU 時間大幅下降 → 像素成本主導
  2. 關閉昂貴後處理(Bloom/SSR/DoF):看片段時間如何變化 → shader/取樣成本敏感
  3. 合批/Instancing:Draw Call 下降,CPU 時間明顯改善 → CPU-bound 轉健康

12) 一句話總結

渲染是大量「同程式、不同資料」的像素級運算,最適合交給具 SM/SIMT 架構、能以高 occupancy 隱藏延遲、並由固定功能單元輔助的 GPU;CPU 的任務是把資料與命令「餵好、餵滿」,讓 GPU 盡情吞吐。


明日預告(Day 2)

往管線更細一層:從頂點到像素的旅程——頂點著色、光柵化、片段著色、深度/混色規則,一次看懂整條渲染管線。


上一篇
Day 0|開場&導讀:30 天玩透「渲染與 GPU 編程」
系列文
渲染與GPU編程2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言