移动端GPGPU 架构

最近在面试的时候发现移动端现在是越来越热,然后就有被问到GPU的框架什么的PC端的这个可以参考这个:GPU硬件架构及其运行机制移动端的与PC端有很大的区别!比如移动端可以说没有独立的显存只有些寄存器cache 和on-chip memory!

立即渲染模式IMR :

在这里插入图片描述

IMR(Immediate Mode Rendering)就如字面意思一样——提交的每个渲染要求都会立即开始,这是一种简单而又粗暴的思路,优点缺点都非常明显,如果不用为性能担忧,这种方式会很省事,但是IMR的渲染实行的是无差别对待,那些遮蔽处理的部分依然会被渲染处理器,这也导致无意义的读写操作更多,浪费了大量性能和带宽。
对于每一个具体的绘制,渲染管线里的读写操作都是直接在显存和GPU中传输数据的, 在这种架构下,每一次渲染完的Color和Depth数据写回到Frame Buffer和 Depth Buffer都会产生很大的带宽消耗,所以IMR架构中也会有L1和L2之类的Cache来优化这部分大量的带宽消耗。

移动端分块渲染TBR模式:

在这里插入图片描述

GPU的渲染过程中,对功耗影响最大的是带宽,所以能够怎么样从设计层面减少带宽消耗,也就延申出TBR!
之前的OpenGL ES规范中CPU和GPU之间的内存是不能共享的,Vertex和Texture的Buffer是需要拷贝的,即使是在同一物理内存上。现在有了vulkan,openGL和openGL ES可以和CPU之间共享内存了,不用象以前那样拷贝来拷贝去了,当然vulkan还有其他很有用的特性。
在异构计算方面,之前也是需要在CPU和GPU之间拷贝kernel的输入数据和输出结果,在OpenCL 2.0之后,也和vulkan一起走上了共享内存的康庄大道了。当然Metal也是可以共享内存的。
对于TBR来讲,整个光栅化和像素处理会被分为一个个Tile进行处理,通常为16×16大小的Tile。TBR的结构通过On-Chip Buffers来储存Tiling后的Depth Buffer和Color buffer。

在TBR的架构里,并不是来一个绘制就执行一个的,因为任何一个绘制都可能影响到到整个FrameBuffer,如果来一个画一个,那么GPU可能会在每一个绘制上都来回运输所有的Tile,这太慢了。
所以TBR一般的实现策略是对于Cpu过来的绘制,只对他们做顶点处理,产生的结果(Frame Data)暂时写回到物理内存,等到非得刷新整个FrameBuffer的时候,比如说在代码里显示的执行GLFlush,GLFinish,Bind和Unbind FrameBuffer这类操作的时候,总之就是我告诉GPU现在我就需要用到FrameBuffer上数据的时候,GPU才知道拖不了了,就会将这批绘制做光栅化,做tile-based-rendering。
读取只发生在需要几何以及纹理信息的时候,写回也只发生在整批绘制画完的时候,具体的绘制都是在On_Chip Memory上完成的,也就是带宽消耗最大的DepthBuffer 和 ColorBuffer的读写都发生在On_Chip Memory上

延迟渲染TBDR模式:

TBR虽然比IMR聪明多了,不过还是存在不少缺陷,TBDR(Tile Based Deferred Rendering,贴图延迟渲染)闪亮登场,它跟TBR原理相似,但是使用的是延迟渲染(Deferred Rendering),合并了完美像素,通过HSR(Hidden Surface Removal,隐藏面消除)等进一步减少了不需要渲染的过程,降低了带宽需求。实际上这些改变和PC上的渲染有些相似。
其实TBDR与TBR就是 在TBR的基础上再加了一个Deferred。

总结:

作为一个即写过GPU c-model,又调过shader unit驱动的前前前前 架构师,我认为,IMR不关注成本(即不关注效率),反复overdraw也无所谓,只求峰值性能大,把晶圆面积都给shader unit,牺牲效率 ,换得峰值性能,以及通过将shader unit数量最大化 换得更好的gpgpu向量计算通用性。

而TBR是最关注成本(最关注能效比),不追求峰值性能,但求最少的带宽 功耗使用量,追求的是最高效率。把晶圆面积都给片上帧缓冲,说白了就是放弃通用性和峰值性能,只针对图形渲染优化效率。所以你看很多游戏机GPU都是TBR的,为什么?说白了,就是为了效能比,追求效率。

参考资料:

tbr管线
GPU硬件架构及其运行机制
Metal图形处理前

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GPGPU编程模型与架构原理是指基于通用图形处理单元(General-Purpose Graphics Processing Unit,简称GPGPU)进行计算的一种编程方法和系统架构GPGPU编程模型是指开发人员如何使用GPU进行通用计算的一种方法。传统上,GPU主要用于图形渲染,但由于其并行处理能力强大,适用于处理大规模数据并行计算任务。程序员可以使用GPGPU编程语言(如CUDA和OpenCL)来编写GPU上的并行计算代码。这些编程语言提供了一组API,使得开发人员能够在GPU上并行执行计算任务。 GPGPU架构原理是指GPU的硬件架构和功能原理。GPU与传统的中央处理单元(CPU)不同,它包含了大量的处理单元,每个处理单元都可以执行相同的指令并处理不同的数据。GPU架构通常包括多个流处理器(Stream Processor)和全局内存(Global Memory)。流处理器负责执行并行计算任务,而全局内存则存储输入和输出数据。 GPGPU编程模型与架构原理的核心思想是利用GPU的并行计算能力来加速计算任务。通过将计算任务分解为多个并行子任务,并在GPU上同时执行,可以大大提高计算速度。然而,由于GPU与CPU之间存在数据传输等开销,适合使用GPGPU编程模型的任务通常是计算密集型的。 总结来说,GPGPU编程模型与架构原理是一种利用GPU的并行计算能力进行通用计算的方法和技术。它能够显著提高计算速度,尤其适用于处理大规模并行计算任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值