CPU、GPU、NPU 的差異:設計理念、運算單元、資料型態、能源效率比較
CPU 是可以執行任何工作的通用處理器,以少數複雜的核心盡快完成單一處理。GPU 以大量運算單元平行處理大量資料,廣泛用於繪圖與 AI 訓練等平行運算。NPU 是專門針對佔神經網路運算大部分的矩陣乘積累加運算的專用電路,排列大量 INT8 等低精度的運算單元,並在晶片內的記憶體中重複利用資料,以非常高的能源效率進行推論。但相對地,不擅長處理所支援以外的運算。
| 項目 | CPU | GPU | NPU |
|---|---|---|---|
| 設計理念 | 通用、低延遲。盡可能快速完成單一處理 | 高吞吐量。集中處理大量平行運算 | 專門針對神經網路運算(主要是推論),提高每瓦效能 |
| 運算單元的組成 | 數個至數百個複雜的核心。每個核心配有 SIMD 運算單元 | 數千個簡單的運算單元。許多也具備矩陣運算單元 | 大型乘積累加運算單元陣列(如脈動陣列),以及用於激活函數等的向量運算單元 |
| 控制方式 | 每道指令都進行分支預測與推測執行(亂序執行) | 切換大量執行緒以隱藏記憶體的等待時間 | 多數依照編譯器事先決定的資料流運作,逐指令的控制很少 |
| 擅長的處理 | 分支多的處理、作業系統、應用程式的邏輯 | 繪圖、AI 的訓練與推論、科學計算 | 以卷積與矩陣乘積為主的 AI 推論 |
| 記憶體 | 大型快取與 DDR 等主記憶體 | GDDR 或 HBM 等高頻寬記憶體 | 在晶片內的 SRAM 緩衝區重複利用權重與中間資料。內建於 SoC 時與 CPU 共用主記憶體 |
| 主要資料型態 | 以 FP64、FP32 與整數為主,幾乎都能處理 | 以 FP32、FP16、BF16 為主。訓練用途也有 FP8 等 | 以 INT8、INT4、FP16 等低精度為主 |
| 效能的表示方式 | 時脈頻率、核心數、IPC | FLOPS(TFLOPS 等) | TOPS(多為以 INT8 計算的理論最大值) |
| AI 推論的能源效率 | 低 | 高 | 最高。有時比 CPU 高出 1 個數量級以上 |
| 彈性 | 最高。任何程式都能執行 | 高。只要是可平行化的處理就能廣泛使用 | 低。不支援的運算會退回 CPU 或 GPU 執行 |
| 程式設計 | 一般的程式語言與編譯器 | 以 GPU 專用的平行程式設計模型撰寫核心(kernel) | 將訓練好的模型以 AI 編譯器或推論執行環境轉換後執行。很少直接撰寫程式 |
| 配置的位置 | 所有電腦 | 獨立顯示卡,或內建於 SoC | 多內建於智慧型手機或個人電腦的 SoC。也有資料中心用的專用晶片 |
數值為具代表性的大致參考值,會因世代或產品而異。