GPU 基礎了解
GPU 歷史
請先去看影片 GPU 是怎麼被發明的?。
隨者 1960/1970 圖形化應用程式的日益成長使用,第一個最早 2D 圖形控制器晶片出現
- uPD7220 在 1981 由日本電氣公司發明,目的為了有效支援漢字
- IBM 在 1981 也推出有擴充槽的電腦 IBM 5150,可以讓使用者自己安裝獨立的顯示卡
- IBM 8514 1987 年推出,支援 1024 x 768 顯示分辨率的顯示卡
- 1991 S3 推出 86C911 2D 圖形顯示卡
3D 圖形控制器也在學校盛行
- 1981 Geometry Engine 在史丹佛大學
- 1987 Matrox SM640 第一個 3D GPU
- 1989 Sun 推出 GX Graphic 顯示卡,之後這個顯示卡的三個作者創建了 Nvidia - 他設計了第一個GPU、與黃仁勳一起創立了NVIDIA,不過在2006年就把手中的NVIDIA股票全賣光了
- 1993 SGI Reality Engine 推出專門硬體 for 3D
但上面都是 3D/2D 混合的 GPU,3dfs 在 1996 推出 Voodoo 3D 純加速晶片,遊戲玩家很愛,但就導致還要買 2D,麻煩。
之後 NV 因為支援 DirectX 協定,他的 GPU 變得熱門,到最後只剩下 NV and ATI 兩家廠商在打 GPU 市場,這兩家也是把顯示卡市場吃掉,直到最後 ATI 被 AMD 收購,現在就是 AMD vs NV。
在 2006 年,NV 推出 CUDA 讓 GPU 平行處理可以用在通用運算上面,一些科學任務可以用 CUDA API 來使用 GPU 平行運算的能力,叫做 GPGPU,
- 早期 GPU(純 graphics),固定 pipeline
- Programmable GPU(shader 時代):可寫小程式
- GPGPU 時代(CUDA 出現),CUDA / OpenCL / Vulkan compute,GPU 被當 parallel processor

GPU 本質
最早 3D 圖形工作,其實就是作
- Transform: x y z 座標轉換成螢幕 2D 座標
- Lighting: 法向量、光源、反射
- Triangle Setup: 把三個 Vertext 弄成三角形
- Rasterization: 三角形變成 Pixel
- Frame Buffer
但可能有太多點要重複作這樣的計算,CPU 幾個核心不夠,因此 1999 Geforce 256 GPU 弄成一個固定功能硬體,就是做 Transform + Lighting,過去的 3D 控制器本質上只是個「輔助晶片(Controller/Accelerator)」,它像是一個聽話的工人,CPU 把幾何頂點數據算好、點連成線後丟給它,它才負責把顏色填上去(渲染)。 而 GeForce 256 內建了硬體 T&L 引擎,它能夠自行處理複雜的幾何數學運算。因為它展現了高度獨立的運算與處理能力,地位從「輔助控制器」晉升為與中央處理器(CPU)並駕齊驅的「處理單元(Processing Unit)」。
這時是 Fixed Funciton GPU,你只能調參數,像是光照模型等。
所以 GPU 就是專注於 Memory badnwidth,裡面沒有 Cache/分支預測,就是一堆算數單元 (ALU)。
之後出現 Vertex Shader,Shader 是在 GPU 上執行的一小段程式,你可以讓多個 Vertex 都套用同樣的程式,原本是為了讓我們決定顏色。
然後又發現 Pixel 也可以用 Shader,所以可以 Rasterization -> Pixel Shader -> Color
後來發現 Vertex and Pixel Shader 都是 Matrix Math,所以直接現在 Vertex Shader Unit and Pixel Shader Unit 都變成 Shader Core。
GPU assembly
NVIDIA GPU,CUDA kernel 最終會被編譯成 GPU machine code。
- SASS(native GPU assembly)
- PTX(virtual ISA)
PTX 的存在有一個關鍵目的,把 GPU architecture 隔離開來,類似 byte code。
影片心得
看 【硬核科普】从零开始认识显卡 的心得:
圖像就是點,組成一堆三角面,然後經過貼圖、光照、著色,3D 轉成 2D(根據攝影機),最後變成我們看到的圖像。
顯卡分成透過 pin 腳供電或者透過背板供電,但要特定主板才能使用。
一個顯卡散熱模組佔了顯卡 90%,主要由熱管、均熱板、鰼片。
主要顯卡電路板上面由:
- 影片輸出介面
- PCIe 接口
- 各種 PWM 電源相關的元件,用來管理電源。
- GPU 記憶體
- 中心 GPU
- Streaming Multiprocessor,簡稱 SM,每個 SM 是「小型 CPU cluster」,裡面包含
- CUDA cores(ALU),一個 SM 裡面會有多個 CUDA Core
- warp scheduler(排程)
- register file(暫存器)
- shared memory(共享記憶體)
- L1 cache / texture cache(通常跟 shared memory 共享 SRAM)
- L2 Cache
- NVDEC 編碼器,固定功能硬體
- PCIe 控制器
- 記憶體控制器,控制像是 GDDR/HBM 等專屬於 GPU 的記憶體
- Streaming Multiprocessor,簡稱 SM,每個 SM 是「小型 CPU cluster」,裡面包含
每個 CUDA Core 可以在每個週期執行多少次 Float 運算,可以得出浮點數算力。

除了 CUDA Core 還會有 Tensor Core,專門作矩陣乘法,除了用在 AI 還會用到 DLSS 在遊戲中插增。