GPU 原理解密(一)画个三角形居然这么难
系列文章第一篇,介紹些術語,混個眼熟,讓大家有點感性認識。
這是一張顯卡,它包括中間的 GPU(graphics processing unit)、顯存(framebuffer / FB)以及一堆小張不認識的電器元件。
這是一枚 GPU
這是 GPU 內部原理圖(芯片型號為 GM 204),這張圖里值得關注的名詞有:
- PCI Express 3.0 Host Interface
- GigaThread Engine
- GPC (Graphics Processing Cluster)
- Raster Engine
- SM (Streaming Multiprocessor)
- Memory Controller
- L2 Cache
看到這里,你一定有個疑惑
為啥搞這么復雜?在圖形應用中,每一個繪圖函數(drawcall)都可能生成數量千差萬別的三角形。能活下來的頂點和我們從應用程序中塞給 API 的不一樣的。不可見的三角形、被遮擋住的像素,種種情況影響下,有些三角形并不需要在屏幕上畫任何東西。同樣大小的一個三角形,有時候需要畫幾百個像素,有時候卻一個都不畫。
所以啊,三角形在現在的 GPU 里走的是一條邏輯上的管線(logical pipeline),而非物理上的管線。對管線的概念陌生的讀者,可以想象下富士康的手機組裝流水線。每一個車間工人,就好比 GPU 中的一個單元。車間中的管線是固定的,工人只做一件事情,保證效率。然而 GPU 中的管線是靈活的,好比前一秒在裝蘋果手機的屏幕,后一秒就去裝 VR 頭盔的傳感器了。
回到三角形身上,我們現在要畫三角形 A 和 B,它們可能位于不同的管線階段。三角形 A 已經通過坐標變換,準備好光柵化(to be rasterized)。A 的一些像素甚至正在執行像素著色器(pixel shader),另一坨卻被深度緩存(depth-buffer)拋棄了,還有些已經寫到了顯存(framebuffer),最后還有些像素在發呆(ZzzzzZzzzz)。這時,三角形 B 粉墨登場,我們還需要獲取 B 的頂點數據。你看,雖然每個三角形都需要照著套路走一場,在三角形一生的不同階段,它們要做不同事情。畫三角形這件事,分為許多微小的工作,這些工作是可以并行的。硬件單元只要空閑了,就會分到新的工作,頂點處理和像素著色會同時進行。
N 卡的架構自 Fermi 時代以來一脈相承。Giga Thread Engine管理所有進行的工作量。GPU 被劃分為多個 GPC (Graphics Processing Cluster),每個 GPC 又帶了多個 流處理器 (SM / Streaming Multiprocessor) 和一個光柵化引起(Raster Engine)。整個過程中存在大量的溝通交流,最值得一提的是 Crossbar(我也不知道怎么翻譯),它使得 GPC 上的工作和其他子系統比如 ROP (渲染輸出單元 / render output unit) 進行協作。
SM 是執行 glsl / hlsl / cuda kernel 的運算單元,放大后是這樣的:
SM 包含大量的核(Core)進行數學運算,這些核很無腦,它們以 32 個為一組,接收 Warp Schedulers 的號召,scheduler 決定了運算的邏輯,下達指令“跟著我一起揮舞左手,再揮舞右手”。32 個 Core 乖乖地做,一起揮舞左手,再揮舞右手。
但是,如果 scheduler 下達的指令是“單號的觀眾揮舞左手,雙號的觀眾揮舞右手”,事情就變得有趣了。
在單號的 Core 揮舞左手的時候,雙號的 Core 會處于發呆狀態(ZzzzzZzzzz)。
等單號的 Core 揮舞完了,雙號的 Core 才開始揮舞右手。
每個 GPU 含多少 GPC,每個 GPC 含多少 SM,這些配置取決于不可說的秘密。前面放過的 GM 204 還記得不,它有 4 個 GPC,每個 GPC 含 4 個 SM。Tegra X1 雖然同為 Maxwel 架構,僅有 1 個 GPC 和 2 個 SM。
至于 SM 的設計,包含多少的 core,多少的 scheduler 也是每代芯片都不同,確保可以滿足高端顯卡、筆記本、手機等的需求。
總結下,這篇文章簡要介紹了 GPU、GPC 和 SM,估計大家看完了依然不明白。沒事兒,我們下集見。
參考資料
https://developer.nvidia.com/content/life-triangle-nvidias-logical-pipeline
作者:Vinjn張靜
鏈接:https://zhuanlan.zhihu.com/p/20918974
來源:知乎
總結
以上是生活随笔為你收集整理的GPU 原理解密(一)画个三角形居然这么难的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《博士五年总结》及我其它过去的博客文章
- 下一篇: 2016年科技阅读列表