GPU渲染管线和架构整理(三)

移动平台GPU硬件框架

1)PowerVR 逻辑层管线

  • 管线基于PowerVR专利的TBDR架构(参考文献
    • 可简单划分为 主要处理顶点数据的Tiler阶段以及对每个Tile光栅化的渲染阶段
  • 顶点处理阶段(Tiler
    • 数据从应用层Submit
    • 驱动提取几何信息
    • 最先执行的是由应用层控制的顶点运算,既Vertex Shading
    • 随后数据被转换到屏幕空间(期间依次执行 ClipProjectCull
    • Tile Accelerator(TA) 中的最后一步是Tiling
      • 负责确定Tile和几何图元之间的关联性
      • 每个Tile都会生成与之关联的数据队列(per-tile list),追踪(track)所有相交的几何图元
    • Parameter Buffer (PB) 是存放上述per-tile list的结构名字
      • 数据位于SystemMemory
      • 其内部的PrimitiveList存有指向图元顶点(VertexData)的指针(ptr)
      • VertexData对应了全部顶点的集合
      • 其他渲染当前Tile所需的数据或指针
      • PB由硬件管理
    • 当Tile覆盖了过多的图元时可能
      • 导致PB无法容纳全部图元/顶点关联队列
      • 解决策略是分批绘制
        • 一波DrawCall执行完毕后执行 Flash
        • 余下部分图元信息重新填充PB,执行后续光栅化和渲染
      • Flash的代价是打断了HSR的数据连贯性
        • 导致前后不同批次的绘制之间数据不共享
        • 从而影响HSR执行效率,无法准确剔除,增加Overdraw
  • 逐Tile光栅化和渲染(Per-Tile Rasterizion and Render
    • Image Synthesis Processor (ISP) 图像综合处理单元的功能非常重要
      • 首先它会获取(fetch)存储在PB中的屏幕空间图元数据
        • ISP确保所有获取到的GeometryData都位于当前Tile定义的屏幕空间内
      • 先执行HiddenSurfaceRemoval(HSR)
      • 再执行DepthStencil Tests
        • 参与比较的深度和模板中介数据(Intermediate Data)一直位于片上缓存中(On-Chip Buffer)
        • 执行效率高
        • 深度信息无需取回(?)
      • Tag Buffer负责存储HSR执行中间变量
        • 只记忆每一个Pixel中处于最顶层的三角形(Triangle) 索引
        • 自然是片上缓存
    • Texture and Shading Processor(TSP)负责
      • 管理纹理资源
      • 规划FragmentShader的指令逻辑
      • 调度独立的算术逻辑单元(ALU)执行渲染
      • 输出可见像素(visible pixel)的颜色
      • 此过程发生在片上(On-Chip),中间变量(ScalerVector)都存放在片上缓存内
    • 关于AlphaTestAlphaBlending
      • 会导致HSR优化失效
      • 同时可能导致TSP多次对同一像素执行shader (Overdraw)
      • 执行AlphaTestBlending的过程同样发生在片上(On-Chip)
    • 写回FrameBuffer
      • 一旦Tile渲染彻底完毕,相关颜色/深度信息会被写回到FrameBuffer
      • FrameBuffer位于SystemMemory

2)PowerVR 物理层架构

FurianArchitecture
FurianArchitecture-2
  • 硬件层面的设计理念
    • 将GPU内部规划为一个个模块,或模块组。可以方便的调节某些功能模块的规模而不影响或牵连其他类型模块(Scale independently)
    • 平衡好GPU中的前端(几何和光栅化模块),核心(算数逻辑单元和纹理单元),以及后端(像素填充模块),优化总吞吐量
  • 硬件模块名词解释
    • Data Master: 在PowerVR的TBDR架构中,负责处理那些非可编程部分(固定管线相关逻辑)的模块统称 XXX Data Master
    • SPU(Scalable Processing Unit):是最上层可调节规模的核心运算单元
      • 一个SPU包含一套几何处理管线,一个光栅化管线,一个纹理管线(TPU),以及一定数量的通用着色核心(USC),此外还包含多至两套的后端处理管线(PBE)
      • PowerVR的最新Furian架构就是基于SPU进行规模控制的
    • USC(Universal Shader Clusters):由高速缓存,指令调度器,高级逻辑控制器以及一系列特殊设计的计算和数据流管线(Pipeline)组成,USC没有沉重的状态切换负担,可以在任何时候高速响应来自其他模块的业务请求
      • 每个USC可包含N条Pipeline
        • 假设N=16,一个分派的Warp大小为32 -> 单Pipeline需要 2 x 时间处理一个Warp
      • 每个Pipeline动态对应M个ALU (M可能会变化,但远大于Navida中的2个)
        • 支持超标量(Super Scalar),既能够同时激发多条指令,驱动空闲ALU
      • ALU是真正负担计算的核心,其总数量对标GPU性能
      • Rogue架构中,一个USC使用16-bit位宽的Scalar SIMD逻辑单元,在运行32-bit位宽的任务时需要2个时钟周期
      • Furian架构中,单USC中的Scalar SIMD单元上调到了32-bit位宽,可以在1个时钟周期内完成指令任务
    • TPU(Texture Pipeline Unit):纹理采样单元
      • Furian架构相比上一代具有2倍以上的纹理过滤(Filtering)吞吐量
      • Furian在一个时钟周期内可以一次性对8组INT8行纹理数据进行双线性采样
      • TPU在SPU内部,一个TPU可同时被多组USC共享
    • PBE(Back-end Pipeline):后端像素导出管线
      • Furian相比前代具有2倍以上的像素导出率
      • 每个SPU可对应2个PBE ,这样一个SPU总共可以在单个时钟周期内发射出8个像素或256bit的数据进入系统内存
  • 硬件流程串联(参考)
    • 前端的主责之一是顶点处理,Vertex Data Master负责通过驱动(Driver)将顶点信息从系统内存中读取到,经过必要的处理后直接送向一旁的 USC 单元,在这里可编程的Vertex Shading将会立即执行,待到USC通过寄宿其内的大规模并行计算核心执行完毕所有的可编程顶点渲染逻辑,别忘了后续还有若干步骤涉及顶点处理要做,此时这些数据任然储存在片上缓存内(stored on-chip)
    • 下一步是图元组装(Primitive assembly),以及各种剔除(culling)和裁剪(clipping)需要做。如某些图元的背面(back-facing)部分几何体,或者完全在屏幕外的图元都会被直接剔除。剔除后剩余部分的图元被送去裁剪,如果一个几何体与视锥体包面相交,裁剪器(Clipper)会生成裁剪后的新几何体用以替换原有几何体,如此一来所有的待计算顶点都会落在视锥体内部了
    • 前端的另一个重要任务则是Tiling,简单来说分为两个步骤(phase),第一步是接收前道传来的图元数据,并将它们区分为不同位置上的Tile中去。第二部对每个Tile内的数据进一步处理,主要是光栅化Tile,并将其产出的数据传递给片元着色器渲染,并最终写出到系统内存
    • 在Tiling过程中为了能够尽可能节约带宽资源,大量数据会先被整理压缩到名为ParamterBuffer的结构中,这是一种加速结构,可以有效提高与光栅化单元之间的传输效率
    • PowerVR的Perfect Tiling技术:
      • 是一种烧录到硬件层面的算法,它能够快速找出真正与图元相交的Tile,而无需使用诸如包围盒或层级包围盒之类的技术找出个大概可能包含的Tile区
      • PerfectTiling技术一方面大量减少了ParamterBuffer的数据量,同时也减少了光栅化单元的负担(具体参考下图)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容