CPU 與 GPU 的差異:結構、擅長的運算、用途比較
CPU 是為了盡可能快速完成單一工作而設計,擁有少量強大的核心、大型快取與聰明的控制電路。GPU 則是為了同時處理大量相似的工作而設計,配備數千個簡單的運算單元,並藉由切換龐大數量的執行緒來隱藏記憶體的等待時間。CPU 適合複雜且分支多的循序處理,GPU 則適合影像處理與深度學習這類大規模的平行運算。
| 項目 | CPU | GPU |
|---|---|---|
| 設計目的 | 低延遲。盡可能快速完成單一執行緒 | 高傳輸量。整體盡可能完成最多的工作 |
| 核心數 | 數個至數百個複雜的核心 | 數千個簡單的運算單元,並分成數個群組 |
| 執行模型 | 每個核心具備推測執行(亂序執行)與分支預測,也使用 SIMD 指令 | SIMT。執行緒群組(例如 32 個)同步執行相同的指令 |
| 控制電路與快取 | 大型快取與高階控制電路佔去晶片面積的大部分 | 將大部分面積用於運算單元。每個執行緒的快取較小 |
| 隱藏記憶體延遲的方式 | 主要靠快取與預取 | 主要是從等待中的執行緒切換到其他可執行的執行緒 |
| 記憶體 | DDR 與 LPDDR。頻寬一般為數十至數百 GB/s | GDDR 與 HBM。頻寬一般為數百 GB/s 至數 TB/s |
| 分支 | 擅長處理分支與不規則的程式碼 | 若群組內的執行緒走向不同分支就會變慢(分歧,divergence) |
| 資料的存放位置 | 直接處理主記憶體 | 外接式 GPU 擁有專用記憶體,因此需要透過 PCIe 等複製資料 |
| 程式設計 | 大部分的語言與工具都能使用 | CUDA、HIP、OpenCL、著色器語言等專用模型 |
| 擅長的運算 | 作業系統、資料庫、控制邏輯、一般應用程式 | 圖形、矩陣與向量運算、深度學習、模擬 |
數值為具代表性的大致參考值,會因世代或產品而異。