為什么CUDA在AI領域是霸主
這是一個困擾我很久的問題。一直想去探討其中的原理和機制。所以進行一次小小的探索。
寫完就想發(fā)到B站上,還請各位大佬給我糾糾錯。都是很粗枝大葉的理解,煩請各位大佬多帶帶Orz。
概念
CUDA is a parallel computing platform and programming model created by NVIDIA. With more than 20 million downloads to date, helps developers speed up their applications by harnessing the power of GPU accelerators.
CUDA是一個并行計算的平臺和可編程的模型,其幫助開發(fā)者實現利用GPU加速計算。
CUDA編程實際上非常簡單和易用。在我的理解里,CUDA在編程意義上就是NVIDIA給的一個API,給C++加了一個頭文件可以對GPU進行調度,或者python的一個庫。

經過Chatgpt的解釋,我大概理解了GPU加速的概念。
對于一個矩陣運算,比如說最基礎的矩陣乘法,那么在其中需要的簡單運算加法和乘法是非常多的。而且這個數量會隨著矩陣的size增加而指數級增加。
GPU不同于CPU,它有著功能一般,但數量龐大的核心。應對一些復雜的操作可能夠嗆,例如CPU中需要頻繁調用和覆蓋的寄存器,然后還有各種各樣的地址運算等等。但是它剛好能夠handle矩陣這些很簡單的運算。所以對于這些計算,GPU就可以同時進行很多,對任務進行拆分。
比如說GPU有三個核心,我們進行一次3*3的矩陣乘法,那么我們可以讓GPU這三個核心分別算每一行或者每一列的結果。最后再總起來進行求和就得到計算結果。
這就是GPU加速的基本原理。
CUDA的底層技術
所有的底層GPU加速技術都差不多,AMD的ROCm其實技術特性也大差不差。
具體大概有這些:
CUDA加速的底層設計主要涉及到以下幾個方面:
GPU架構:NVIDIA的GPU架構是為高性能并行計算而設計的。它包括大量的小型處理核心,每個核心可以同時執(zhí)行多個線程。GPU架構還包括多級緩存、內存控制器和高速內存總線等組件,以支持高效的數據訪問和通信。
并行計算模型:CUDA引入了一種并行計算模型,包括線程層次結構和內存模型。線程層次結構包括線程塊和線程格的概念,可以在GPU上調度和執(zhí)行大量的并行線程。內存模型定義了不同層次的內存,如寄存器、共享內存和全局內存,以及數據在這些內存層次之間的傳輸和共享方式。
核函數和調度:CUDA通過核函數(Kernel)的概念來表示并行計算任務。核函數是在GPU上并行執(zhí)行的函數,每個線程執(zhí)行相同的指令但處理不同的數據。CUDA的運行時系統(tǒng)負責調度和執(zhí)行核函數,并將任務分發(fā)給適當數量的線程塊和線程格。
內存管理:CUDA提供了顯式的內存管理機制,開發(fā)者可以在主機和設備之間分配和傳輸數據。開發(fā)者可以使用CUDA的內存分配函數(如cudaMalloc)在設備上分配內存,并使用內存?zhèn)鬏敽瘮担ㄈ鏲udaMemcpy)在主機和設備之間復制數據。這種顯式的內存管理方式使開發(fā)者能夠更精細地控制數據的傳輸和使用,以優(yōu)化性能。
編譯和優(yōu)化:CUDA提供了編譯器和優(yōu)化器,將CUDA代碼轉換為針對GPU架構的底層指令。編譯器將CUDA代碼翻譯為中間表示(Intermediate Representation),并應用一系列優(yōu)化技術,如指令級并行、內存訪問優(yōu)化和代碼重排等,以提高計算性能和效率。
CUDA為何領先和不可替代
CUDA能有今天的占有率和領先水平,得益于CEO黃仁勛的遠見卓識和預判。

CUDA在人工智能領域的霸主地位,就如同Windows在游戲領域的成功和iPad在平板領域的成功一樣。關鍵詞就在于一個生態(tài)。
一臺M2 Ultra的Mac Pro,在真正的游戲玩家面前,吸引力可能甚至不如一臺3070的WindowsPC,而后者的價格只是前者的十分之一甚至九分之一。同樣類比,一張AMD7900XT,在AI工作者的眼里,可能不如一張3070Ti。
以下是具體領先的點:
生態(tài)系統(tǒng)和支持:CUDA擁有較為成熟和廣泛的生態(tài)系統(tǒng)和開發(fā)工具支持。NVIDIA在GPU計算領域擁有長期的領先地位,并且積極支持和推動CUDA生態(tài)系統(tǒng)的發(fā)展。CUDA提供了豐富的庫和工具,如cuDNN、cuBLAS和TensorRT等,方便開發(fā)者進行深度學習、線性代數和推理加速等任務。此外,NVIDIA還提供了包括CUDA編譯器和優(yōu)化器在內的完整的開發(fā)工具鏈,使開發(fā)者能夠更方便地進行GPU編程和性能優(yōu)化。
性能和優(yōu)化:NVIDIA的GPU架構和CUDA技術經過多年的發(fā)展和優(yōu)化,具有卓越的計算性能和優(yōu)化能力。NVIDIA的GPU架構設計著重于并行計算,在處理大規(guī)模并行任務時具有出色的性能表現。CUDA編譯器和優(yōu)化器能夠對CUDA代碼進行高效的編譯和優(yōu)化,以提高計算性能和效率。
深度學習生態(tài)系統(tǒng):在深度學習領域,NVIDIA在GPU加速的深度學習框架方面具有領先地位。NVIDIA與許多流行的深度學習框架(如TensorFlow、PyTorch和MXNet)緊密合作,提供了針對CUDA的深度學習庫和工具,使開發(fā)者能夠更輕松地利用GPU進行深度學習模型的訓練和推理。這為CUDA提供了在深度學習任務中的顯著優(yōu)勢。
CUDA未來的挑戰(zhàn)者?

根據 @林亦LYi 的說法,得益于Apple Sillicon的統(tǒng)一內存架構,蘋果有可能在AI計算領域成為NVIDIA的挑戰(zhàn)者。
畢竟直到現在,NVIDIA的顯卡也不支持自由更換顯存這個操作,而在Apple Sillicon中,顯存和內存實質上是一體的。意味著甚至是最丐版的M2芯片,理論上都可以支持8G的顯存,而M2 Ultra甚至可以支持192G的顯存。
而且統(tǒng)一內存架構帶來的更夢幻的優(yōu)點是,CPU和GPU之間的數據傳輸時間可以極大地縮短。這是完全物理上的暴打,畢竟再小的主板距離,也比不過M系列芯片這種SOC的內部距離。
也不知道蘋果是無心插柳柳成蔭呢還是早有預謀。不過個人觀點,SOC這種模式可能才更接近未來的終極計算平臺的概念。
小結
CUDA的成功又是一次先發(fā)制人和遠見卓識的勝利。
在寫這些文字的時候,不經感慨人類的發(fā)展速度。Chatgpt已經在知識領域比我強太多。