本部分將深入研究典型的 GPU 架構(gòu),以揭示它的局限性以及如何將它們應(yīng)用于各種算法和工作負載。
SIMT ALU 陣列
圖 1 給出了典型的 GPU 方框圖。通用 GPU 計算功能的核心是大型的算數(shù)邏輯單元 (ALU) 或內(nèi)核陣列。這些 ALU 通常被認為是單指令多線程 (SIMT),類似于單指令多數(shù)據(jù) (SIMD)。
圖 1:GPU 方框圖
基本原理是將工作負載分成數(shù)千個并行的線程。需要大量 GPU 線程來防止 ALU 閑置。然后,對這些線程進行調(diào)度,以使 ALU 組并行執(zhí)行同一(單個)指令。利用 SIMT,GPU 廠商能實現(xiàn)相對 CPU 占位面積更小和能效更高的方案,因為內(nèi)核的很多資源都可與相同組中的其他內(nèi)核共享。
然而,顯然只是特定的工作負載(或部分工作負載)能被高效映射到這種大規(guī)模并行架構(gòu)中。如果構(gòu)成工作負載的線程不具有足夠的共性或并行性(例如連續(xù)工作負載或適度并行工作負載),則 ALU 會閑置,導致計算效率降低。此外,構(gòu)成工作負載的線程預期要最大化 ALU 利用率,從而產(chǎn)生額外的時延。即使有英偉達的 Volta 架構(gòu)中的獨立線程調(diào)度這樣的功能,底層
架構(gòu)也保持 SIMT,也需要大規(guī)模并行工作負載。
對于連續(xù)、適度并行或稀疏工作負載,GPU 提供的計算功能和效率甚至低于 CPU。例如用 GPU 實現(xiàn)稀疏矩陣計算;如果非零元素數(shù)量較少,則從性能和效率角度看 GPU 低于或等同于 CPU。有趣的是,很多研究人員正在研究稀疏卷積神經(jīng)網(wǎng)絡(luò),以利用很多卷積神經(jīng)網(wǎng)絡(luò)中的大規(guī)模冗余。這種趨勢顯然
在機器學習推斷領(lǐng)域向 GPU 提出了挑戰(zhàn)。稀疏矩陣計算也是大數(shù)據(jù)分析中的關(guān)鍵環(huán)節(jié)。
包含大量并行計算任務(wù)的大多數(shù)工作負載也包含一些連續(xù)或適度并行元素,意味著需要 GPU-CPU 混合系統(tǒng)來滿足系統(tǒng)性能要求。顯然,高端 CPU 需求會影響平臺的效率和成本效益,CPU 與 GPU 之間的通信也會給系統(tǒng)增加潛在瓶頸。
SIMT/GPU 架構(gòu)的另一個局限性是 ALU 的功能取決于它的固定指令集和所支持的數(shù)據(jù)類型。