與 CPU 類似,GPU 中的數(shù)據(jù)流也由軟件定義,并取決于 GPU 的嚴(yán)格而復(fù)雜的存儲器層級。典型的 GPU 存儲器層級如圖 3 所示。
每個線程在寄存器文件中都有自己的存儲器空間,用以存儲線程的本地變量。少量線程(相同的存儲塊中)可通過共享存儲器通信;所有線程都能通過全局或片外存儲器通信。
如圖 3 所示,與存儲器訪問有關(guān)的能耗和時延分別增加 100 倍和 80 倍以上,因為數(shù)據(jù)需要遍歷存儲器層級——從寄存器文件到全局存儲器。此外,存儲器沖突不可避免,會增大時延,導(dǎo)致 ALU 閑置,致使計算能力和效率降低。
圖 3:典型的 GPU 存儲器層級
因此,如果實現(xiàn) GPU 的計算和效率潛能,工作負(fù)載的數(shù)據(jù)流必須準(zhǔn)確映射到 GPU 存儲器層級。工作負(fù)載要具備足夠的數(shù)據(jù)局部性,才能高效地映射到 GPU,實際上這樣的工作負(fù)載很少。對大多數(shù)工作負(fù)載而言,當(dāng)在 GPU 上實現(xiàn)時,實際的計算能力和效率會大打折扣,解決方案的時延也會增加。
機(jī)器學(xué)習(xí)推斷作為量化實例,能清楚反應(yīng)出這種數(shù)據(jù)流局限性。GPU 必須批處理,例如 128,以實現(xiàn)高效但時延更長的解決方案。最終,批處理使機(jī)器學(xué)習(xí)處理局部化,但代價是時延增加。GoogLeNet v1 Inference 的 NVidia P40 基準(zhǔn)測試結(jié)果可清楚地反映出該效應(yīng)。對于 GoogLeNet v1,網(wǎng)絡(luò)因 P40 存儲器帶寬而受計算束縛,因此與批處理有關(guān)的存儲器帶寬削減不會產(chǎn)生很大幫助。然而,P40 顯然需要 128 批處理以實現(xiàn) 50% 的 GPU 理論性能,會給系統(tǒng)帶來很大時延。
有些情況下,可利用 CPU 對數(shù)據(jù)進(jìn)行預(yù)處理,以便工作負(fù)載更好地映射到 GPU SIMT 架構(gòu)和存儲器層級,但代價是產(chǎn)生更多 CPU 計算和功耗,抵消了 GPU 的優(yōu)勢。
有限的 I/O 選項
如“GPU 起源和目標(biāo)工作負(fù)載”部分所述,GPU 的角色是作為協(xié)處理器。為了便于與主機(jī)通信,GPU 以往只有一個硬 PCIe® 接口以及幾個片外 DRAM 接口(例如 GDDR5)。最近幾代產(chǎn)品中,有些 GPU 采用硬接口實現(xiàn) GPU 到 GPU 通信。仍然需要使用 CPU 來與網(wǎng)絡(luò)進(jìn)行連接以及向 GPU 分配任務(wù),這會增加系統(tǒng)功耗,同時會因 PCIe 的有限帶寬而帶來瓶頸問題。例如,英偉達(dá)的 Tesla P40 支持 PCIe 3.0 x16,只能實現(xiàn) 16GB/s 帶寬。
GPU 廠商已經(jīng)開始構(gòu)建小型 SoC,例如 NVidia Tegra X1,能夠提供集成 GPU 計算、ARM® 處理器以及一些通用汽車外設(shè)(如 HDMI、MIPI、SIP、CAN 和基礎(chǔ)以太網(wǎng))。這些器件只具備少量計算能力,必須依靠額外的分立 GPU 實現(xiàn)必要的計算能力。然而,分立 GPU 的接口有很大局限性,例如 Tegra X1 僅支持 PCIe 2.0 x4,造成嚴(yán)重瓶頸。額外的 SoC 的功耗會進(jìn)一步降低平臺的效率。
片上存儲器資源
除了時延、效率和吞吐量方面的不利影響,片外存儲器的帶寬要顯著低于本地/片上存儲器。因此,如果工作負(fù)載需要依靠片外存儲器,不僅片外存儲器的帶寬會成為瓶頸,而且計算資源也會被閑置,從而降低 GPU 提供的計算功能和效率。
因此,更有利的做法是采用大型低時遲、高帶寬片上存儲器。再次以機(jī)器學(xué)習(xí)推斷為例,GoogLeNet 共需要 27.2MB 的存儲器,假設(shè) FP32 方案,這樣沒能提供 GPU,這意味著需要片外存儲器。很多情況下需采用高昂的高帶寬存儲器 (HBM) 和批處理,以防止內(nèi)核閑置。如果選擇具有更大型片上存儲器的器件,就能避免 HBM 成本以及額外的時延和功耗問題。
功耗范圍
GPU 廠商在設(shè)計板卡和 GPU 時通常要適應(yīng) 250W 功耗上限,并依靠有效熱管理來調(diào)節(jié)溫度。針對機(jī)器學(xué)習(xí)推斷市場,英偉達(dá)開發(fā)了滿足 75W 功耗范圍的器件,例如 Tesla M4 和 P4。即使 75W 也遠(yuǎn)超出所允許的系統(tǒng)級功耗和熱范圍。 GPU 的絕對功耗依然是阻礙 GPU 廣泛使用的一大因素。
功能安全性
GPU 源自消費圖形處理和高性能計算領(lǐng)域,不存在功能安全性要求。隨著 GPU 廠商瞄準(zhǔn) ADAS 市場,功能安全性就變成了優(yōu)先考慮和要求。器件需要全新設(shè)計,以確保實現(xiàn)所需的功能安全性認(rèn)證等級,以便用在 ADAS 系統(tǒng)中。對 GPU 廠商來說這是一個長期學(xué)習(xí)過程,涉及各個方面,需要新的工具和設(shè)備。