好酷的漆彈陣列...

好酷的漆彈陣列…

問題與答案 (FAQ)

Q&A 類別 A: 概念理解類

A-Q1: 什麼是 CPU?

  • A簡: CPU 是通用處理器,擅長低延遲、複雜控制流程與少量高性能核心的序列運算。
  • A詳: CPU(中央處理器)是電腦的通用計算核心,設計重點在低延遲、強單執行緒性能與靈活控制流程。它具備少量但強大的核心、深層快取、多級分支預測與亂序執行能力,能有效處理分支密集、資料依賴強、需要快速回應的任務,例如系統管理、邏輯判斷、互動控制與多樣化工作負載的協調。CPU 通常負責調度、串接 I/O 與將大型工作拆解,以便與 GPU 或其他加速器協作。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q2, A-Q4, B-Q4

A-Q2: 什麼是 GPU?

  • A簡: GPU 是多核心平行處理器,為高吞吐量與資料平行計算設計,特別適合繪圖與影像。
  • A詳: GPU(圖形處理器)由大量較簡單的運算單元組成,專精於同一類運算對大量資料的同時處理。其架構強調高吞吐量與資料平行(如每像素、每頂點、每樣本同類運算),常見於即時圖形渲染、影像處理、機器學習與科學計算。GPU 透過成千上萬個輕量執行緒以鎖步方式運行,並用寬記憶體頻寬與合併存取提升效能,適合可分割成獨立、規律運算的工作。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q1, A-Q4, B-Q2

A-Q3: 用漆彈陣列比喻 CPU 與 GPU 是什麼意思?

  • A簡: 一把槍像 CPU 逐點繪製;一面漆彈牆像 GPU 同步齊射,瞬間生成圖像。
  • A詳: 漆彈陣列比喻將「多發同時射擊」對應到 GPU 的資料平行,並以「一次齊射噴出蒙娜麗莎」形象化說明高吞吐量的本質。相對地,單把漆彈槍逐點噴灑則像 CPU 的序列處理:靈活但一次只能在少數位置工作。比喻重點在「同時、規模化」的差異:GPU 如同橫跨整幅畫布的發射陣列,CPU 則是靈巧但數量少的能手。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q4, A-Q6, B-Q1

A-Q4: CPU 與 GPU 的核心差異是什麼?

  • A簡: CPU 重低延遲與靈活控制;GPU 重高吞吐與大規模平行,適用工作類型不同。
  • A詳: 核心差異在於設計目標與資源配置。CPU 配備大型快取、強分支處理與複雜控制單元,善於少量工作快速完成(低延遲)。GPU 則以大量算術單元與較簡單控制邏輯換取大規模同類運算吞吐。CPU 善於序列化、分支多、資料依賴強的任務;GPU 善於資料平行、規律存取、可分割的運算,如像素著色、卷積與矩陣乘法。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q1, A-Q2, A-Q9, B-Q9

A-Q5: 為什麼 GPU 更適合繪圖?

  • A簡: 繪圖是大量相似運算的像素/頂點工作,可平行化,GPU 的強項。
  • A詳: 即時渲染將場景離散化為眾多可獨立處理的單元(頂點、像素、樣本)。每個單元套用相似的著色運算與貼圖取樣,天然適合資料平行。GPU 以成千上萬的執行緒同時處理這些單元,利用記憶體合併與快取樣本提高效率,並透過固定功能單元(光柵、測試、混合)加速常見步驟,因此能在每秒數十至數百幀的目標下,持續輸出畫面。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: B-Q5, B-Q7, B-Q6

A-Q6: 為什麼影片能「瞬間噴出蒙娜麗莎」?

  • A簡: 因為同時從多點噴射,等於對應像素矩陣一次性並行輸出。
  • A詳: 漆彈陣列每個發射點對應圖像的一個像素(或區塊)。當所有發射點在同一時間受控齊射,畫面以「一次性」方式在空間中呈現,這正是資料平行的視覺化。雖然真實 GPU 還包含取樣、混合、深度測試等步驟,但核心直覺相同:大量同質、局部獨立的計算並行執行,縮短總完成時間。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q3, B-Q1, B-Q5

A-Q7: CPU 與 GPU 的核心價值分別是什麼?

  • A簡: CPU 提供低延遲與靈活控制;GPU 提供高吞吐與規模化平行。
  • A詳: CPU 的核心價值是泛用性、快速響應與控制複雜度,能統籌系統、處理分支與不可預測流程。GPU 的核心價值是以固定資源換取極致的吞吐量,對大量同質運算提供規模化效能。兩者協同能兼顧低延遲控制(CPU)與高吞吐計算(GPU),達成如即時圖形、視覺計算與 AI 推論等任務。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q4, A-Q9, B-Q12

A-Q8: 什麼是資料平行(Data Parallelism)?

  • A簡: 對多筆資料執行相同運算,彼此獨立可同時進行的平行模式。
  • A詳: 資料平行是將資料集合分解為多個獨立元素,對每個元素套用相同的運算流程,例如每像素著色、每元素加總、每樣本卷積。只要彼此依賴低或無依賴,就能批量平行執行。GPU 的 SIMT/SIMD 機制天生對應此模式,提供可觀的加速;若資料間存在強依賴或大量分支,資料平行度會下降,效益隨之降低。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q5, A-Q11, B-Q9

A-Q9: 什麼是吞吐量(Throughput)與延遲(Latency)的差異?

  • A簡: 吞吐量是每單位時間完成量;延遲是單件完成所需時間。
  • A詳: 延遲描述完成單一任務從開始到結束的時間;吞吐量描述單位時間內完成功能的總數。CPU 最小化延遲以提升互動性與單一任務效率;GPU 最大化吞吐以提升整體輸出。兩者權衡取決於工作:互動式控制偏重低延遲,批次渲染與影像處理偏重高吞吐。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q4, B-Q16, C-Q7

A-Q10: 什麼是 SIMD 與 SIMT?

  • A簡: SIMD 同步單指令多資料;SIMT 以執行緒抽象實作類似概念。
  • A詳: SIMD(Single Instruction, Multiple Data)在硬體層以單條指令同時操作多筆資料向量。SIMT(Single Instruction, Multiple Threads)以許多邏輯執行緒為抽象,實際上仍以硬體向量/束鎖步執行。GPU 多採 SIMT 程式模型,讓開發者像寫多執行緒程式,實際由硬體合併為 SIMD 風格執行,兼顧易用與高效。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q2, B-Q13, A-Q8

A-Q11: 為什麼需要將問題拆解成可平行的工作?

  • A簡: 拆解能提高平行度,讓 GPU 或多核資源被充分利用。
  • A詳: 設計平行演算法的關鍵在識別可同時進行的子問題,減少資料依賴並規整存取模式。這使計算能映射到 GPU 的執行緒束與記憶體合併存取,提高運算與頻寬效率。若無法拆解,平行硬體無法有效發揮,反而引入同步與傳輸開銷。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q14, C-Q8, D-Q2

A-Q12: 什麼是 GPGPU?

  • A簡: 以 GPU 執行通用計算,如機器學習、科學運算與影像處理。
  • A詳: GPGPU(General-Purpose computing on GPUs)是將 GPU 的資料平行能力應用到非圖形領域。透過 CUDA、OpenCL、Metal、DirectCompute 或 WebGPU 計算著色器,將矩陣乘法、卷積、搜尋與模擬等運算映射到 GPU。成功關鍵在資料平行化、良好記憶體佈局與最小化 CPU-GPU 傳輸。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q20, C-Q2, C-Q4

A-Q13: 漆彈比喻有哪些限制或不精確之處?

  • A簡: 比喻忽略了記憶體層級、分支發散、同步與後處理等細節。
  • A詳: 漆彈齊射貼近資料平行的直覺,但簡化了真實 GPU 的關鍵:貼圖快取、記憶體合併、深度/模板測試、混合、排序、分支發散、同步與任務調度。此外,圖像品質處理(抗鋸齒、陰影、反射)與資源管理(VRAM、帶寬)也被略過。比喻適合入門理解,不可代替系統性原理認知。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: B-Q6, B-Q18, B-Q25

A-Q14: 圖形渲染的基本流程是什麼?

  • A簡: 幾何處理、光柵化、像素著色與輸出合成的管線化流程。
  • A詳: 典型即時渲染管線包括:頂點處理(變換、剔除)、組裝圖元、光柵化(將圖元離散為像素/樣本)、片段著色(計算顏色/光照/貼圖)、測試與混合(深度、模板、混色),最後寫入幀緩衝。現代 API 亦支援計算著色器與後處理,並可使用延遲渲染等技法分離幾何與光照。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q5, B-Q7, B-Q26

A-Q15: CPU 與 GPU 記憶體架構概念上的差異?

  • A簡: CPU 重快取層級深且小;GPU 重頻寬大、並行存取協同。
  • A詳: CPU 以多級快取(L1/L2/L3)與複雜一致性協議減少主記憶體延遲,適合隨機與分支密集存取。GPU 以高頻寬 VRAM、貼圖快取與共享記憶體支持大量執行緒的規律存取,並透過合併訪問減少交易。設計取向不同,對演算法資料佈局的要求也不同。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q3, C-Q5, D-Q4

A-Q16: 為什麼 CPU 對分支密集、序列性強的工作更有利?

  • A簡: CPU 具分支預測、亂序與大快取,能降低控制流與資料依賴成本。
  • A詳: 當程式包含大量 if/else、函式呼叫與資料依賴時,CPU 的分支預測、投機執行與亂序排程能隱藏延遲並保持流水線飽和。大快取與低延遲記憶體層可快速回應不規則存取。在此類情境,GPU 的鎖步執行易受分支發散與訪問不規則拖累。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q4, B-Q18, D-Q2

A-Q17: 為什麼 GPU 對大量相同運算更有效率?

  • A簡: 硬體向量化與鎖步執行讓同構運算可高度共享控制與取樣。
  • A詳: 當成千上萬筆資料需執行相同核函式時,GPU 可將控制流共享給整個執行緒束,指令重用提高前端效率;同時合併訪問與快取重用提升記憶體效率。固定功能單元(如光柵與混合)也能加速常見步驟,使整體吞吐大幅提升。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q8, B-Q2, B-Q3

A-Q18: 在教學中使用比喻有何價值?

  • A簡: 降低理解門檻、建構直覺,但需輔以精確原理避免誤解。
  • A詳: 漆彈比喻將抽象的平行概念具象化,有助於初學者建立「同時、多點、矩陣」的直覺。之後再逐步引入記憶體、分支、帶寬與管線細節,從直覺過渡到嚴謹模型。比喻是橋樑,不是終點。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q3, A-Q13, B-Q1

A-Q19: 什麼是批次處理(Batching)在繪圖中的角色?

  • A簡: 合併多物件/指令以減少驅動開銷與 CPU 瓶頸。
  • A詳: 每次 Draw Call 皆有固定開銷(驗證、狀態切換、命令提交)。批次處理透過合併網格、材質或使用 Instancing,一次繪出多實例,降低命令數量與狀態切換,將更多時間留給 GPU 執行著色與固定功能。這對 CPU 端效能與整體幀率至關重要。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q10, D-Q5, C-Q6

A-Q20: CPU 與 GPU 的能效取向有何不同?

  • A簡: CPU 為低延遲與峰值單核效率;GPU 為每瓦吞吐與並行密度。
  • A詳: GPU 將晶體管更多配置給算術單元與簡化控制邏輯,以較低電力成本取得更高的每瓦吞吐;CPU 則為快速響應與多樣工作保留複雜控制機制與大快取,單核能效高但總並行密度較低。應用選擇取決於工作負載特性與能耗限制。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q4, A-Q9, B-Q16

A-Q21: 漆彈陣列與像素矩陣的對應關係?

  • A簡: 每個發射點對應一個像素/區塊,齊射等於平行填色。
  • A詳: 可將畫布離散為 N×M 的像素矩陣;若漆彈陣列的噴嘴按相同網格排列,則每次齊射對應一次像素填充操作。密度、對準與顏料混色對應到取樣率、反鋸齒與混合。雖然簡化了貼圖、陰影與遮擋,但對平行填色的直觀對應明確。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q6, B-Q6, B-Q25

A-Q22: 為什麼說 GPU 是「專為平行而設計」?

  • A簡: 架構以大量運算單元、寬頻寬與鎖步模型最大化資料平行。
  • A詳: GPU 在微架構上優先配置 ALU 數量、運作執行緒束與寬記憶體介面,並輔以共享/貼圖快取與固定功能硬體。程式模型則鼓勵資料平行、規律訪問與批次執行,讓硬體資源能長時間保持飽和,實現高吞吐。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q2, B-Q3, B-Q16

Q&A 類別 B: 技術原理類

B-Q1: 漆彈陣列類比下的技術對應是什麼?

  • A簡: 噴嘴=執行緒/核心,齊射=同步發佈,畫布=幀緩衝。
  • A詳: 類比對應如下:每個噴嘴像一個執行緒/運算單元,控制器像命令處理器,齊射像發佈批次工作。顏料供應與導管對應記憶體/紋理取樣,畫布對應幀緩衝區,遮擋或模板對應測試/混合。雖非一一對應,但能映射「資料切分、同步齊發、結果合成」三大步驟。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q3, A-Q6, B-Q5

B-Q2: GPU 如何以執行緒束鎖步運作?

  • A簡: 多個執行緒組成束,依同一指令流鎖步執行,提升效率。
  • A詳: GPU 將大量執行緒編組成束(warp/wavefront),共享一組控制流。當束內執行緒指令一致時,前端開銷可分攤,資料路徑得以矢量化。遇分支發散時,束需序列化不同路徑,閒置部分執行緒,導致效率降低。調度器交錯多束以隱藏記憶體延遲,維持 ALU 飽和。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q10, B-Q18, D-Q2

B-Q3: GPU 的記憶體合併存取如何提升效能?

  • A簡: 將相鄰執行緒的連續訪問合併成少量大交易,放大頻寬效率。
  • A詳: 當束內執行緒訪問連續且對齊的地址,硬體可將多個小負載合併為少數寬度更大的交易,降低控制與匯流排開銷。配合貼圖快取、共享記憶體與銀行對齊,能顯著提升有效頻寬。若訪問零碎且不規則,效益大幅下降,並易引發快取抖動與銀行衝突。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q15, C-Q5, D-Q4

B-Q4: CPU 如何以快取與分支預測優化序列任務?

  • A簡: 透過預測與亂序執行維持流水線,快取降低主記憶體延遲。
  • A詳: CPU 的分支預測器嘗試猜測控制流路徑,配合投機執行與亂序排程,讓 ALU 在記憶體等待期間仍有工作;多級快取將熱資料留在近端,減少 DRAM 往返。失誤則回滾造成浪費,但對分支密集工作依舊有效。這些設計服務於低延遲與靈活控制。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q1, A-Q16, B-Q16

B-Q5: 渲染管線的執行流程為何?

  • A簡: 模型經幾何處理→光柵化→片段著色→測試混合→輸出。
  • A詳: CPU 準備命令與資源,GPU 接手:1) 頂點/幾何階段:空間變換、剔除、組裝圖元;2) 光柵化:將圖元離散為片段/樣本;3) 片段著色:計算顏色、貼圖、光照;4) 測試與混合:深度/模板、透明與混合;5) 輸出至幀緩衝。現代管線亦能插入計算著色器,或採延遲渲染分離幾何與光照。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q14, B-Q7, B-Q26

B-Q6: 光柵化與像素填充率如何影響效能?

  • A簡: 填充面積越大/多重取樣越多,像素工作量與帶寬需求越高。
  • A詳: 光柵化將圖元轉為片段,片段數量與覆蓋面積、解析度、MSAA 取樣數成正比。片段越多,著色、貼圖取樣與混合工作量增加,對記憶體帶寬與 ROP 單元壓力加大。過度填充會成為瓶頸,需要透過遮擋剔除、LOD、解析度縮放等策略緩解。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q21, B-Q25, D-Q8

B-Q7: 著色器(Shader)的角色與類型是什麼?

  • A簡: 著色器是可程式階段,常見有頂點、片段、計算等類型。
  • A詳: 著色器在可程式化管線中實現自定義運算。頂點著色器變換與準備幾何資訊;片段著色器決定像素顏色並取樣貼圖;幾何/曲面/網格著色器處理圖元生成與細分;計算著色器則泛用計算,與管線協同或獨立運作。各階段協作完成從模型到畫面的轉換。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q14, B-Q26, C-Q9

B-Q8: GPU 如何隱藏記憶體延遲?

  • A簡: 以多束交錯調度與高併發,等待時切換工作維持飽和。
  • A詳: 當束遇到長延遲(如全局記憶體),硬體調度器可快速切換至其他就緒束執行,避免 ALU 閒置。大量待命束與指令/資料預取、共享記憶體重用、合併訪問共同作用,降低可見延遲。反之,併發不足或同步過多會暴露延遲。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q2, B-Q3, D-Q8

B-Q9: 指令級並行(ILP)與資料級並行(DLP)的差異?

  • A簡: ILP 在單工作內重疊指令;DLP 對多資料同一運算齊做。
  • A詳: ILP 透過流水線、亂序與投機,使單一任務內的獨立指令並行;DLP 則將同一運算套用到多筆資料,適合 SIMD/SIMT。CPU 常依賴 ILP 提升單執行緒性能;GPU 主要依據 DLP 取得吞吐,並以少量 ILP/多束併發輔助隱藏延遲。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q4, A-Q8, A-Q10

B-Q10: GPU 如何透過命令緩衝與批次降低驅動開銷?

  • A簡: 預錄命令、合併提交,減少 CPU 驅動驗證與切換成本。
  • A詳: API 提供命令緩衝(Command Buffer/Lists),允許批量記錄狀態與 Draw/Dispatch,再一次提交至 GPU。搭配 Resource Binding 與 Descriptor 佈局,能避免頻繁變更狀態。這減輕 CPU 驅動負擔並提升幀率穩定性;Vulkan/Direct3D12 進一步將控制權交給應用,達成高效批次。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q19, C-Q6, D-Q5

B-Q11: PCIe 傳輸對異質計算的影響是什麼?

  • A簡: 主機與 GPU 間傳輸延遲/頻寬有限,過多資料往返成瓶頸。
  • A詳: 異質計算常需在 CPU 與 GPU 間交換資料。PCIe 具固定延遲與有限頻寬,會稀釋平行計算的收益。最佳實踐是最小化往返次數、增加每次批量、重用駐留於 GPU 的資料,並重疊計算與傳輸。整合記憶體或 UMA 架構可緩解,但仍需留意訪問開銷。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: C-Q8, D-Q3, A-Q9

B-Q12: CPU 多執行緒與 GPU 大量執行緒有何不同?

  • A簡: CPU 執行緒重重量級與少量併發;GPU 執行緒輕量且數量龐大。
  • A詳: CPU 執行緒包含堆疊/上下文,切換成本高,適合數十至數百併發;GPU 執行緒極輕量,以束為最小調度單位,動輒數萬併發以隱藏延遲。程式設計時,CPU 側偏任務並行,GPU 側偏資料並行,兩者分工協同最佳。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, B-Q2, C-Q8

B-Q13: SIMT 與 SIMD 的架構差異?

  • A簡: SIMT 以執行緒抽象管理鎖步;SIMD 直接向量化資料。
  • A詳: SIMD 對開發者暴露向量寄存器與指令;SIMT 提供「每執行緒」程式模型,實際在硬體以向量方式執行。SIMT 有助於可讀性與可移植,讓編譯器/硬體處理合併與發散;SIMD 適合 CPU/專用向量單元的細緻調優。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q10, B-Q2, C-Q2

B-Q14: 負載平衡如何影響 GPU 效能?

  • A簡: 讓工作均勻分配避免部分單位飽和、部分閒置。
  • A詳: 工作分割不均會造成某些束早完成、其他束尚在執行,導致 SM/核心使用率下降。可透過平均切塊、動態工作窺取、空間分割(Tiles)與工作壓縮,確保均勻度。圖形中亦可用 cluster/mesh shading 提前分配工作負載。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: D-Q8, C-Q8, B-Q26

B-Q15: 記憶體對齊、訪問模式與快取友善性?

  • A簡: 對齊與連續訪問可提升合併效率,減少銀行衝突與抖動。
  • A詳: 對齊到 bus 寬度、讓相鄰執行緒訪問相鄰元素、避免跨界與不規則 stride,是達成合併訪問的關鍵。對共享記憶體需避免同銀行多重訪問,對貼圖可利用空間/時間局部性與 Mipmap 降低帶寬壓力。設計資料結構時宜採用 SoA 以利向量化。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: C-Q5, D-Q4, B-Q3

B-Q16: 延遲隱藏與上下文切換成本差異?

  • A簡: GPU 快速切束隱藏延遲;CPU 切執行緒成本較高但靈活。
  • A詳: GPU 束切換主要在硬體排程內完成,成本極小,可頻繁交錯執行;CPU 執行緒切換涉及保存/恢復上下文,成本較高,適用於較粗粒度調度。這影響設計策略:GPU 倚賴海量併發,CPU 倚賴 ILP 與快取命中。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q9, B-Q8, B-Q12

B-Q17: Draw Call 數量如何成為 CPU 瓶頸?

  • A簡: 每次呼叫有固定開銷,數量激增會占滿 CPU 驅動時間。
  • A詳: 驅動需驗證狀態、資源相容性與記錄命令。當場景包含大量小物件且未批次,CPU 端會消耗大量時間於 API 呼叫與驗證,降低整體幀率。使用 Instancing、合批、命令緩衝是緩解之道。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q19, B-Q10, D-Q5

B-Q18: 分支發散對 GPU 的影響?

  • A簡: 束內路徑不一致導致序列化,部分執行緒閒置,吞吐下降。
  • A詳: SIMT 束共享控制流;當 if/else 在束內產生不同路徑,硬體需逐一執行各分支,非該路徑執行緒暫停,形成浪費。可用資料重排、條件運算、早期剔除與空間分割降低發散。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q16, D-Q2, C-Q8

B-Q19: 圖像卷積如何映射到 GPU?

  • A簡: 每像素平行計算,利用共享記憶體快取區域窗口。
  • A詳: 將輸入影像切分為 Tiles,每個工作群組載入邊界延伸的區域到共享記憶體,避免重複全局訪問。每執行緒計算一輸出像素,對窗口元素與核權重做乘加。注意對齊、邊界處理與避免銀行衝突,可大幅提升效能。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: C-Q2, C-Q4, C-Q5

B-Q20: GPGPU 框架的基本模型是什麼?

  • A簡: 定義 kernel、配置/傳輸資料、設定網格/工作群組、啟動執行。
  • A詳: 以 CUDA/OpenCL/Metal/WebGPU 等:1) 編寫核函式(kernel);2) 在主機端配置裝置記憶體並傳輸資料;3) 指定網格/區塊(工作群組/執行緒佈局);4) 啟動 kernel;5) 同步與結果回傳。效能取決於資料平行度、記憶體佈局與傳輸重疊。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q12, C-Q2, C-Q3

B-Q21: 圖形 API 管線的差異(OpenGL/D3D/Vulkan/WebGPU)?

  • A簡: 固定/高階易用與低階/顯式控制的權衡,影響批次與效能。
  • A詳: OpenGL/D3D11 屬高階即時狀態機,易用但驅動隱藏成本高;Vulkan/D3D12 顯式 API,需自行管理命令與同步,但可達更高效能與可預測性;WebGPU 在網頁環境提供現代顯式模型的抽象,重視安全與可移植性。選擇取決於平台與需求。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q10, C-Q6, C-Q9

B-Q22: Tile-based Rendering 的原理與優勢?

  • A簡: 以小區塊處理幀,重用快取降低頻寬與填充成本。
  • A詳: 將畫面分割為 Tiles,對每個 Tile 收集可見圖元,局部光柵與著色,盡量在片上快取內完成,最後再寫回幀緩衝。此法能降低外部記憶體帶寬,特別適用行動 GPU。需要有效的可見性判定與任務排程。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q6, D-Q8, C-Q10

B-Q23: 延遲渲染與前向渲染差異?

  • A簡: 延遲先寫幾何屬性再做光照;前向在片段階段直接光照。
  • A詳: 延遲渲染(Deferred)先輸出 G-Buffer(法線、深度、材質),再統一計算光照,適合多光源但耗帶寬;前向渲染(Forward)在片段階段直接取樣與光照,簡單且透明處理直觀。選擇取決於光源數量、帶寬與透明需求。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q5, B-Q6, B-Q26

B-Q24: 透明與混合的排序機制?

  • A簡: 不可交換混合需從後到前排序,或用近似技法。
  • A詳: 多數混合操作非交換,需依深度排序正確疊加。常用技法包括 per-object 排序、深度剔除、雙通道渲染或 OIT(Order-Independent Transparency)近似,如 weighted blended OIT。這些機制在 GPU 上以批次與緩衝策略實作。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q5, B-Q6, D-Q10

B-Q25: 抗鋸齒(MSAA/FXAA)的基本原理?

  • A簡: MSAA 多樣本平均邊界;FXAA 基於影像邊緣的後處理。
  • A詳: MSAA 在光柵階段進行多樣本覆蓋與深度測試,降低幾何邊界鋸齒,但帶寬與存儲成本較高;FXAA 在後處理階段檢測高對比邊緣並模糊平滑,成本低但可能影響細節。選擇取決於畫質與效能目標。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, C-Q9, D-Q10

B-Q26: 計算著色器如何與管線互補?

  • A簡: 計算著色器處理非圖元任務,為管線提供彈性與前處理。
  • A詳: 計算著色器擅長任務生成、可見性預計算、粒子更新、後處理與資料轉換,結果可回饋給圖形管線(如間接繪製、貼圖)。利用共享記憶體與原子操作可構建高效資料處理階段,改善負載平衡與批次。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q5, C-Q4, C-Q9

B-Q27: Amdahl 與 Gustafson 定律告訴我們什麼?

  • A簡: 可平行比例限制加速上限;擴大問題可放大效益。
  • A詳: Amdahl 定律指出串行部分限制最大加速比,強調減少不可平行區段的重要性;Gustafson 定律則說明在固定時間內擴大問題規模時,平行資源能獲得更高效用。設計時需同時縮小串行瓶頸並擴展平行工作量。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q11, C-Q8, D-Q3

B-Q28: 漆彈齊射與真實 GPU 調度有何不同?

  • A簡: 齊射是同步一次完成;GPU 會分批、交錯、依資源調度。
  • A詳: 實際 GPU 不會「一次性」完成整幀,而是依資源(緩存、帶寬、工作隊列)分配,在不同單元上並行處理不同區段,並交錯計算以隱藏延遲。漆彈齊射強調平行直覺,但忽略了動態調度與資源競爭。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q13, B-Q8, B-Q22

Q&A 類別 C: 實作應用類(10題)

C-Q1: 如何以 CPU 與 GPU 各自生成灰階蒙娜麗莎並比較時間?

  • A簡: 用 CPU 逐像素轉灰;用 GPU 平行核處理,量測兩者耗時。
  • A詳: 步驟:1) 載入圖片為 RGB 陣列;2) CPU 版本用雙層迴圈轉灰;3) GPU 以 CUDA/OpenCL kernel 對每像素做 Y=0.299R+0.587G+0.114B;4) 計時並輸出結果。CUDA 範例核:global void gray(uchar3* in, uint8_t* out,int w,int h){int i=blockIdx.xblockDim.x+threadIdx.x; if(i<wh){ uchar3 p=in[i]; out[i]=(uint8_t)(0.299p.x+0.587p.y+0.114*p.z);} } 注意對齊與批次傳輸,避免 PCIe 成瓶頸。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q5, B-Q19, C-Q2

C-Q2: 如何用 CUDA 實作像素反色濾鏡?

  • A簡: 每執行緒處理一像素,將 RGB 轉為 255-RGB 輸出。
  • A詳: 步驟:1) 配置 GPU 記憶體;2) 複製輸入像素;3) 啟動 kernel;4) 複製結果回主機。程式碼片段:global void invert(uchar3* in, uchar3* out, int n){int i=blockIdx.x*blockDim.x+threadIdx.x; if(i<n){ uchar3 p=in[i]; out[i]=make_uchar3(255-p.x,255-p.y,255-p.z);} } 設定 grid=(n+255)/256, block=256。注意記憶體對齊與 pitch,確保合併訪問。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q20, B-Q3, C-Q5

C-Q3: 如何使用 OpenCL 設定平台與執行 kernel?

  • A簡: 選平台/裝置→建立 context/queue→建 program/kernel→設參數→enqueue。
  • A詳: 步驟:1) clGetPlatformIDs/clGetDeviceIDs 選定裝置;2) clCreateContext/clCreateCommandQueueWithProperties;3) 編譯程式 clCreateProgramWithSource+clBuildProgram;4) clCreateKernel 與 clSetKernelArg;5) clEnqueueNDRangeKernel 啟動,clEnqueueReadBuffer 取回結果。注意查閱 build log,選擇合適的 NDRange 與本地工作組大小。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q20, C-Q2, D-Q9

C-Q4: 如何以計算著色器實作矩陣相乘(WebGPU/Vulkan 概念相同)?

  • A簡: 以工作群組平鋪 A/B 矩陣進共享記憶體,逐塊乘加輸出 C。
  • A詳: 步驟:1) 佈局 buffer 與 bind group;2) 編寫 compute shader:以 tile 大小(如16x16)載入 A/B 至 workgroup memory;3) 迭代 K 維度塊做乘加;4) dispatch 尺寸=ceil(N/16, M/16);5) 取回 C。WGSL 片段:var As:array<array<f32,16>,16>; 同理 Bs;同步使用 workgroupBarrier()。注意對齊、避免越界、選 tile 尺寸匹配硬體。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q20, B-Q19, C-Q5

C-Q5: 如何設計資料結構以利 GPU 合併存取(SoA vs AoS)?

  • A簡: 優先 SoA,使相鄰執行緒訪問連續欄位,提升合併效率。
  • A詳: 將 struct {float x,y,z,w;} 陣列改為四個 float 陣列(SoA),讓束內執行緒各取相鄰元素,形成對齊且連續的交易。若需 AoS,可用對齊填充與向量型別。貼圖類資料可用壓縮與 mipmap 降帶寬。測量時觀察 load/store 合併率與快取命中。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q3, B-Q15, D-Q4

C-Q6: 如何降低 Draw Call 數量(OpenGL/D3D/Vulkan)?

  • A簡: 使用 Instancing、合批網格、命令緩衝預錄,減少狀態切換。
  • A詳: 步驟:1) 合併相同材質/著色器的物件;2) 使用 glDraw*Instanced / DrawInstanced 減少呼叫次數;3) Vulkan/D3D12 預錄 Secondary Command Buffers;4) 打包資源描述(Descriptor)以降低綁定成本。注意材質切換分組、排序以最大化連續繪製。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q19, B-Q10, D-Q5

C-Q7: 如何測量 GPU 與 CPU 的吞吐與延遲?

  • A簡: 用時間戳/查詢計數器與分析器,分別量測 CPU/GPU 階段。
  • A詳: CPU:std::chrono/QueryPerformanceCounter;GPU:Timestamp Query/Timer Query、管線統計(像素、頂點)、事件同步。使用分析工具(如平台對應的圖形/計算分析器)觀察瓶頸(帶寬/ALU/ROP/驅動)。分離量測 CPU 準備與 GPU 執行,避免混淆。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q9, B-Q6, D-Q8

C-Q8: 如何將 CPU 任務改寫為資料平行以利 GPU 加速?

  • A簡: 找出可獨立元素、消除依賴、規整資料與訪問模式。
  • A詳: 步驟:1) 分析熱點與可並行區;2) 改用批次運算替代逐項 API 呼叫;3) 調整資料為 SoA、對齊且連續;4) 避免交錯分支,改用遮罩或條件運算;5) 減少往返傳輸,重用駐留資料;6) 驗證正確性與效能。逐步遷移關鍵內核至 GPU。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q11, B-Q18, B-Q11

C-Q9: 如何用最小著色器把圖片繪製到螢幕?

  • A簡: 畫全螢幕三角形/矩形,片段著色器取樣紋理輸出。
  • A詳: 步驟:1) 建立紋理載入圖片;2) 建立頂點緩衝(全屏三角形);3) 簡單頂點著色器直通(pass-through);4) 片段著色器 sampler2D 取樣;5) 設管線與狀態繪製。注意座標系、一致採樣與 sRGB 正確性。此模式常用於後處理。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: B-Q7, B-Q25, C-Q4

C-Q10: 行動裝置上如何控制 GPU 負載避免過熱/降頻?

  • A簡: 動態解析度/幀率、品質分級與平衡 CPU/GPU 工作。
  • A詳: 採用可調節渲染(動態解析度、可變幀率)、LOD、粒子/特效上限,並使用 Tile-based 優化與帶寬節省(壓縮紋理、Mipmapping)。監控溫度與功耗回饋,及時調整 Quality-of-Service。避免長時間滿負載,確保續航與穩定。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q22, B-Q6, D-Q8

Q&A 類別 D: 問題解決類(10題)

D-Q1: GPU 效能不佳的常見原因是什麼?

  • A簡: 分支發散、訪問不規則、批次不足與傳輸過多常見致因。
  • A詳: 症狀:低幀率/低吞吐。原因:資料平行度不足、分支發散、記憶體未合併、快取命中低、Draw Call 過多、CPU 驅動瓶頸、PCIe 往返頻繁。解法:重構資料/運算、批次/Instancing、共用/貼圖快取、減少往返、用分析器定位。預防:設計期導入平行友善與批次策略。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q3, B-Q10, D-Q3

D-Q2: 遇到分支發散導致吞吐下降怎麼辦?

  • A簡: 透過資料重排、遮罩運算、空間切塊降低束內路徑不一致。
  • A詳: 症狀:同一 kernel 中 if/else 導致效能驟降。原因:SIMT 序列化不同路徑。解法:1) 以預處理分群讓相似資料同束;2) 以選擇/遮罩替代分支;3) 空間切塊/自適應分割;4) 早期剔除;5) 在 CPU 預分類。預防:設計核時避免重邏輯分支。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q2, B-Q18, C-Q8

D-Q3: PCIe 資料傳輸成瓶頸如何解決?

  • A簡: 減少往返、增大批次、重疊傳輸與計算、提升資料駐留。
  • A詳: 症狀:GPU 算得快但總時間被傳輸吃掉。原因:頻繁小塊拷貝、同步等待。解法:1) 合併拷貝大批次;2) 使用非同步傳輸與雙緩衝重疊運算;3) 將資料長駐 GPU;4) 壓縮/量化資料;5) 若可用,使用零拷貝/共享記憶體。預防:設計初期規劃資料流。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q11, C-Q1, C-Q8

D-Q4: 記憶體未對齊或銀行衝突如何診斷與修正?

  • A簡: 用分析器檢視合併率/衝突,調整對齊、SoA 與訪問步幅。
  • A詳: 症狀:高延遲、低頻寬利用。原因:非對齊載入、跨界、共享記憶體同銀行競爭。解法:對齊資料、使用向量型別、改 SoA、調整 block/stride、在共享記憶體插入 padding。預防:設計時即考量對齊與訪問模式。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q3, B-Q15, C-Q5

D-Q5: Draw Call 過多導致 CPU 瓶頸怎麼辦?

  • A簡: 合批、Instancing、命令緩衝預錄並排序減少狀態切換。
  • A詳: 症狀:CPU 使用率高、GPU 閒置。原因:大量小物件獨立繪製、頻繁狀態切換。解法:1) 合批同材質物件;2) Instancing;3) 命令緩衝;4) 減少綁定變更、使用綁定表;5) 按狀態排序 Draw。預防:資產與渲染架構以批次為先。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q19, B-Q10, C-Q6

D-Q6: GPU 記憶體不足(OOM)如何處理?

  • A簡: 降低資源尺寸、壓縮、分幀處理與按需載入釋放。
  • A詳: 症狀:分配失敗/驅動錯誤。原因:貼圖/緩衝過大、暫存過多。解法:壓縮貼圖、Mipmapping、Stream/Atlas、資源重用、分階段處理、降低解析度/幀內暫存。預防:預算管理與資源池化。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, C-Q10, D-Q8

D-Q7: 結果不穩定/數值誤差大的可能原因與解法?

  • A簡: 浮點精度、順序非決定性與競態;改用更穩定算法與同步。
  • A詳: 原因:浮點累加順序不同、精度不足(FP16/FP32)、競態條件、未初始化記憶體。解法:Kahan 累加、固定歸約順序、必要處用 FP32/FP64、加入記憶體柵欄與同步、初始化資源。預防:數值分析與測試覆蓋。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q26, C-Q4, B-Q27

D-Q8: GPU 使用率高但幀率仍低的原因?

  • A簡: 填充瓶頸、帶寬受限或負載不均;需調整工作與畫面成本。
  • A詳: 原因:過度填充/高解析/大量後處理、貼圖帶寬壓力、負載平衡差、同步阻塞。解法:降解析/動態解析度、降低 MSAA、優化貼圖/採樣、使用 Tile-based、改善分配與前處理。預防:持續剖析與畫面成本預算。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, B-Q22, C-Q10

D-Q9: Shader 編譯錯誤/跨平台相容性問題怎麼辦?

  • A簡: 確認語法/版本、啟用驗證層、最小重現並使用離線編譯工具。
  • A詳: 原因:語法/版本差異、未定義行為、精度/擴展不一致。解法:統一著色器方言/目標版本、使用驗證層與反匯編檢視、在多平台離線編譯測試、隔離最小案例。預防:採用跨平台框架與 CI 測試矩陣。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: C-Q3, C-Q9, B-Q21

D-Q10: 畫面閃爍/鋸齒/缺像素(如 Z-fighting)如何處理?

  • A簡: 調整深度精度、啟用抗鋸齒、排序與 OIT 技術。
  • A詳: 原因:深度精度不足、面重疊、抗鋸齒缺失、透明排序錯誤。解法:調整近遠平面、使用反向深度/浮點深度、啟用 MSAA/FXAA、排序透明或採 OIT、避免共面幾何。預防:建模與攝影機範圍規劃,測試多解析設定。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q25, B-Q24, B-Q5

學習路徑索引

  • 初學者:建議先學習哪 15 題
    • A-Q1: 什麼是 CPU?
    • A-Q2: 什麼是 GPU?
    • A-Q3: 用漆彈陣列比喻 CPU 與 GPU 是什麼意思?
    • A-Q4: CPU 與 GPU 的核心差異是什麼?
    • A-Q5: 為什麼 GPU 更適合繪圖?
    • A-Q6: 為什麼影片能「瞬間噴出蒙娜麗莎」?
    • A-Q7: CPU 與 GPU 的核心價值分別是什麼?
    • A-Q8: 什麼是資料平行(Data Parallelism)?
    • A-Q9: 什麼是吞吐量(Throughput)與延遲(Latency)的差異?
    • A-Q13: 漆彈比喻有哪些限制或不精確之處?
    • A-Q14: 圖形渲染的基本流程是什麼?
    • A-Q21: 漆彈陣列與像素矩陣的對應關係?
    • A-Q22: 為什麼說 GPU 是「專為平行而設計」?
    • B-Q1: 漆彈陣列類比下的技術對應是什麼?
    • C-Q9: 如何用最小著色器把圖片繪製到螢幕?
  • 中級者:建議學習哪 20 題
    • B-Q2: GPU 如何以執行緒束鎖步運作?
    • B-Q3: GPU 的記憶體合併存取如何提升效能?
    • B-Q4: CPU 如何以快取與分支預測優化序列任務?
    • B-Q5: 渲染管線的執行流程為何?
    • B-Q6: 光柵化與像素填充率如何影響效能?
    • B-Q7: 著色器(Shader)的角色與類型是什麼?
    • B-Q8: GPU 如何隱藏記憶體延遲?
    • B-Q9: 指令級並行(ILP)與資料級並行(DLP)的差異?
    • B-Q11: PCIe 傳輸對異質計算的影響是什麼?
    • B-Q12: CPU 多執行緒與 GPU 大量執行緒有何不同?
    • B-Q15: 記憶體對齊、訪問模式與快取友善性?
    • B-Q17: Draw Call 數量如何成為 CPU 瓶頸?
    • B-Q18: 分支發散對 GPU 的影響?
    • B-Q20: GPGPU 框架的基本模型是什麼?
    • C-Q1: 如何以 CPU 與 GPU 各自生成灰階蒙娜麗莎並比較時間?
    • C-Q2: 如何用 CUDA 實作像素反色濾鏡?
    • C-Q5: 如何設計資料結構以利 GPU 合併存取(SoA vs AoS)?
    • C-Q7: 如何測量 GPU 與 CPU 的吞吐與延遲?
    • D-Q1: GPU 效能不佳的常見原因是什麼?
    • D-Q2: 遇到分支發散導致吞吐下降怎麼辦?
  • 高級者:建議關注哪 15 題
    • B-Q10: GPU 如何透過命令緩衝與批次降低驅動開銷?
    • B-Q21: 圖形 API 管線的差異(OpenGL/D3D/Vulkan/WebGPU)?
    • B-Q22: Tile-based Rendering 的原理與優勢?
    • B-Q23: 延遲渲染與前向渲染差異?
    • B-Q24: 透明與混合的排序機制?
    • B-Q25: 抗鋸齒(MSAA/FXAA)的基本原理?
    • B-Q26: 計算著色器如何與管線互補?
    • B-Q27: Amdahl 與 Gustafson 定律告訴我們什麼?
    • C-Q3: 如何使用 OpenCL 設定平台與執行 kernel?
    • C-Q4: 如何以計算著色器實作矩陣相乘(WebGPU/Vulkan 概念相同)?
    • C-Q6: 如何降低 Draw Call 數量(OpenGL/D3D/Vulkan)?
    • C-Q10: 行動裝置上如何控制 GPU 負載避免過熱/降頻?
    • D-Q3: PCIe 資料傳輸成瓶頸如何解決?
    • D-Q7: 結果不穩定/數值誤差大的可能原因與解法?
    • D-Q8: GPU 使用率高但幀率仍低的原因?





Facebook Pages

AI Synthesis Contents

Edit Post (Pull Request)

Post Directory