領域專用架構與加速器

異質運算(heterogeneous computing)

一間運作良好的廚房不會給每個廚師同一把通用工具;它有糕點師、烤爐師、醬汁師,各有自己的工作站,主廚把每道菜分派給最擅長它的人。異質運算就是依同樣方式打造的系統:它不靠許多份相同處理器的複本,而是結合好幾種不同的處理單元——通用 CPU、偏吞吐量的 GPU,以及各種領域專用加速器——把每一塊工作送給最適合它的單元。

具體來說,「異質」是「同質」的相反,後者每個核心都一樣。異質系統混合具互補強項的處理器類型:CPU 處理序列、多分支、對延遲敏感的控制邏輯;GPU 處理大規模資料平行工作;TPU 或 NPU 處理神經網路;DSP 處理訊號流;固定功能區塊處理影音與加密。連手機的 CPU 內部都常是異質的(大效能核心加小省電核心)。一支程式跨這個混合體執行:CPU 充當指揮,執行主邏輯並把專門的核心程式(kernel)派給最能勝任各自的加速器,再收集結果。系統單晶片就是這些部件實體共處之處。

為何這如今是主流模型,以及誠實的難處:異質性之所以存在,是因為免費午餐結束了。當單核心不再自動變快、Dennard 微縮死去後,你再也無法只是等一顆更快的通用 CPU——繼續取得效率的辦法,是把每個工作負載配對到專用硬體。但為異質系統寫程式是真的難。程式設計師(或一個聰明的編譯器與執行期)必須決定什麼跑在哪裡、管理在可能有各自記憶體的單元之間搬資料、並把那些搬移的成本藏起來。一旦切分錯了,在單元間來回搬資料的開銷可能抹掉加速——異質性以大得多的軟體複雜度為代價,買來效率。

一通視訊通話同時用上整個異質系統:GPU 或固定編解碼器解碼進來的影像,NPU 跑背景模糊與抑噪的 AI,DSP 清理音訊,CPU 統籌通話並跑應用程式邏輯。沒有任何單一類型的處理器能獨力把這一切都做得又好又有效率。

不同工作交給不同處理器,由 CPU 指揮——對停滯的通用核心,這是後摩爾時代的答案。

異質性並不自動更快——它把負擔轉嫁給軟體,軟體必須切分工作並管理單元間的資料移動。搬移管理不當,通訊開銷就可能抹掉收益。

又稱
heterogeneous systemheterogeneous architecture異質系統異質架構