---
# System prepended metadata

title: 友達課程：Accelerated Computing and CUDA（2） - 課後測驗問答集

---

# 友達課程：Accelerated Computing and CUDA（2） - 課後測驗問答集

1. 關於 Warp 的執行特性，下列敘述何者最為精確？
    - A：Warp 中的執行緒可以獨立執行完全不同的指令而不影響效能
    - B：Warp 的大小通常由軟體在 Kernel 啟動時動態決定
    - C：在 SIMT 架構下，若 Warp 內的執行緒進入不同的分支路徑（If-Else），會發生序列化執行，導致效能下降
    - D：Warp Scheduler 會在每個 Clock Cycle 強制將資料從 Global Memory 搬移到 Shared Memory

> 答案：C
> 解說：CUDA 採用 SIMT（單指令多執行緒）架構。一個 Warp（通常是 32 個 threads）共享同一個 Program Counter。如果 Warp 內的 threads 遇到分支條件不一致（Warp Divergence），硬體必須序列化執行每一條路徑，並遮罩掉不該執行的 threads，直到路徑合併，這會顯著降低效能。

2. 在 NVIDIA GPU 架構中，關於 Global Memory 存取優化的關鍵是？
    - A：儘量使用隨機存取模式以分散頻寬壓力
    - B：總是透過 CPU 進行資料預取（Prefetch）
    - C：確保 Warp 內的執行緒存取連續且對其的記憶體位址，以觸發 Coalesced Access（合併存取）
    - D：強制將所有變數宣告為 volatile 以加速讀取

> 答案：C
> 解說：Global Memory 的頻寬利用率取決於存取模式。當 Warp 內的 threads 讀取連續且對齊的記憶體區塊時，硬體能將這些請求合併成最少數量的 Transactions （合併存取），這是提升頻寬利用率的最重要手段。

3. 關於 Shared Memory（共享記憶體）的 Bank Conflict，下列何者正確？
    - A：Bank Conflict 只會發生在不同 Block 之間
    - B：增加 Register 的數量可以解決 Bank Conflict
    - C：當 Warp 內的多個執行緒試圖同時存取同一個 Bank 的不同位址時，存取會被序列化
    - D：現代 GPU 已經完全移除了 Bank 的設計，因此不再有衝突問題

> 答案：C
> 解說：Shared Memory 被劃分為多個 Banks（通常是 32 個）。若一個 Warp 內的 threads 在同一週期內存取「同一個 Bank」中的「不同位址」，硬體無法同時服務，必須排隊（序列化）處理，這就是 Bank Conflict。

4. 關於 CUDA Streams 的敘述，何者正確？
    - A：所有的 CUDA Kernel 預設都是並行執行的，不需要 Streams
    - B：不同的 Streams 之間絕對無法進行資料交換
    - C：不同 Streams 中的操作（如 Kernel 執行與 Memcpy）有機會在硬體資源允許下重疊執行（Overlap），以隱藏延遲
    - D：使用多個 Streams 會導致 GPU 核心頻率降低

> 答案：C
> 解說：CUDA Streams 是包含一系列指令的佇列。屬於不同 Streams 的指令可以亂序或並行執行。利用這一點，可以讓 Stream A 進行計算時，Stream B 進行資料傳輸（PCIe bus），達成 Compute-Copy Overlap，提升整體吞吐量。

5. 關於 Warp Divergence 的優化策略，下列何者較佳？
    - A：完全不使用任何 if-else 語句
    - B：增加 Warp 的大小至 64 或 128
    - C：盡量讓同一個 Warp 內的執行緒走相同的分支路徑，例如依照 Thread ID 進行資料分塊處理
    - D：總是使用遞迴函式來取代迴圈

> 答案：C
> 解說：分支發散無法完全避免，但可以管理。如果控制流（if 條件）是基於 Thread ID 的大區塊（例如 thread 0-31 走 true，32-63 走 false），則 Warp 內部不會發散。應避免基於隨機資料內容的分支條件。

6. NVIDIA GPU 中的 Tensor Cores 主要用途為何？
    - A：處理高精度的 128-bit 浮點數運算
    - B：專門用於處理圖形渲染的光影追蹤
    - C：專門加速矩陣乘法與累加運算（Matrix Multiply-Accumulate, MMA），特別針對深度學習的混合精度計算
    - D：用於加速 Global Memory 的資料轉移

> 答案：C
> 解說：Tensor Cores 是特定架構（Volta 以後）引入的專用運算單元，能在一個 Clock cycle 內完成 4x4 或更大的矩陣乘加運算（D = A * B + C），是現代 AI 推論與訓練的核心加速引擎。

7. 當我們談論 CUDA 的 “Latency Hiding“，主要是透過什麼機制？
    - A：透過超頻 GPU 核心時脈
    - B：使用快取預取技術
    - C：透過大量的活躍 Warps 進行快速切換（Context Switch），當一組 Warp 等待記憶體時，立即執行另一組 Warp 的運算指令
    - D：減少 Kernel 的指令總數

> 答案：C
> 解說：GPU 的設計哲學是 Throughput Oriented。它不依賴巨大的 Cache 來降低 Latency，而是依賴大量的 Threads。當 Warp A 讀取記憶體需要 500 cycles 時，Scheduler 會零成本切換到 Warp B, C, D… 執行運算，掩蓋掉那 500 cycles 的等待時間。

8. Dynamic Parallelism 指的是什麼功能？
    - A：CPU 動態調整 GPU 的時脈與電壓
    - B：在執行過程中動態改變 Block 的大小
    - C：允許 GPU 上的 Kernel 直接啟動新的 Kernel（Child Kernel），無需回傳 CPU 處理，適合遞迴或不規則負載的演算法
    - D：允許 GPU 動態配置更多的 VRAM

> 答案：C
> 解說：Dynamic Parallelism 讓 GPU 本身成為 Controller。例如在做 Octree 建構或圖形搜尋時，若某個節點資料量過大，該 thread 可以直接 launch 一個新的 grid 來處理該節點，減少與 Host 的交互往返。

9. 關於 Tiling（區塊化/分塊）技術在矩陣乘法中的應用，核心概念為何？
    - A：將矩陣切割乘小塊傳回 CPU 計算
    - B：將矩陣轉置以符合 Row-major 排列
    - C：將全域記憶體的大矩陣分塊載入到 Shared Memory，讓 Block 內的執行緒重複利用這些資料，大幅降低 Global Memory 頻寬需求
    - D：將矩陣運算轉換為稀疏矩陣運算

> 答案：C
> 解說：這是矩陣乘法優化的方法之一，在矩陣乘法中，每個元素會被多次使用，若每次都從 Global Memory 讀，頻寬會爆炸。Tiling 將子矩陣先搬到 Shared Memory，讓計算單元從高速的 Shared Memory 取值，提升 Compute-to-Memory Ratio。

10. BF16（Bfloat16）格式之所以在 AI 訓練硬體（如 Tensor Cores）中流行，相較於 FP16 的核心優勢是？
    - A：它具有更高的尾數精度（Mantissa）
    - B：它佔用的記憶體空間只有 FP16 的一半
    - C：它保留了與 FP32 相同的指數位寬（8-bit Exponent），擁有相同的動態範圍，能有效防止訓練過程中的數值溢位（Overflow/Underflow），且易於硬體轉換
    - D：它不支援負數運算

> 答案：C
> 解說：FP16 精度高但範圍窄（容易溢位）。BF16 犧牲了精度（Mantissa 變短），但把 Exponent 加寬到跟 FP32 一樣，這意味著你可以直接截斷 FP32 的尾數變成 BF16，而不需繁瑣的縮放處理，這對 Deep Learning 訓練的數值穩定性至關重要。

