admin管理员组

文章数量:1608599

手机GPU

    • 首先我们来了解下性能参数
    • 然后分析下手机GPU渲染流程

首先我们来了解下性能参数

  • GPU频率:
    跟桌面显卡类似,频率提升,显卡核心就会运行在更高的频率从而带来更强大的性能,因此PC界有了超频一说。
  • 三角形输出率:
    单位是兆/秒,三角形输出率越高,输出率越大,在大型3D应用中越流畅。
  • 像素输出率:
    单位同样是兆/秒,像素填充率则决定了GPU解码视频、拍照录像的能力,肯定也是越高越好。
  • 像素输出率:
    单位同样是兆/秒,像素填充率则决定了GPU解码视频、拍照录像的能力,肯定也是越高越好。
    目 前来说,主流的平板上常见的图形处理器主要有:NVIDIA的Tegra3,Imigation的PowerVR SGX系列、ARM的Mali系列和高通的Adreno系列。以下主要基于三角形填充率和像素填充率概括目前热门平板的GPU规格。(参数来自网络,如有 错误欢迎指正)
    原文链接1
  • G FLOPS
    FLOPS是Floating-point Operations Per Second 即每秒所执行的浮点运算次数的英文缩写。它是一个衡量计算机计算能力的量,这个量经常使用在那些需要大量浮点运算的科学运算中。有时也会被记为flop/s。
    GFLOPS 就是 Giga Floating-point Operations Per Second。即每秒10亿次的浮点运算数,常作为GPU性能参数,但不一定代表GPU的实际表现,因为还要考虑具体如何拆分多边形和像素、以及纹理填充,理论上该数值越高越好。1GFlops = 1,000MFlops。
  • 显存带宽
    显存带宽是指显示芯片与显存之间的数据传输速率,它以字节/秒为单位。显存带宽是决定显卡性能和速度最重要的因素之一。显存带宽=显存频率×显存位宽/8
    原文链接2

然后分析下手机GPU渲染流程

移动GPU的模式
1、IMR模式

  IMR(Immediate Mode Rendering)就如字面意思一样,提交的每个渲染命令都会立即开始执行,并且该渲染命令会在整条流水线中执行完毕后才开始执行下一个渲染命令。
这种模式的优点:
· GPU架构比TBR模式简单直接。
· 在一帧里面执行FBO操作时,不会因为需要清空缓冲的渲染指令而影响性能。
· 不用像TBR架构一样需要片上高速缓存来保存中间结果。
· 不用像TBR架构一样缓存Triangle List,因此在有大量顶点运算的场景时比TBR有优势。例如PC上面的复杂模型可能有几百万个triangle。
这种模式的缺点就是:
· IMR的渲染会存在浪费带宽的情况。例如,当两次渲染有前后遮蔽关系时,IMR模式因为两次draw命令都要执行,因此会存在经过Pixel Shader后的Pixel被Depth test抛弃,这样就浪费了Shader Unit运算能力。不过幸运的是,目前几乎所有的IMR架构的GPU都会提供Early Z的判断方式,一般是在Rasterizer里面对图形的遮蔽关系进行判断,如果需要渲染的图形被遮挡住,那么就直接抛弃该图形而不需要执行Pixel Shader。
· IMR的另外一个缺点就是其渲染命令在执行需要随时读写frame buffer,depth buffer和stencil buffer,这带来大量的内存带宽消耗,在移动平台上面访问片外内存是最消耗电量和最耗时的操作。
  因此在桌面GPU领域,TBR节省带宽和低性能不符合PC机的要求,IMR一统江湖。但是在移动GPU领域,TBR的低带宽消耗,低功耗正好满足移动设备需求,与其在PC端的待遇相反,移动设备领域TBR几乎一统江湖。
  IMR模式的代表是NVIDIA的Tegra和Vivante的GC系列芯片。在此列出Vivante GC芯片的内部架构图,我们可以看到Vivante的GPU架构相当的简单。

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市场它更能适应性能/带宽/能耗三者的平衡。
  TBR的代表有ARM的Mali和高通的Adreno。下图是Mali的架构图:

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架构图,可以看到其复杂程度大大超过Vivante这类IMR的架构。


原文链接1


  1. https://gameinstitute.qq/community/detail/103959 ↩︎ ↩︎

  2. https://wwwblogs/minggoddess/p/8391359.html ↩︎

本文标签: 手机GPU