在知乎上关注了好多图形学大佬,感觉现在知乎的技术氛围要比掘金推荐旧文好多了,经常会推送感兴趣的领域内容,而且还可以和作者私信交流。

这段时间看到有大佬分享 GPU 架构相关的内容,做图像渲染的还是要懂 GPU 才行的,毕竟是和它打交道嘛。

这位大佬就是知乎作者:无缘补天的梧桐,主页连接如下:

https://www.zhihu.com/people/wu-tong-16-43

大佬分享了一些桌面端 GPU 架构的内容,写了很多干货文章:

  • 【GPU】Tesla架构(一):初识GPU架构 https://zhuanlan.zhihu.com/p/403354366

  • 【GPU】Tesla架构(二):血汗工厂 https://zhuanlan.zhihu.com/p/416334635

  • 【GPU】Tesla架构(三):通用计算及其“物流网” https://zhuanlan.zhihu.com/p/425082340

最重要的作者还分享了一篇移动端 GPU 架构的文章,阅读之后受益良多,也分享给大家:

原文连接如下:https://zhuanlan.zhihu.com/p/433254219

以下是作者原文内容:

习惯了桌面端GPU的那一套玩法,初次接触移动端GPU会有许多新鲜感。

桌面端GPU,数据倾泻而下一路畅通无阻:顶点数据被分发到对应SM里的warp中,经过一通顶点运算后,就直接被甩到光栅化硬件里,然后碎成一堆片元,再次被裹挟到新warp中算出颜色值写回帧缓冲中。

整个过程的原则就是能跑多快跑多快,单看每个数据(顶点或片元),能找到其他31个同行跟我一起跑路就行,其他数据爱跑到哪跑到哪,跟我没有半毛钱关系。

桌面端GPU这套硬件流水线,跟逻辑管线较为接近。但这对硬件有一个最基础的要求:国道省道小村小路整套物流系统都得十分健全,以保证海量的数据能在这里面如鱼得水,玩命狂奔。而这,正是移动端GPU的死穴。

移动端GPU由于电源功率、芯片面积、布线以及封装等天生残缺,高带宽意味着高耗电,别说GPU,整个手机行业最大的短板就在电池上。

我们被迫向落后科技妥协的下限顶多是一天充一次电,打一局游戏就得充一次电然后还得为忍受发热练就铁砂掌的魔幻局面估计没人能够忍受。因此注重对功耗控制的移动端,那必然是要从GPU架构设计到图形算法上,都想方设法地压榨带宽消耗。毕竟帧数太少还可以靠人眼补帧,手机没电自动关机了那还玩个锤子。(•́へ•́╬)

这决定了移动端GPU,无法同桌面端GPU一样,采用围绕大量专用带宽而设计的即时模式渲染器(Immediate Mode Renderers, IMR)架构。当前主流的移动端GPU架构,如PowerVR、高通的Adreno和ARM的Mali,全是基于块的渲染(Tile-Based Rendering, TBR)架构

如果看过我之前的GPU系列文章,可能大家对桌面端GPU里,总公司、分公司、每个工作室、物流仓储等紧密联系的各个模块会有些印象。

而移动端GPU的特点就是,负责运算的shader engine和外界能不交流就不交流,迫不得已要交流了,就打包成块快速交接,活像一个自闭少年。

类似英伟达的SM,拥有专有的高速缓存,每家名字都不一样,我之后就统一用mali的,省得混乱。

与八纵八横的发达铁路网不同,移动端GPU就像松散的封建老欧洲,因为山高水远,shader engine们就像一个个独立王国,尽可能包办一切。现在就让我们走进这个独立王国,来领略一下未曾见过的异域风情吧。

打包成块:第一次延迟

在桌面端,每个三角形都是自由自在的小精灵,大家按照提交顺序进入流水线。而移动端,我们遇到的第一件新鲜事就是——分块(Binning,PowerVR称为Tiling)

主要流程如下:

  • 每个三角形在运行完顶点着色器后,会将变换后的顶点存储在片内,而不是直接光栅化

  • 将这些变换后的顶点进行图元组装、剔除、裁剪后,由Tilling引擎(该过程由专用的硬件单元负责,以确保足够高效)决定每个图元属于哪个tile,将图元地址存放到对应的per-tile list中(关于每一块包含哪些图元的信息,PowerVR称为Primitive List,Adreno称为Visiblity Stream)

  • per-tile lists和变换后的图元(着色器状态、属性等)被存放到内存中的Parameter Buffer

看到这儿,我们可能会迷惑?啥玩意儿?不是说带宽很紧张要勒紧裤腰带过苦日子吗?怎么还在主存里搞了这么一个buffer,在顶点着色器和光栅化之间横生枝节。顶点着色器运算完直接光栅化不香吗,非得传回主存然后再让shader engine读一遍,这不是自讨苦吃吗?

因为这是TBR为了之后巨大的带宽收益,不得不提前付出的些许带宽代价

正因为这些代价,三角形们得以被打包切成了块,意味着其对应要绘制到的帧缓冲(包括深度缓冲)都可以切成块。

而这么一个小块交给一个单独的shader engine来全权负责就成为了可能。shader engine就可以将这么一小块帧缓冲存在自己内部的高速缓存中。

与IMR相比,大量深度缓冲和颜色缓冲的来回读写,被隔离在了片内的高速缓存中,每一块的帧缓冲在最终渲染完成后才会被写回主存

这就是TBR所希冀的带宽节省带来的巨大收益!

绝不多算任何一个不必要的片元:第二次延迟

除了延迟光栅化以外,主流移动端GPU还会进一步延迟片元着色,以在像素级别上,实现overdraw的消除,即不将任何计算资源浪费在对最终渲染画面无关的片元上

每一块的图元光栅化成片元后,会等待所有片元全部经过深度测试后才进行片元着色,以确保只有离视线最近的片元才会被着色。

由于专利原因和实现上的细微区别,该技术在不同架构中有不同的名称,PowerVR为HSR (Hidden Surface Removal),Adreno为Early Z Rejection,Mali为FPK (Forward Pixel Killing)。

与桌面端GPU常见的early-z硬件优化相比,这些技术不需要排序并从前往后绘制物体。且由于物体可能出现相交的复杂情况,early-z即使经过排序也只能实现粗糙的overdraw消除。

不过,有许多情况会影响硬件延迟片元着色的顺利进行:

  • 半透明:会打断HSR,会强行渲染出当前所有最近片元,以便于混合。混合完后,如果紧接着又是不透明物体,则继续进行HSR。所以优化方案为:把半透明物体放最后画

  • Alpha Test/Discard:会先将它当作不透明物体经过HSR,如果未通过深度测试无事发生;如果通过深度测试那就运行片元着色器,若最终被discard,那么就会回过头更新HSR。

各种绝境求生的骚操作

除了最主要的TBR架构外,移动端GPU为了尽可能节省带宽消耗,还有诸多丧心病狂的技术优化手段。比如:

  • MSAA所需的巨大存储压力现在也可以搭便车,只存在于片内高速缓存中,帧缓冲在片内混合完样本后再传出

  • 在片元着色时,下一帧的顶点处理和Binning可以并行进行,当然这会带来进一步的延迟

  • 将顶点着色器拆分成位置运算和其他属性运算,计算完位置后就进行Binning以进一步节省带宽

  • 前后帧未变化的块不写回内存,甚至通过分析用户操作以及各种输入是否与前一帧都相同来直接避免某一块的运算,这对于大量画面都是静态的休闲手游而言,是十分实用的技术

  • 还有许多硬件上的设计细节也全是为节省带宽和功耗而服务的,比如在高速缓存上仍然储存纹理的压缩格式、暂时没有任务的元器件直接休眠等……

除了功耗这一移动端GPU优化的核心指标以外,对于渲染画面的提升各大厂商也有自己的尝试。

Imagination Technologies早在2016年就展示了实时光线追踪测试板PowerVR GR6500,并计划在不久的将来推出基于PowerVR架构的GPU,支持高级硬件光线追踪加速器;

而在最近,三星与AMD合作,计划在2022年推出基于AMD的RDNA 2架构的Exynos 2200 GPU,将支持硬件级光线追踪。可以预见,消费级移动端光追硬件,将很快到来

得益于移动端芯片架构的高效设计,苹果在2020年末推出的M1 Soc以及在2021年推出的M1 Pro和M1 Max,标志着桌面电脑开始转向ARM架构。

M1的GPU性能与之前的移动端GPU相比,有着巨大的提升,也证明了移动端GPU架构不仅在功耗控制上具有优势,在性能上也具有巨大潜力。

移动端和桌面端的GPU架构互相借鉴与融合,将成为未来GPU架构设计的主要趋势。

技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

私信领取相关资料

推荐阅读:

音视频开发工作经验分享 || 视频版

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

NDK 学习进阶免费视频来了

你想要的音视频开发资料库来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

底层进阶 | 移动端 GPU 架构 -- TBR 模型相关推荐

  1. GPU架构杂乱备忘——IMR、TBR、TBDR

    原文:https://juejin.cn/post/6844904132864655367 GPU架构杂乱备忘--IMR.TBR.TBDR 之前觉得涉及到gpu架构相关的问题只需要知道个大概就好,毕竟 ...

  2. 解读小米MoGA:超过MobileNetV3的移动端GPU敏感型搜索

    作者丨安静怡 学校丨吉林大学 研究方向丨神经网络模型压缩 近日,小米 AI 实验室 AutoML 团队展示了最新成果 MoGA (作者:初祥祥,张勃,许瑞军),超过由 Google Brain 和 G ...

  3. 图形学进阶——移动端TB(D)R架构基础

    移动端TB(D)R架构基础 百人计划学习链接:[技术美术百人计划]图形 3.7 移动端TB(D)R架构基础 一.当前移动端的设备概况 1. 移动端CPU占比 2. 移动端GPU占比 3. 各类电子设备 ...

  4. GPU工作原理,可编程渲染管线,图形流水线和GPU架构

    由于计算机图形的性质,最图形管线已构造为计算状态与数据流动作为它们之间的数据流.每个阶段工作在一组元素,如顶点,三角形或像素.下图1 [ Shr99 ]给出了典型的OpenGL固定管道. 图1: 在 ...

  5. 探索编译软件栈新范式;高端GPU禁售的影响;陈天奇DL系统免费课程|AI系统前沿动态

    1. 高端GPU禁售传闻声起,BAT们遭遇紧张时刻 互联网企业成为此次制裁波及的主要对象.行业人士指出,互联网厂商出于对性能等因素考虑,对国产CPU.GPU普遍接纳度不高,此次事件应为互联网厂商预警, ...

  6. GPU架构与桌面级图形显卡

    GPU架构与桌面级图形显卡 GPU芯片 设计为主的集成电路高科技公司.致力于创新面向元计算应用的新一代GPU,构建融合视觉计算.3D图形计算.科学计算及人工智能计算的综合计算平台,建立基于云原生GPU ...

  7. GPU及GPU通用计算编程模型简介

    以下内容来自网络总结: NVIDIA公司在1999年发布GeForce256时首先提出GPU(图形处理器)的概念,随后大量复杂的应用需求促使整个产业蓬勃发展至今. GPU英文全称Graphic Pro ...

  8. 移动端工程架构与后端工程架构的思想摩擦之旅(1)

    此文已由作者黎星授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 记资源投放后端工程的架构调整与优化 架构思考 一直以来对软件工程架构有着极大的兴趣,无论是之前负责的移动端And ...

  9. GPU架构(三十三)

    一.导言 对于大多数图形渲染开发者,GPU是既熟悉又陌生的部件,熟悉的是每天都需要跟它打交道,陌生的是GPU就如一个黑盒,不知道其内部硬件架构,更无从谈及其运行机制. 本文以NVIDIA作为主线,将试 ...

最新文章

  1. 开源点云实时压缩方案测试
  2. AI服务器的设计与实现
  3. java OpenCV 图片清晰度、色偏和亮度检测
  4. MongoDB负载信息一目了然 阿里云HDM重磅发布MongoDB监控和诊断功
  5. iOS开发之pch文件的正确使用
  6. java spring框架怎么学_JAVA学习之路~spring框架(一)
  7. boost::fusion::zip用法的测试程序
  8. 得胜php100怎么样,优缺点评测得胜Q麦评价如何?怎么样呢?老司机透漏
  9. 阿里健康研究院:仅17%人群拥有高质量睡眠 4成95后00后天天熬夜
  10. HTTP的⼏种请求⽅法及⽤途小谈(面试)
  11. Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
  12. Java学习笔记——正则表达式
  13. 关于table固定宽高以及td内容过长换行的解决办法
  14. pyqt5标签中的字设置不同字体_PyQt5 控件字体样式等设置的实现
  15. 划分子网和构造超网(一)
  16. 【C语言】C语言的简介
  17. 直流无刷电机及Matlab/Simulink驱动仿真
  18. 统计学(3)——数据抽样方法的细节
  19. linux系统键盘被锁定,在Linux下锁住键盘和鼠标而不锁屏
  20. 简单介绍如何应用【Poi-tl】将【个人简历】导出为【docx】格式的【word】文档

热门文章

  1. 虚拟服务器传文件,虚拟机与主机传输文件
  2. 各大高校自曝状态一览 排名不分先后
  3. 解决tomcat安装配置后localhost 打不开
  4. 笔记|滴滴iOS客户端的架构,组件化,技术选型
  5. iOS客户端学习-Prefix.pch文件
  6. 洛谷P1710地铁涨价
  7. su:认证失败,同时,sudo passwd失效,不在sudors中,此事将被报告
  8. 西欧5800计算器坐标正反算程序
  9. python中将字符变为大写_python 输入一个字符,是小写转换为大写,大写转换为小写,其他字符原样输出...
  10. linux系统安装s3fs,利用s3fs 将 s3 bucket 挂载到Linux目录