移动GPU采用TBR(Tile-Based Rendering)架构,将屏幕划分为瓦片处理以减少主存访问,但对顶点数和DrawCall敏感,因顶点处理依赖主存且频繁切换上下文增加功耗。移动GPU片上缓存容量有限,受能效和面积限制。而PC GPU采用IMR架构,依赖大容量显存和高速缓存,能高效处理复杂场景和大量DrawCall。总结来看,移动平台对顶点和DrawCall更敏感,受限于小缓存和功耗,而PC平台凭借大缓存和宽松限制性能更优。
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>1. 移动平台的 TBR(Tile-Based Rendering)架构和顶点/DrawCall 敏感性</strong></font>
<ul><li>TBR 架构(Tile-Based Rendering)是移动GPU常见的渲染方法,比如ARM的Mali和Imagination的PowerVR。</li>
<li>TBR会将屏幕划分成许多小“瓦片(tile)”后逐个处理,每个瓦片的深度测试和像素处理会在片内缓存(片上缓存,On-chip tile buffer)中完成,最大限度减少对主存的访问,降低带宽压力和功耗。</li></ul>
<strong>为什么对顶点数和DrawCall特别敏感?</strong>
<ul><li>TBR的一个关键点是,顶点处理和装配(vertex processing and assembly)阶段依然是在主存和统一内存体系下进行的。</li>
<li>顶点数据通常不会完全放在片上缓存(通常容量有限)中,大量的顶点意味着更多从主存读取顶点数据,带宽压力升高。</li>
<li>同时大量DrawCall意味着CPU和GPU切换上下文更频繁,多线程和命令缓冲区压力也更大,影响性能。</li>
<li>由于移动设备对带宽和功耗极度敏感,过多的顶点读取和DrawCall会迅速成为瓶颈。</li></ul>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>2. 移动GPU片上缓存设计受能效和面积限制</strong></font>
<ul><li>移动GPU片上缓存(比如tile buffer)大小通常很有限,几百KB到几MB不等,远小于PC端的显存规模。</li>
<li>设计上必须在能耗、面积、发热等多方面折中,不能像PC GPU那样大规模堆叠高速片上缓存。</li>
<li>因此无法一次性存储全部顶点数据,也无法像PC GPU那样的大容量高速缓存体系。</li></ul>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>3. PC平台使用IMR(Immediate Mode Rendering)架构的原因</strong></font>
<ul><li>PC GPU大多采用IMR架构,也叫Immediate Mode Rendering,渲染过程中几乎不进行瓦片划分,而是直接将顶点和像素数据写入内存,依赖高速显存(GDDR SDRAM)和大容量缓存。</li>
<li>PC GPU的显存容量数GB起步,具有大量快速缓存(L2 Cache、纹理缓存、顶点缓存等),可缓存更多顶点数据和DrawCall相关的状态。</li>
<li>这种设计也使PC GPU更擅长处理极度复杂的场景和大量DrawCall,且对顶点数量的压力相对没移动设备那么敏感。</li>
<li>由于功耗和面积没那么受限,PC GPU在设计时可以放更大容量、更高频率的缓存。</li></ul>
<strong>总结</strong>
<style type="text/css">
th{padding:5px;}
td{padding:5px;}
</style>
<table align="center" border="1" width="100%">
<tr><th>特点</th><th>移动平台(TBR)</th><th>PC平台(IMR)</th></tr>
<tr><td>架构</td><td>Tile-Based Rendering(瓦片式渲染)</td><td>Immediate Mode Rendering(直接渲染)</td></tr>
<tr><td>片上缓存</td><td>小容量,几百KB到几MB,限制多顶点存储</td><td>大容量缓存,依赖显存及多级缓存</td></tr>
<tr><td>对顶点数敏感度</td><td>高,顶点多带宽压力大,影响性能</td><td>低,拥有更大缓存可缓解带宽和缓存压力</td></tr>
<tr><td>DrawCall 敏感度</td><td>高,频繁切换CPU-GPU调度成本高</td><td>低,适合处理大量DrawCall和复杂渲染</td></tr>
<tr><td>功耗和面积限制</td><td>严格,限制片上缓存大小</td><td>宽松,可支持大显存和高速缓存</td></tr>
</table><br>
我用一个生动形象的“餐厅厨房”案例来对比 移动平台的TBR架构 和 PC平台的IMR架构,帮助你更直观理解它们对DrawCall和顶点数量敏感性的原因。
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>餐厅厨房案例:移动GPU和PC GPU的渲染架构对比</strong></font>
<strong>背景设定</strong>
假设渲染就是做一道复杂的菜肴:
<ul><li>“菜肴” = 一帧画面</li>
<li>“食材” = 顶点数据</li>
<li>“厨师” = GPU</li>
<li>“刀工和装盘” = 几何处理和像素着色</li>
<li>“厨房空间” = 片上高速缓存与内存系统</li>
<li>“厨房储藏室” = 主存(内存)</li></ul>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>移动平台(TBR)厨房</strong></font>
<strong>厨房特点</strong>
<ul><li>厨房很小,空间有限(片上缓存小),只有一个小岛台(Tile Buffer)</li>
<li>厨师会先将菜肴切成小块(分割画面成瓦片),每次专心处理一个小份</li>
<li>食材(顶点)主要放在储藏室(主存),厨师需要频繁来回搬运食材到厨房台面操作</li>
<li>厨师只能把手边能放下的食材拿来,食材多了,搬运次数就多,效率就低</li>
<li>厨师做菜时,必须等到所有相关食材都齐了,才能开始切割装盘(着色)</li>
<li>厨房小,不能把所有食材一次性放齐,必须“延迟写入”后续工序</li></ul>
<strong>由此引发的问题</strong>
<ul><li>食材(顶点)种类和数量多,搬运频繁,效率被搬运速度限制</li>
<li>厨师做多道菜(DrawCall多),厨房开关门(CPU-GPU交互)频繁,影响节奏</li>
<li>小厨房空间限制,无法同时处理大量顶点和复杂指令,导致性能瓶颈</li>
<li>必须分批处理,开销更大,且等待时间长(流水线停滞)</li></ul>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>PC平台(IMR)厨房</strong></font>
<strong>厨房特点</strong>
<ul><li>大厨房,多个岛台和储藏柜(大容量缓存和显存)</li>
<li>食材种类丰富且有序存放,厨师可以随手取用,不用频繁跑到储藏室</li>
<li>厨师做菜时,可以同时处理完整菜肴,用流水线效率高的直接操作流程</li>
<li>厨房支持同时做多道菜(大量DrawCall)且协调高效,不易堵塞</li>
大厨房允许大量食材和工具同时存在,无需等待或延迟写入工序</li></ul>
<strong>由此带来的优势</strong>
<ul><li>大容量缓存减少了寻材搬运时间,减少主存交互瓶颈</li>
<li>可以轻松处理大量顶点数据,流畅应对复杂场景</li>
<li>CPU和GPU交互开销较小,流水线更稳定高效</li>
<li>性能更强,适合高复杂度渲染和高刷新率需求</li></ul>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>生活化总结</strong></font>
<table align="center" border="1" width="100%">
<tr><th>方面</th><th>移动平台小厨房(TBR)</th><th>PC平台大厨房(IMR)</th></tr>
<tr><td>厨房大小</td><td>紧凑、空间极度有限</td><td>宽敞、设备充足</td></tr>
<tr><td>食材存放</td><td>食材大部分藏在储藏室,只有少量能放厨房台面</td><td>食材大量存在厨房台面和储藏柜,随取随用</td></tr>
<tr><td>搬运成本</td><td>食材种类多且多次频繁搬运,效率低</td><td>食材直接放在身边,搬运次数少,效率高</td></tr>
<tr><td>并行处理能力</td><td>小厨房导致同时只能做小份菜,做多道菜很难流畅处理</td><td>大厨房支持多厨师同时做多菜,流水线运作顺畅</td></tr>
<tr><td>延迟和等待</td><td>必须等待食材齐全才动手,过程中有频繁停顿</td><td>各步骤衔接紧密,流水线连续无明显停顿</td></tr>
<tr><td>能耗和节约</td><td>设计节能,厨房小省电省空间,但效率受限</td><td>大厨房耗电高但效率强,适合高负载环境</td></tr>
</table><br>
<hr>
<font size="4" style="line-height: 45px;" color="#c200ff"><strong>结合DrawCall和顶点数</strong></font>
<ul><li>大量顶点数据相当于“菜所需的不同食材”。在TBR架构,越多食材意味着越多搬运,带宽压力上升,效率下降。</li>
<li>频繁DrawCall相当于“频繁切换做不同菜”,每次切换都让厨师调整准备,增加开销。</li>
<li>移动平台因为“厨房小”和“食材放外面”,导致DrawCall和顶点数异常敏感。</li>
<li>PC平台厨房“空间大”、缓存“丰富”,更能容纳大量食材和切菜操作,不怕复杂场景。</li></ul>
<hr>
<font color="#9a9a9a">版权声明:本文为CSDN博主「你一身傲骨怎能输」的原创文章,</font>
<font color="#9a9a9a">遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。</font>
<a href="https://blog.csdn.net/qq_33060405/article/details/150724407"><font color="#9a9a9a">原文链接:https://blog.csdn.net/qq_33060405/article/details/150724407</font></a>
<br>