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,估计大家看完了依然不明白。没事儿,我们下集见。

参考资料

developer.nvidia.com/co



作者:Vinjn张静
链接:https://zhuanlan.zhihu.com/p/20918974
来源:知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值