[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

这篇具有很好参考价值的文章主要介绍了[自学记录03|百人计划]移动端GPU的TB(D)R架构基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、专有名词解释

1.System on Chip(Soc)

Soc是把CPU、GPU、内存、通信基带、GPS模块等等整合在一起的芯片的称呼。常见有A系Soc(苹果),骁龙Soc(高通),麒麟Soc(华为),联发科Soc,猎户座Soc(三星),去年苹果推出的M系Soc,暂用于Mac,但这说明手机、笔记本和PC的通用芯片已经出现了。

2.System Memory(物理内存)

Soc中GPU和CPU共用一块片内LPDDR物理内存,就是我们常说的手机内存,也叫System Memory,大概几个G。此外CPU和GPU还分别有自己的高速SRAM的Cache缓存,也叫On-chip Memory,一般几百K~几M。不同距离的内存访问存在不同的时间消耗,距离越近消耗越低,读取System Memory的时间消耗大概是On-chip Memory的几倍到几十倍。

·  Soc上GPU和CPU共享一个内存地址空间

3.On-Chip Buffer

在TB(D)R架构下会存储Tile的颜色、深度和模板缓冲,读写修改都非常快。如果Load/Store指令中缓冲需要被Preserve,将会被写入一份到System Memory中。

4.Stall

当一个GPU核心的两次计算结果之间有依赖关系而必须串行时,等待的过程便是Stall。

5.FillRate(像素填充率)

像素填充率 = ROP运行的时钟频率 x ROP的个数 x 每个时钟ROP可以处理的像素个数。


二、TB(D)R

1.什么是TB(D)R

TBR(Tile-Based (Deferred) Rendering)是目前主流的移动GPU渲染架构,对应一般PC上的GPU渲染架构则是IMR(Immediate Mode Rendering )。

TB(D)R的简单意思:屏幕被分成块(16*16像素 / 32*32像素)渲染。

2.TBR与TBDR

TBR:顶点Shader → Defer → 光栅化 → 像素Shader

TBDR:顶点Shader → Defer → 光栅化 → Defer → 像素Shader

Defer是什么?:字面是延迟的意思,但从渲染数据的角度来看,Defer就是“阻塞+批处理”GPU的“一帧”的多个数据,然后一起处理。

三、立即渲染架构(IMR)

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

出处:A look at the PowerVR graphics architecture: Tile-based rendering - Imagination ​​​​​​

可以看到,整个立即渲染架构流水线是直接和系统内存进行交互。


四、TBDR的渲染流程

1.宏观上的2个阶段:

第一阶段执行所有与几何相关的处理,并生成Primitive List(图元列表),并确定每个tile上面有哪些primitive。(分图元)

第二阶段将逐块执行光栅化及后续处理,并在完成后将Frame Buffer从Tile Buffer写回到System Memory中。(TBDR第二阶段相比传统的立即渲染架构,它并不是直接将结果写回到系统内存中,而是写到片上内存中)

2.简略示意图

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

可以看到再顶点着色器后有一个Tiler的过程,这个Tiler个过程就是把所有图元分成不同块元的过程(确定每个块元包含哪些图元)。之后进行片元处理后,先把处理后的块元先写入自己块元的内存上,之后再写入系统内存。

3.详细示意图

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

 出处:A look at the powervr graphics architecture tile based rendering

可以看到上图中有两个虚线框,其中上面的虚线框表示片上内存,下面的虚线框表示系统内存。

可以看到有一个Tilling的过程,它把我们经过顶点操作处理后的几何数据写到了系统内存上面,那么之后经过光栅化和后续的处理操作,仍然是先写入片上内存,最后进入Frame Buffer。

4.比较

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

相比于IMR架构,TB(D)R架构在几何处理和片段处理两步中增加了一个Frame data的区域,同时在最终输出时,先输出到片内存中,而不是直接输出到Frame Buffer。


5.TBR(Tile-Based (Deferred) Rendering)示意图

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

 6.GPU乱序执行:IMR和TB(D)R

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

可以看到,实际上,GPU并不会严格的按照从左到右/从上到下竟然有序的执行。

五、小结

TBR的核心目的是降低带宽,减少功耗,但渲染帧率上并不比IMR快

1.优点

(1):TBR给消除Overdraw提供了机会,PowerVR用了HSR技术,Mali用了Forward Pixel Killing技术,目标一样,就是要最大限度减少被遮挡pixel的texturing和shading。

(2):TBR主要是 缓存友好, 在缓存里头的速度要比全局内存的速度快的多,以及有可能降低帧率的代价,降低带宽,省电。

2.缺点

(1)binning过程需要在vertex阶段之后,将输出的几何数据写入到DDR,然后才被fragment shader读取(几何数据过多的管线容易在此处有性能瓶颈)。这之间也就是tile写入DDR的开销和fragment shader渲染读取DDR开销的平衡。另外还有一些操作(比如tessellation)也不适用于TBR。

(2)如果某些三角形叠加在数个图块(Overdraw),则需要绘制数次。这意味着总渲染时间将高于即时渲染模式。


六、两个重要的Defer/批处理

1.Binning过程(类似四叉树)

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

Binning过程实际上就是决定每一个图元由哪些块元来渲染的一个过程,如上图所示。

2.不同GPU的Eearly-DT

· Android平台

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础


(2)Arm Mali 

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

Arm Mali发生在early depth/early Z之后,是一个先进先出的队列。在上图左侧可以看到,该队列中已经存在了4个Quad,每个Quad可以理解为一个2x2像素的平面,它们带有一个pos信息记录它们在屏幕上的位置,其次还有Z,也就是深度,那么如图所示,当新进来的Quad和队列中已有的Quad的pos相同的时候,Z=10的被Z=0的替换掉。

·  IOS平台

(1)HSR(隐形面剔除)

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

发出一条射线,遇到的第一个不透明三角形的时候停止下来,打断后面三角形的像素着色器的处理。

七、移动端Tile Based Render的优化

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

[自学记录03|百人计划]移动端GPU的TB(D)R架构基础

 参考:

3710-移动端GPU的TB(D)R架构_哔哩哔哩_bilibili

PPT:3710-移动端GPU的TB(D)R架构(1) (qq.com)文章来源地址https://www.toymoban.com/news/detail-470714.html

到了这里,关于[自学记录03|百人计划]移动端GPU的TB(D)R架构基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自学笔记】01Java基础-08Java常用API:03日期类详解

    记录Java基础-常用API-有关时间日期的类。 1.1 什么是Date类 Date 类位于 java.util 包中,代表当前所在系统的日期时间信息或表示特定的瞬间,精确到毫秒。 这个类在早期版本的 Java 中被广泛使用,但由于其功能和设计的局限性,自Java8起,推荐使用 java.time 包中的新日期和时间

    2024年01月22日
    浏览(34)
  • FPGA自学笔记(二)仿真文件tb

    创建 simulation sources ,命名为 tb_模块名。 因为要测试一个模块,所以该模块的 input 应该在测试文件中被赋值,只有 reg 类型可以被赋值。该模块的 output 应该在测试文件中被作为连线连接到下一个模块,或者作为下一个模块的输入,所以一能改被定义为 wire 类型。 代码如下(

    2023年04月17日
    浏览(43)
  • 百人研发团队百亿销售规模的技术架构实践分享

    公司融资10亿,剥离B2B生鲜业务板块为独立公司运营。除部分核心产品经理,运营,采购角色外,诸如研发团队等重新组建,并承接部分历史系统重新打造一整套供应链平台去支撑大规模业务扩张。全国70个左右仓(包含前置仓,中转仓和实体仓),实际达到百亿业务规模(营收)

    2024年02月03日
    浏览(46)
  • CUDA基础(三)CPU架构,指令,GPU架构

    CPU中央处理器,负责执行用户和操作系统下发的指令。CPU只能接受01二进制语言,0和1用来控制高低电位。比如,一个加法运算,在x86处理器上的的二进制代码为: 01001000 00000001 11000011 这样一行代码被称为机器码,它执行了加法操作。除了这样的加法,CPU的电路还要实现很多

    2024年02月08日
    浏览(35)
  • STM32自学笔记14-步进电机驱动项目-TB67H450驱动

    目前的项目是一种2相4线步进电机的闭环驱动电路,使用的电机驱动芯片是 TB67H450 ,再使用磁编码器 MT6816 ,使用 FOC 算法,基于 STM32F1 单片机。 这一节是步进电机的驱动芯片驱动研究 首先研究驱动芯片 TB67H450 的datasheet 这是一个PWM斩波电机驱动芯片,内部框图可以看出来内

    2024年02月07日
    浏览(59)
  • 【自学记录】【Pytorch2.0深度学习从零开始学 王晓华】第四章 深度学习的理论基础

    遇到的疑问: 1、对神经网络前向计算中,关于系数矩阵W的讨论。 上一章讲到了层结构是【out,in】,所以我觉得在计算Y=WX+b的时候,W矩阵也应该是【out,in】的形状。但是该代码(或者正规代码实现流程)不是的,他是一个这样的结构: 所以,W矩阵还是【in,out】结构,a1=X1 W

    2024年04月09日
    浏览(54)
  • FPGA自学教程 03 设计一个以1秒频率闪烁的LED灯

    双非硕士 研一下学期视觉转FPGA(在b站跟小梅哥视频) 长路漫漫,但希望前途光明 此篇文章开始省去建工程的操作,如果有不懂的同学可以看我之前的两篇文章。 1.新建文件名为:led_flash,等待右侧弹出Verilog代码框。 2.计数器逻辑图如下 3.以1秒频率闪烁的LED灯的代码内容如

    2024年02月04日
    浏览(36)
  • 自学移动端(APP)自动化测试

            国庆已经过去了,新的一周已经开始了,各地疫情又开始出现复发了,我们能做的就是做好个人防护、去哪报备、到哪扫码亮码、主动做核酸、随时做好家里存储至少一周的食物,拒绝过度防疫,拒绝过度恐慌,拒绝过度焦虑。有工作的最起码还有钱能到手,没有工

    2024年02月09日
    浏览(39)
  • 【内网安全-横向移动】IPC$连接--->计划任务--->上线

    目录 一、信息收集(目标用户密码) 1、简述 1、收集信息充当字典 2、收集方法 二、横向移动 1、ipc$ 2、at命令 3、sc命令: 4、schtasks(计划任务) 三、利用示例 1、流程: 2、示例: 四、工具 1、cs插件---LSTAR - Aggressor 2、impacket-atexec 1、收集信息充当字典 1) 目标字典 :域内网

    2024年01月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包