问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

从GPU硬件架构看渲染流水线

发布网友 发布时间:2022-11-25 17:57

我来回答

1个回答

热心网友 时间:2023-10-09 15:13

以 nVidia MaxWell 为例,分析 GPU 的硬件架构

SP 是GPU 的最小运算单元,相当于一个微型 CPU,也叫 CudaCore。

PolyMorph Engine 是用来执行固定渲染步骤的硬件,一般包括这几个成部分

线程束(warp)是 GPU 进行任务调度的基本单位,一个 warp 包含 32 个线程,也就是说 GPU 的调度,是以32个线程为单位的,即使只处理3个顶点,也会调度 32 个线程,占用 32 个 SP 进行计算,其中 29 个将会被 mask 为不可用状态

(1) 图形 API (OpenGL/DirectX/Metal) 发出DrawCall 时,指令被推送到驱动程序,对指令进行合法性检查后,指令被推送到 GPU 可以读取的 pushbuffer 中。

(2) 一段时间或显式调用 flush 指令时,驱动程序将 pushbuffer 中的指令发送给 GPU,GPU 中的主机接口 (HostInterface) 接受命令,通过 FrontEnd 进行处理。

(3) 图元分配器(Primitive Distributor) 处理 indexbuffer 中的顶点数据,产生三角形的批次,发送给多个 GPC 处理

(4) 指令到达 GPC 后,每个 SM 中 Poly Morph Engine 中的 Vertex Fetch 模块负责通过三角形索引取出三角形数据。

(5) 获取数据后,SM中的 Warp Scheler 开始以 32 个线程为一组的线程束 warp 来调度,处理顶点数据。warp 是单指令多线程(SIMT, Single Intruction Multiple Thread) 的实现,32个线程同时执行同样的指令,但是各线程的数据不一样,比如 32 个顶点同时执行顶点着色器的指令。

(6) 单个 warp 中的线程会锁步(lock step)执行指令,没有分配到数据的线程将会被打上掩码,线程不能独立调度,必须以 warp 为单位,但不同 warp 之间是独立的。

(7) 指令执行时间长短不一样,特别是内存加载比较耗时,warp 调度器可能会直接切换到另外一个没有内存等待的 warp 执行,GPU 因此能够克服内存读取延迟。warp 在寄存器堆 RegisterFile 中都有属于自己的寄存器。

(8) 当 warp 执行完了顶点着色器的指令后,运算结果会传递给 Poly Morph Engine 中的 Viewport Transform 模块进行处理,通常顶点着色器输出的是裁剪空间的坐标,Viewport Transform 对顶点进行裁剪并进行 视口变换,也就是屏幕映射,将顶点坐标变换为屏幕坐标

(9) 得到屏幕坐标后,就可以进行光栅化了,三角形被分割,分配给多个 GPC(通常按照屏幕分 Tile 进行分配),三角形的范围决定了将会被分配给哪一个 GPC 的 Raster Engine,每个 Raster Engine 覆盖了屏幕的若干 Tile。

(10) GPC 上的 Raster Engine 对三角形数据进行光栅化,得到每个三角形所覆盖的像素信息,这里通常会进行背面剔除和 early-z 剔除操作。

(11) 一个三角形的三个顶点,每一个顶点都会执行一次顶点着色器和 Viewport Transform,处理后的信息传递给 Raster Engine 进行光栅化,得到若干个片元,那么每个片元的数据(位置、颜色、法线等)是怎么得来的呢?SM 上的 Attribute Setup会根据顶点数据进行 插值得到片元数据,L1&L2 缓存用来存放这些数据以确保 片元着色器 能够进行处理。

(12) 8个 2x2 的片元块(共32个)将会被 SM 中的 Warp Scheler 分配到一个 warp 中执行片元着色器的指令。

(13) 片元着色器执行指令,完成片元颜色和深度计算,此时需要基于三角形的原始 API 提交顺序,将数据移交给渲染输出单元 ROP (Render Output Unit),一个 ROP 内部有很多 ROP 单元,ROP 单元中会处理逐片元操作如深度测试、与 FrameBuffer 中片元的混合等。

(14) ROP 拿到片元数据,通过访问 FrameBuffer 进行逐片元操作后,通过 Crossbar 将结果写入到 FrameBuffer,渲染流程结束。

GPU 中的内存分为若干类型,不同类型的内存读取速度相差比较大

Shader 中直接使用的寄存器内存速度很快,纹理和常常量内存以及全局内存的速度相对比较慢。

上述流程是 MaxWell 桌面 GPU 架构的渲染详细过程。然而移动端 GPU 的架构和桌面 GPU 是不同的。

移动端渲染流程是基于 Tile-Based 架构的,也叫 TBR(Tile-Based Render),针对一帧中的所有 DrawCall,先全部执行顶点着色器 VS,然后根据屏幕进行分块(Tile),基于 Tile 进行片元着色器(FS)的执行。

用一个例子来看。假如某一帧提交了两个DrawCall,每个DrawCall 包含了一个三角形,且两个三角形覆盖了全部屏幕。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 如何搜索每日伯笠? 张柏笠的讲道视频咋看不到 我的苹果6p怎么查序列号? 苹果6splus后面有串号吗? 80立方的船和120立方的船吃水量有多大区别 小河港吃水量 吃水量是大还是少好? 驻马店安全教育平台登录入口:https://zhumadian.xueanquan.com/ 驻马店安全教育平台登录账号及登录网址入口 商场抓好扩大销售、提升效益的切入点在哪里? 营销创新:找到正确的产品切入点 中国银行跨境GO留学分期最高额度是什么? 移动版的i7会不会是桌面版的阉割版啊?谢谢了,大神帮忙啊 酷睿i7移动处理器跟老款的4核有什么不同 我在龙井村买了一斤茶叶1500元贵吗?我是不是受骗了! 移动版的i7是什么时候推出的? 信用卡欠80万一个月利息多少 信用卡欠款80万,是多张欠还是欠一张好 欠信用卡(贷记卡)80万怎么翻身? 宋朝程德元之子是谁 steam怎么找到移动硬盘 15号交社保20号交公积金 公司甲醛超标向哪个部门投诉 培训机构甲醛超标怎么投诉 单位甲醛超标应该向什么部门投诉? 教育机构甲醛超标哪里管 公司甲醛超标怎么举报 动了下光猫突然没网了,光纤G灯闪蓝灯,宽带灯不亮,怎么回事啊求大... 荣耀30手机内部晃响是怎么回事 为什么小肠穿孔会穿孔,术后要注意什么 音响的HZ高低有区别吗? HZ音箱是什么公司生产的 隆化紫金矿业有限公司怎么样? 关于视频号的一些思考 微博有什么坏处,求具体事例!急急急、 哪些合资车是双活塞刹车的 吉世科精密涂装(深圳)有限公司电话是多少? 臭豆腐配料表有屎是真的吗 我的是新浪官方微博,登陆或者点击登陆后进入的不是主页也不是首页,而是管理中心,怎么改成默认进入主页 在qq面板怎么一打开微博就老是微频道而不是个人主页