系列文章第一篇,介绍些术语,混个眼熟,让大家有点感性认识。

这是一张显卡,它包括中间的 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 原理解密(一)画个三角形居然这么难相关推荐

  1. HTML之CSS画三角形原理,使用css画三角形的方法代码

    用纯css画个三角形以下是源代码: ttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/ ...

  2. D3D11_Chili_Tutorial(2):画一个三角形

    文章目录 11:D3D初始化篇-- COM(Component Object Model) 12:D3D架构 / 交换链 13:初始化设备 14:调试层 15:智能指针 16:画一个三角形(上集) 1 ...

  3. html ul变成三角形,用CSS来画空心三角形的方法

    画这里三角形的方法: 用CSS来实现:整个弹框的ID是#favoriteOptionMenus,对于#favoriteOptionMenus这个元素设置:before和:after的样式,让:befo ...

  4. 前端怎么画三角形_css画出三角形和梯形

    用CSS画三角形 ​ 我们都知道在html中,想要画出圆形,椭圆,矩形,都很简单,但是常见的三角形,梯形如何用纯css画出却较麻烦,许多时候都是直接用三角形的图片.本文将介绍如何用纯css画出三角形和 ...

  5. 【Vulkan学习记录-基础篇-1】用Vulkan画一个三角形

    好久没有更新过博客了,上半年一直忙着找实习的事情,不过现在已经入职一段时间了,也可以抽出时间来继续整理一些内容,所以最近会尽量变得勤快一点来写博客. Vulkan是新一代的图形API,具有跨平台.高性 ...

  6. css3画一个三角形,css3 画三角形

    /*箭头向上*/ .arrow-up { width:0; height:0; border-left:20px solid transparent; border-right:20px solid ...

  7. css画一个三角形,梯形,平行四边形

    一 使用css简单的画一个三角形 1. 先来看看border的划分 .demo{width:100px;height:100px;border:3px red solid;} 2. 当盒子的宽度为0会 ...

  8. [html] 使用svg画一个三角形

    [html] 使用svg画一个三角形 效果 Screen Shot 2020-11-13 at 14 39 20 说明 svg 定义svg元素 viewBox 定义svg的画布大小,0 0 100 1 ...

  9. python画正方形内切圆_python画出三角形外接圆和内切圆的方法

    刚看了<最强大脑>中英对决,其中难度最大的项目需要选手先脑补泰森多边形,再找出完全相同的两个泰森多边形.在惊呆且感叹自身头脑愚笨的同时,不免手痒想要借助电脑弄个图出来看看,闲来无事吹吹牛也 ...

最新文章

  1. uniapp中radio颜色渐变
  2. vi格式化代码,撤销,重做,回退操作
  3. mongodb中分页显示数据集的学习
  4. c语言编写九宫格,关于九宫格的算法
  5. 8个使用JavaScript展示图片解决方案
  6. 【记录】Docker push 到dockerhub网站
  7. 设计一个扩展自抽象类geometricobject的新的triangle类_如何进行代码抽象设计?
  8. 战胜阿里和腾讯,Ripple已经获得200家跨境支付客户!
  9. VTK7.0.0编译安装心得
  10. 最好的休息,不是睡觉
  11. 社群经济:如何利用社群做营销?
  12. 在希望的田野上--生物柴油(Biodiesel)光明的未来
  13. 马尔科夫决策过程(MDP) : GridWord(DP)
  14. [转] 各大著名公司音效小评(DNSe/BBE/SRS/PlayFX/杜比/Full Sound…)
  15. 网络推销经典案例——所有的骗子都应该向他学习
  16. 资阳与“华为”携手共建资阳天府云计算中心
  17. C++——次幂运算表示
  18. 如果Iphone被偷了,能找回来吗?
  19. php九宫格图片合成,php实现微信中的图片合并-九宫格图片
  20. 51单片机printf重定向

热门文章

  1. 【机器学习】半监督学习
  2. Coursera公开课笔记: 斯坦福大学机器学习第七课“正则化(Regularization)”
  3. 深度学习的非主流应用
  4. 修改centos等linux的hostname-永久生效
  5. Linux中yum和apt-get
  6. RocketMQ:消费端的消息消息队列负载均衡与重新发布机制源码解析
  7. mysql性能优化教程_mysql性能优化教程
  8. 分布式消息技术 Kafka
  9. python 替换空格
  10. yii2手册_史上最全的技术手册整理总结,编程小白都从这篇文章迅速成为大牛...