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

news2024/11/27 6:15:03

一、专有名词解释

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)

出处: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.简略示意图

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

3.详细示意图

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

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

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

4.比较

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


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

 6.GPU乱序执行:IMR和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过程(类似四叉树)

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

2.不同GPU的Eearly-DT

· Android平台


(2)Arm Mali 

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

·  IOS平台

(1)HSR(隐形面剔除)

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

七、移动端Tile Based Render的优化

 参考:

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

PPT:3710-移动端GPU的TB(D)R架构(1) (qq.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【人工智能】— 监督学习、分类问题、决策树、信息增益

【人工智能】— 监督学习、分类问题、决策树、线性分类器、K近邻、回归问题、交叉验证 监督学习 - 正式设置符号表示假设选择学习目标预测 分类Decision Trees 决策树建立决策树分类模型的流程如何建立决策树? 决策树学习表达能力决策树学习信息论在决策树学习中的应用特征选择…

Koa学习2:路由与数据库连接

路由 安装 npm i koa-router基本功能 定义路由:koa-router提供了一种简单的方式来定义路由,我们可以根据请求的方法和路径来定义不同的路由。 处理请求:koa-router可以帮助我们处理请求,当请求匹配到对应的路由时,k…

人工智能轨道交通行业周刊-第47期(2023.5.29-6.4)

本期关键词:郑州智慧地铁、货运安全监控、激光炮、6C系统、越行站、ChatGPT原理 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨…

SparkSQL文件格式和压缩算法是否支持Split

大数据支持Split的目的是为了能并行处理任务,可以将文件拆分成多个文件块处理。如果不支持Split的话,只能用一个任务处理单个文件。 能否支持Split受到文件格式和压缩算法的双重限制,大部分文件的读取都是可以支持Split,极少数压缩…

每日学术速递5.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Custom-Edit: Text-Guided Image Editing with Customized Diffusion Models(CVPR 2023) 标题:自定义编辑:使用自定义扩散模型进行文本引导图像编辑 作者&a…

部署rabbitmq3.10.6详细步骤

RabbitMQ简介 RabbitMQ是Erlang开发的,集群非常方便,因为Erlang天生就是分布式语言,但其本身并不支持负载均衡,支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息&#x…

八、Git分支和版本号的简介

1、Git分支介绍 分支在Git中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了! 2…

【AI绘图】一、stable diffusion的发展史

一、stable diffusion的发展史 本文目标:学习交流 对于熟悉SD的同学,一起学习和交流使用过程中的技巧和心得。 帮助新手 帮助没有尝试过SD但又对它感兴趣的同学快速入门,并且能够独立生成以上效果图。 1.发展史介绍: 2015年的时候…

汇编重复计算之使用循环与不循环使用区别

没有使用循环的汇编代码,计算ffff:0-ffff:b的累加之和 assume cs:code 表示code段与CS寄存关联 code segment 表示段开始 ,code ends表示段结束,end表示汇编程序结束 mov ax,0ffffh 表示将ffffh送入ax寄存器 mov ds,ax 表示将ax寄存器值送入ds寄存器 mov …

第二十四章 开发Productions - ObjectScript Productions - 定义业务服务

文章目录 第二十四章 开发Productions - ObjectScript Productions - 定义业务服务介绍关键原则定义业务服务类实施 OnProcessInput() 方法 第二十四章 开发Productions - ObjectScript Productions - 定义业务服务 本页介绍如何定义业务服务类。 提示: IRIS 提供…

高完整性系统 (2):Requirement 与 Design 阶段的风险控制——Hazards, HAZOP, Fault Tree

文章目录 安全性工程流程Hazards反事实推理(CounterFactual Reasoning)案例1案例2案例3 HAZOP: HAZARDS AND OPERABILITY STUDY案例1HAZOP 工作流程HAZOP 总结 Fault Tree AnalysisFault Tree 定义案例Node Symbolsanalysis outcomes 这节课主要介绍了高…

【Linux集锦01】CentOS的安装

Centos的安装 1.创建新的虚拟机2. 自定义3.下一步4.创建虚拟空白光盘5.安装Linux系统和Centos 7 发行版6.命名虚拟机名称和选择磁盘位置7.处理器配置 主要看自己的电脑的情况8.设置虚拟机内存9.网络设置 nat10.选择IO控制器类型11.选择磁盘类型12.创建新虚拟磁盘13.设置磁盘容量…

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

目录 一、添加(1) 基本插入(2) 设置新插入记录的主键&#xff08;id&#xff09;★ 二、更新三、删除四、动态 SQL(1) if 标签(2) where 标签(3) foreach 标签 五、起别名六、sql 标签七、在 MyBatis 中集成 druid 连接池 一、添加 (1) 基本插入 <mapper namespace"s…

qtcanpool 知 99:常见问题

文章目录 前言问题构建 fancydemo 报链接库错误 后语 前言 qtcanpool 是根据 qtcreator 整理出的一套通用的工程管理模板&#xff0c;同时集成一些常见的库和插件。就像 qtcanpool 名字一样&#xff0c;它是一个 qt 池&#xff0c;用户可以从中汲取所需。 对于初次使用 qtcan…

iPad触屏笔哪个牌子好用?平替电容笔推荐

电容笔可以说是人手必备的数码产品&#xff0c;市面上的电容笔品牌数不胜数&#xff0c;很多人都快赶不上它的步伐了&#xff0c;新品的大批量上升&#xff0c;说明市场上的电容笔的需求量日益扩大&#xff0c;越来越多人在学习上、办公上等使用&#xff0c;作为资深的电容笔发…

Kafka重平衡rebalance是什么

重平衡 背景&#xff1a; 假如你是一家公司的老板&#xff0c;手下有三名员工张三、李四、王五&#xff0c;现在你有三项工作A、B、C&#xff0c;正好安排给三人。 过了一个月后&#xff0c;员工王五离开了公司。这个时候只剩下两名员工&#xff0c;你只能把原先王五安排的…

每日学术速递6.3

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Reconstructing the Minds Eye: fMRI-to-Image with Contrastive Learning and Diffusion Priors 标题&#xff1a;重建心灵之眼&#xff1a;fMRI-to-Image with Contrastive lear…

反向ajax实现

在过去的几年中&#xff0c;web开发已经发生了很大的变化。现如今&#xff0c;我们期望的是能够通过web快速、动态地访问应用。在这一新的文章系列中&#xff0c;我们学习如何使用反 向Ajax&#xff08;Reverse Ajax&#xff09;技术来开发事件驱动的web应用&#xff0c;以此来…

【Android开发基础】更新\修改Adapter适配器数据(例:聊天功能等)

文章目录 一、引言二、解决方案1、需求一2、需求二&#xff08;1&#xff09;普通方法&#xff08;2&#xff09;观察者模式&#xff08;推荐&#xff09; 一、引言 描述&#xff1a;如何在主线程&#xff08;Activity/Fragment&#xff09;UI中修改子线程&#xff08;Adapter…

小白可以看懂的「GraphQL」,GraphQL到底是啥样

GraphQL是一种用于API的查询语言&#xff0c;可以在服务端定义GraphQL Schema&#xff0c;客户端可以向服务端发送GraphQL请求&#xff0c;服务端执行GraphQL查询&#xff0c;并将结果作为JSON返回给客户端。 下面是一个使用golang实现GraphQL的示例&#xff0c;首先需要安装g…