导读: GPU是Graphic Processor Unit的简称,顾名思义就是图形处理器。 GPU的概念最早是从图形工作站发展而来,从90年代的个人电脑普及开始,GPU迎来了其大发展的时代。 在90年代中期,桌面GPU经历了2D到3D的跨越,从此3D图形渲染取代2D成为PC游戏的主流
1. 移动GPU与桌面GPU移动GPU相对桌面GPU只能算是小弟弟。 移动GPU的劣势主要表现在理论性能和带宽。 移动GPU受限于芯片的面积,能耗以及成本所以必须牺牲部分性能和带宽来求得性价比和电池续航力的平衡。 与桌面GPU动辄256bit甚至512bit的位宽、1.2-1.5GHz的高频显存相比,移动GPU不仅要和CPU共享内存带宽,而且普遍使用的是双32bit位宽、LPDDR2-800或1066左右的内存系统,总带宽普遍在10GB/s以内

在上图中移动处理器中内存带宽最高的是iPad 3/4,因为他们使用Retina屏幕,2048x1536的高分辨率对GPU带宽要求更高,不过就算是这两款产品,17GB/s的带宽与PC显卡上动辄200GB/s以上的带宽相比还是小儿科。 没有高带宽就没有大容量纹理数据,也就不会拥有高画质。 尽管带宽不是制约移动GPU发展的唯一因素,但是在目前的限制下,移动GPU厂商关心的头、、大事就是如何在尽可能小的带宽需求下提升GPU性能及画质,纹理压缩是一个方法,还有一种就是使用不同的渲染架构。 目前在GPU领域主要有IMR、TBR及TBDR、三种主流架构 2. 移动GPU的模式
2.1. IMR模式

IMR(Immediate Mode Rendering)就如字面意思一样,提交的每个渲染命令都会立即开始执行,并且该渲染命令会在整条流水线中执行完毕后才开始执行下一个渲染命令
这种模式的优点:
1. GPU架构比TBR模式简单直接
2. 在一帧里面执行FBO操作时,不会因为需要清空缓冲的渲染指令而影响性能
3. 不用像TBR架构一样需要片上高速缓存来保存中间结果
4. 不用像TBR架构一样缓存Triangle List,因此在有大量顶点运算的场景时比TBR有优势。 例如PC上面的复杂模型可能有几百万个triangle
这种模式的缺点就是:
1. IMR的渲染会存在浪费带宽的情况。 例如,当两次渲染有前后遮蔽关系时,IMR模式因为两次draw命令都要执行,因此会存在经过Pixel Shader后的Pixel被Depth test抛弃,这样就浪费了Shader Unit运算能力。 不过幸运的是,目前几乎所有的IMR架构的GPU都会提供Early Z的判断方式,一般是在Rasterizer里面对图形的遮蔽关系进行判断,如果需要渲染的图形被遮挡住,那么就直接抛弃该图形而不需要执行Pixel Shader
2. IMR的另外一个缺点就是其渲染命令在执行需要随时读写frame buffer,depth buffer和stencil buffer,这带来大量的内存带宽消耗,在移动平台上面访问片外内存是最消耗电量和最耗时的操作
因此在桌面GPU领域,TBR节省带宽和低性能不符合PC机的要求,IMR一统江湖。 但是在移动GPU领域,TBR的低带宽消耗,低功耗正好满足移动设备需求,与其在PC端的待遇相反,移动设备领域TBR几乎一统江湖
3.2. TBR模式与IMR简单粗暴的做法不同,TBR(Tile Based Rendering)它将需要渲染的画面分成一个个的矩形区块(tile),tile一般是4x4或者8x4的矩形块。 模型的顶点经过Vertex Shader运算以后会组装成一个个的triangle,这些triangle会被缓存在一个triangle cache里面。 如果某个triangle需要在某个tile里面绘制,那么就会在该tile的triangle list中存一个索引。 、、一帧里面所有的渲染命令都经执行完Vertex Shader生成triangle以后,每个tile就会拥有一个triangle list,这list就包含了需要在该tile内部绘制的所有triangle。 然后GPU再基于triangle list执行每个tile的raster和Per-fragment operation
TBR的优点是:
执行raster和Per-fragment operation时不需要反复的访问frame buffer,depth buffer,stencil buffer。 这是因为GPU可以把整个tile的frame buffer/depth buffer/stencil buffer保存在一个片上的高速缓存中,这样GPU就直接访问tile,而不需要访问外部内存。 这大大减少了内存的带宽消耗,也意味着能耗的降低
TBR的缺点是:
需要保存Vertex Shader执行后的结果以及每个tile的triangle list。 这意味着如果场景里面有很多的顶点,那么片上缓存就不可能存下这么多顶点信息和triangle list,就不得不依靠外部内存来存储,就会拥有额外的带宽消耗。 不过庆幸的是当前的移动3D绘制都不会拥有太多的triangle的场景。 一个复杂的模型也就1万多个triangle,因此一个通常的场景大概就是几十万triangle。 随着移动游戏越来越复杂精美,模型的复杂程度也会快速上升,这也是TBR架构在未来将会面临的一大挑战
如果在一帧里面有两遍及其以上的渲染,那么就需要使用Frame buffer object来缓存中间结果,这对TBR又是一大性能损耗。 根据我们前面的讲解,TBR需要缓冲一帧所有的图元,所有图元执行完毕后才开始raster和Per-fragment operation。 在这种情况下,一旦后面的draw命令需要使用到前面渲染生成的结果,那么就不得不在该命令执行前,要求GPU把缓存的所有draw命令都执行完毕,然后放弃当前缓存内容。 在极致情况下,例如每次draw都需要读取前一次draw渲染的结果,那么TBR就会直接退化成IMR模式基于以上的缺点,我们可以看出在桌面GPU领域TBR没有任何优势,因此其完全退出桌面GPU市场。 但是在移动GPU市场它更能适应性能/带宽/能耗三者的平衡
3.3. TBDR模式

TBDR(Tile Based Deferred Rendering,贴图延迟渲染)算是TBR的近亲,它跟TBR原理相似,但是通过HSR(Hidden Surface Removal,隐藏面消除)操作,在执行Pixel Shader之前进一步减少了不需要渲染的fragment,降低了带宽需求。 在执行Pixel Shader之前,对Raster生成的每个像素都做depth test的比较,剔除被遮挡的像素,这就是HSR的原理。 理论上经过HSR剔除以后,TBDR每帧需要渲染的像素上限就是屏幕像素的数量(没有考虑alpha blend的情况下)。 而传统的TBR在执行复杂一点的游戏时可能需要渲染6倍于屏幕的像素
TBDR是PowerVR的王牌,因为TBR和HSR带来的带宽与运算开销的降低,使得手机的续航能力让人惊叹。 下图是PowerVR的SGX系列的GPU架构图,可以看到其复杂程度的架构

导读: GPU是Graphic Processor Unit的简称,顾名思义就是图形处理器。 GPU的概念最早是从图形工作站发展而来,从90年代的个人电脑普及开始,GPU迎来了其大发展的时代。 在90年代中期,桌面GPU经历了2D到3D的跨越,从此3D图形渲染取代2D成为PC游戏的主流
1. 移动GPU与桌面GPU移动GPU相对桌面GPU只能算是小弟弟。 移动GPU的劣势主要表现在理论性能和带宽。 移动GPU受限于芯片的面积,能耗以及成本所以必须牺牲部分性能和带宽来求得性价比和电池续航力的平衡。 与桌面GPU动辄256bit甚至512bit的位宽、1.2-1.5GHz的高频显存相比,移动GPU不仅要和CPU共享内存带宽,而且普遍使用的是双32bit位宽、LPDDR2-800或1066左右的内存系统,总带宽普遍在10GB/s以内

在上图中移动处理器中内存带宽最高的是iPad 3/4,因为他们使用Retina屏幕,2048x1536的高分辨率对GPU带宽要求更高,不过就算是这两款产品,17GB/s的带宽与PC显卡上动辄200GB/s以上的带宽相比还是小儿科。 没有高带宽就没有大容量纹理数据,也就不会拥有高画质。 尽管带宽不是制约移动GPU发展的唯一因素,但是在目前的限制下,移动GPU厂商关心的头、、大事就是如何在尽可能小的带宽需求下提升GPU性能及画质,纹理压缩是一个方法,还有一种就是使用不同的渲染架构。 目前在GPU领域主要有IMR、TBR及TBDR、三种主流架构2. 移动GPU的模式
2.1. IMR模式

IMR(Immediate Mode Rendering)就如字面意思一样,提交的每个渲染命令都会立即开始执行,并且该渲染命令会在整条流水线中执行完毕后才开始执行下一个渲染命令
这种模式的优点:
1. GPU架构比TBR模式简单直接
2. 在一帧里面执行FBO操作时,不会因为需要清空缓冲的渲染指令而影响性能
3. 不用像TBR架构一样需要片上高速缓存来保存中间结果
4. 不用像TBR架构一样缓存Triangle List,因此在有大量顶点运算的场景时比TBR有优势。 例如PC上面的复杂模型可能有几百万个triangle
这种模式的缺点就是:
1. IMR的渲染会存在浪费带宽的情况。 例如,当两次渲染有前后遮蔽关系时,IMR模式因为两次draw命令都要执行,因此会存在经过Pixel Shader后的Pixel被Depth test抛弃,这样就浪费了Shader Unit运算能力。 不过幸运的是,目前几乎所有的IMR架构的GPU都会提供Early Z的判断方式,一般是在Rasterizer里面对图形的遮蔽关系进行判断,如果需要渲染的图形被遮挡住,那么就直接抛弃该图形而不需要执行Pixel Shader
2. IMR的另外一个缺点就是其渲染命令在执行需要随时读写frame buffer,depth buffer和stencil buffer,这带来大量的内存带宽消耗,在移动平台上面访问片外内存是最消耗电量和最耗时的操作
因此在桌面GPU领域,TBR节省带宽和低性能不符合PC机的要求,IMR一统江湖。 但是在移动GPU领域,TBR的低带宽消耗,低功耗正好满足移动设备需求,与其在PC端的待遇相反,移动设备领域TBR几乎一统江湖
3.2. TBR模式与IMR简单粗暴的做法不同,TBR(Tile Based Rendering)它将需要渲染的画面分成一个个的矩形区块(tile),tile一般是4x4或者8x4的矩形块。 模型的顶点经过Vertex Shader运算以后会组装成一个个的triangle,这些triangle会被缓存在一个triangle cache里面。 如果某个triangle需要在某个tile里面绘制,那么就会在该tile的triangle list中存一个索引。 、、一帧里面所有的渲染命令都经执行完Vertex Shader生成triangle以后,每个tile就会拥有一个triangle list,这list就包含了需要在该tile内部绘制的所有triangle。 然后GPU再基于triangle list执行每个tile的raster和Per-fragment operation
TBR的优点是:
执行raster和Per-fragment operation时不需要反复的访问frame buffer,depth buffer,stencil buffer。 这是因为GPU可以把整个tile的frame buffer/depth buffer/stencil buffer保存在一个片上的高速缓存中,这样GPU就直接访问tile,而不需要访问外部内存。 这大大减少了内存的带宽消耗,也意味着能耗的降低
TBR的缺点是:
需要保存Vertex Shader执行后的结果以及每个tile的triangle list。 这意味着如果场景里面有很多的顶点,那么片上缓存就不可能存下这么多顶点信息和triangle list,就不得不依靠外部内存来存储,就会拥有额外的带宽消耗。 不过庆幸的是当前的移动3D绘制都不会拥有太多的triangle的场景。 一个复杂的模型也就1万多个triangle,因此一个通常的场景大概就是几十万triangle。 随着移动游戏越来越复杂精美,模型的复杂程度也会快速上升,这也是TBR架构在未来将会面临的一大挑战
如果在一帧里面有两遍及其以上的渲染,那么就需要使用Frame buffer object来缓存中间结果,这对TBR又是一大性能损耗。 根据我们前面的讲解,TBR需要缓冲一帧所有的图元,所有图元执行完毕后才开始raster和Per-fragment operation。 在这种情况下,一旦后面的draw命令需要使用到前面渲染生成的结果,那么就不得不在该命令执行前,要求GPU把缓存的所有draw命令都执行完毕,然后放弃当前缓存内容。 在极致情况下,例如每次draw都需要读取前一次draw渲染的结果,那么TBR就会直接退化成IMR模式基于以上的缺点,我们可以看出在桌面GPU领域TBR没有任何优势,因此其完全退出桌面GPU市场。 但是在移动GPU市场它更能适应性能/带宽/能耗三者的平衡
3.3. TBDR模式

TBDR(Tile Based Deferred Rendering,贴图延迟渲染)算是TBR的近亲,它跟TBR原理相似,但是通过HSR(Hidden Surface Removal,隐藏面消除)操作,在执行Pixel Shader之前进一步减少了不需要渲染的fragment,降低了带宽需求。 在执行Pixel Shader之前,对Raster生成的每个像素都做depth test的比较,剔除被遮挡的像素,这就是HSR的原理。 理论上经过HSR剔除以后,TBDR每帧需要渲染的像素上限就是屏幕像素的数量(没有考虑alpha blend的情况下)。 而传统的TBR在执行复杂一点的游戏时可能需要渲染6倍于屏幕的像素
TBDR是PowerVR的王牌,因为TBR和HSR带来的带宽与运算开销的降低,使得手机的续航能力让人惊叹。 下图是PowerVR的SGX系列的GPU架构图,可以看到其复杂程度的架构

移动GPU三种主流架构优缺点浅析相关推荐

  1. 大数据三种主流架构(Lambda、Kappa、IOTA)

    文章目录 前言 Lambda架构 Lambda架构的介绍 Lambda架构的关键性 Lambda的三层架构 Lambda的三层架构 Speed Layer 速度层 Serving layer 服务层 ...

  2. 当前java web架构形式_关于三种主流WEB架构的思考

    关于三种主流WEB架构的思考Haohappy  haohappy AT msn.com转载请注明来源: 做WEB好几年了,各种语言和技术都稍有涉猎.今天心血来潮,突然想总结一下.其实不论什么技术,什么 ...

  3. 三种主流的Kubernetes部署方式

    [译者的话]本文分析介绍了三种主流的Kubernetes部署方式,为广大Kubernetes的使用者提供了很好的参考借鉴. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Ku ...

  4. LVS Nginx HAProxy 三种负载均衡优缺点比较

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

  5. 网络资产管理系统_固定资产管理系统的三种网络架构方式

    随着互联网技术的发展和信息技术的广泛使用,固定资产管理系统在各行业的应用越来越普及,固定资产管理系统作为当今主流的企业固定资产信息化管理模式,能够对企业固定资产进行有效管理并提升企业的管理水平.对于固 ...

  6. arm架构和x86架构_ARM、X86和MIPS主流架构优缺点分析

    三种主流芯片架构 1. ARM ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%, ...

  7. MySQL、SqlServer、Oracle 三种数据库的优缺点总结

    MySQL.SqlServer.Oracle 三种数据库的优缺点总结 一.MySQL 二.SqlServer 三.Oracle 一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种 ...

  8. qlserver、Mysql、Oracle三种数据库的优缺点总结

    这篇文章主要介绍了sqlserver.Mysql.Oracle三种数据库的优缺点总结,需要的朋友可以参考下 一.sqlserver 优点: 易用性.适合分布式组织的可伸缩性.用于决策支持的数据仓库功能 ...

  9. Java三种技术架构

    Java语言的三种技术架构: J2SE:JAVA 2 Platform Standard  Edition (标准版) SE是为开发普通桌面和商务应用程序开发的解决方案,这是学习其他两者的基础. J2 ...

最新文章

  1. ubuntu服务器常见使用技巧及-kill掉后GPU显存不释放进程-
  2. (5.1.5)引擎管理——多服务器管理之中央管理服务器(CMS)
  3. python上下文管理器
  4. 查找数组中未出现的和出现2次的数值 Set Mismatch
  5. caffe 框架梳理(待续)
  6. OC --(5)-- 字典、集、数组排序:字典类、集合类、数组数组排序、字典、集合的快速遍历、数组排序...
  7. 连接远程Windows主机中的虚拟机
  8. 低级问题---.net franmework安装
  9. JAVA 基础 /第六课: 面向对象 / JAVA中的类和对象
  10. ubuntu16.04下编译安装Autoware
  11. GIS应用技巧之利用DEM制作三维立体图
  12. wacom影拓系列数位板驱动
  13. 数据的种类(结构化数据、非结构化数据、半结构化数据)
  14. html中易混淆的offset、client、scroll
  15. idear开发工具创建maven的相关配置
  16. X-Brain:如此美丽可爱的大脑工作原理
  17. Easycwmp_源码分析
  18. Apollo详解之定位模块———导航设备硬件基础
  19. 久坐伤身?关于程序员站立式办公的体验,你会发现...
  20. 基于校园场景的NBIOT智能门锁管理方案

热门文章

  1. html ie动画效果,css3强大的动画效果animate使用说明及浏览器兼容介绍
  2. python中search和match的区别_Python中正则表达式match()、search()函数及match()和search()的区别详解...
  3. python查看数据类型type_python——获取数据类型:type()、isinstance()的使用方法:...
  4. 二叉树层序遍历递归与非递归_二叉树的遍历「递归、非递归」以及自己的感受
  5. php 里如何进行时间比较,PHP实现时间比较和时间差计算的方法示例
  6. strip python里面是什么意思_python中的strip是什么意思
  7. php serialize和json_encode哪个更快_学习PHP的10个技巧
  8. error超频 whea win10_解决WHEA_UNCORRECTABLE_ERROR蓝屏
  9. 大数据学习笔记29:Hadoop压缩机制演示
  10. 【BZOJ1406】【codevs2478】密码箱,数论练习