在過去的幾十年裡,GPU 越來越受歡迎,尤其是最近 ChatGPT 大火,大模型訓練背後的硬體 GPU 已經到了難以找到的地步。
你有沒有想過為什麼你必須使用GPU?CPU 是否過時?
今天我們就來談談為什麼GPU比CPU快!
簡單地說 GPU 快或 CPU 快是不公平的。 兩者的設計理念並不相同。
CPU 被稱為計算機的"腦"它主要承擔計算的處理功能,必須依賴作業系統和應用程式等操作,CPU也決定了計算機的整體速度。
GPU的作用更加專業,它最初是為輔助3D渲染而設計的,可以同時並行更多的指令,非常適合當今更流行的工作負載,如動畫渲染、影象處理、人工智慧等。
簡單來說,CPU 針對延遲進行了優化,而 GPU 則針對頻寬進行了優化。 CPU 更擅長一次處理乙個任務,而 GPU 可以同時處理多個任務。 就像有些人擅長乙個接乙個地執行任務一樣,其他人可以同時完成多項任務。
讓我們用乙個類比,用通俗易懂的術語來解釋兩者之間的區別。 CPU 就像一輛法拉利,GPU 是一輛貨運卡車,兩者的任務是將 100 個包裹從位置 A 運送到位置 B,CPU(法拉利)可以快速獲取 RAM(貨物)中的一些記憶體資料,而 GPU(貨運卡車)執行速度較慢(延遲較高)。 但是CPU(法拉利)一次只能發貨2個包裹,完全發貨需要50次。
另一方面,GPU(貨運卡車)可以一次獲取更多記憶體資料以進行運輸。
換句話說,CPU 更傾向於快速處理少量資料(例如算術運算:567),而 GPU 更擅長處理大量重複資料(例如,矩陣運算:(ab)c)。 因此,雖然單次發貨的 CPU 時間更快,但在處理大量重複性工作負載(如影象處理、動畫渲染和深度學習)時,GPU 優勢更為顯著。
然而,GPU 最大的問題是延遲對效能的影響,但對於典型的深度學習任務場景,資料通常占用大塊連續記憶體空間,GPU 可以提供最佳的記憶體頻寬,執行緒並行性導致的延遲幾乎沒有影響。
那麼,是什麼導致 CPU 和 GPU 的工作方式不同呢?這也取決於兩者的設計結構。
以下兩張圖可以幫助我們了解 CPU 和 GPU 工作方式的差異。 正如我們上面提到的,CPU 是為順序序列處理而設計的,GPU 是為並行資料而設計的,GPU 有數百個更小、更簡單的內容,而 CPU 有幾個大而複雜的核心。
GPU 核心經過優化,可同時對多個資料元素執行類似的簡單處理操作。 此外,CPU針對順序指令處理進行了優化,這也導致了兩者在核心處理能力上的差異。
網上有乙個比喻來比較GPU和CPU核心的區別,我覺得很貼切,CPU的核心就像乙個知識淵博的教授,GPU的核心更像是一群小學生,他們只會做簡單的算術運算,但就算教授很厲害, 他不可能在一秒鐘內計算出500次加減法,所以對於簡單重複的計算,單個教授是無法與大量小學生相提並論的,而在簡單的算術運算方面,500名小學生(併發)輕鬆擊敗教授。
除了計算差異之外,GPU 還利用專用的高頻寬記憶體架構將資料傳送到所有核心,而當今的 GPU 通常使用 GDDR 或 HBM 記憶體,它們提供的頻寬比 CPU 中的標準 DDR 記憶體頻寬更大。
GPU 處理的資料被傳輸到這個專用記憶體中,以最大限度地減少平行計算期間的訪問延遲。 GPU 的記憶體是分段的,因此可以執行來自不同核心的併發訪問,以獲得最大吞吐量。
相比之下,CPU 記憶體系統針對快取資料的低延遲訪問進行了高度優化。 對總頻寬的重視程度較低,這降低了資料並行工作負載的效率。
專用核心和記憶體的組合使 GPU 能夠比 CPU 更大程度地利用資料並行性。 對於圖形、渲染等任務,同乙個著色器程式可以在多個頂點或畫素上並行執行。
現代 GPU 包含數千個核心,而高階 CPU 最多只有不到 100 個核心。 有了更多的核心,GPU可以在更寬的並行範圍內以更高的算術強度處理資料。 對於並行工作負載,GPU 核心的吞吐量可以比 CPU 高 100 倍或更多。
相比之下,阿姆達爾定律意味著 CPU 在演算法可以獲得的並行加速方面受到限制。 即使有 100 個內部核心,由於序列部分和通訊,實際速度也被限制在 10 倍或更低。 得益於其大規模並行架構,GPU 可以實現近乎完美的並行加速。
GPU 的另乙個優點是實時 (JIT) 編譯,它減少了排程並行工作負載的開銷。 GPU 驅動程式和執行時具有 JIT 編譯功能,可在執行之前將高階著色器轉換為優化的裝置指令。
這為程式設計師提供了靈活性,同時避免了 CPU 所需的傳統離線編譯步驟。 JIT 還支援基於執行時資訊的優化,從而將 GPU 開銷降低到幾乎為零。
相比之下,CPU 必須堅持使用預編譯的機器程式碼,並且不能根據執行時行為自適應地重新編譯,因此 CPU 的排程開銷更大,靈活性更低。
與 CPU 相比,GPU 還提供了更好的並行程式設計模型 CUDA,使開發人員能夠更快地編寫並行性,而不必擔心低階執行緒、同步和通訊。
CUDA 和 OpenCL 提供了 C C++ 程式語言,其中 ** 專注於跨抽象執行緒的平行計算,其中混亂的協調細節在幕後無形地處理。
相反,CPU 並行性需要使用 OpenMP 等庫來直接處理執行緒。 **在流程管理、鎖定和避免爭用條件方面存在顯著的額外複雜性。 這使得從高層次考慮並行性變得更加困難。
CPU基本上是實時響應的,單個任務的速度非常高,所以需要使用多層快取來保證單個任務的速度。
GPU傾向於使用批處理機制,即任務先排隊,然後逐個處理。
CPU擅長的作業系統等應用,需要對實時資訊做出快速響應,需要針對時延進行優化,因此在分支、亂序執行、低時延緩存等控制部分需要使用電晶體數量和能耗。
GPU 適用於具有極高可擴充套件性和大量類似操作的架構,以及高延遲和高吞吐量的架構。 目前廣泛應用於遊戲、虛擬實境和深度學習三大應用市場。
1.遊戲市場。
遊戲是最早使用 GPU 的領域之一。 由於GPU在影象處理和物理方面的天然優勢,被廣泛用於遊戲開發和遊戲渲染。 在遊戲中,GPU可以快速計算出大量的幾何體、紋理、光影等資料,從而達到更逼真的畫面效果。
第二,虛擬實境市場。
虛擬實境是一種將計算機生成的三維影象與現實世界相結合的技術。 GPU 可以在虛擬實境應用程式中實現虛擬世界的逼真渲染和物件移動的控制。 隨著虛擬實境技術的不斷發展,GPU 在虛擬實境市場中的應用越來越廣泛,尤其是在頭戴式裝置和沉浸式體驗中。
3.深度學習。
深度學習是一種基於人工神經網路的機器學習演算法。 深度學習中的 GPU 可以有效地訓練神經網路,並通過大規模平行計算加快訓練過程。 目前,隨著GPU在深度學習中的應用不斷擴大,它已成為訓練深度學習模型的主要加速器。
此外,GPU還可用於自動駕駛、醫學影像分析、金融風控等領域。 但是,由於不同應用場景對GPU效能的要求不同,因此在選擇GPU時需要考慮算力、功耗、應用領域等因素。 需要根據任務型別選擇最合適的 GPU,並對其進行優化以利用其效能。
國產GPU的發展落後於國產CPU,直到2024年4月,精佳偉才成功研發出國產首款高效能、低功耗GPU晶元——JM5400。
在國產GPU的發展中,GPU對CPU的依賴性以及GPU研發的高難度阻礙了行業的快速發展。 首先,GPU 依賴於 CPU。 GPU結構沒有控制器,必須由CPU控制才能工作,否則GPU無法單獨工作。 因此,國產CPU領先國產GPU一步,符合晶元行業發展的邏輯。
此外,GPU技術非常困難。 Moor Insights&Strategy首席分析師Mohaird曾經說過:"開發 GPU 比開發 CPU 更困難,而且 GPU 設計人員、工程師和驅動程式開發人員更少。 "國內人才缺口也是國產GPU發展緩慢的重要原因之一。
目前,雖然我國GPU晶元仍佔據很小的市場份額,但國產GPU晶元的進入者越來越多,越來越多的國產企業正在向圖形處理領域轉型,如芯動、晶佳微等,國產GPU晶元也有更好的發展機會。
現在,隨著美國一系列政策的實施,很多人看到了國產GPU晶元取代進口晶元的未來,將開始從多個角度支援國產GPU晶元企業。 根據最新統計,國產GPU公司碧辰科技、摩爾執行緒、沐溪三家公司僅獲得超過100億元的投資,可見他們確實在技術研發投入上下了很大的力氣。
目前看來,隨著美國實施更多的出口管制措施,可能是:"中國芯"這一增長創造了乙個機會之窗,這可能會給英偉達在中國市場帶來更大的競爭壓力。