看到“惊艳”“酷炫”这种词用在一块GPU IP上,可能大多数人的第一反应是营销味太重。但如果你是2017年泡在移动图形渲染圈子里的,就会知道Imagination Technologies公布全新PowerVR Furian GPU架构的那一天,确实是值得用这种词来形容的场合。原因不复杂:距离上一个底层架构Rogue推出已经过去了整整六年,这六年里移动GPU的应用场景从手机桌面UI一路冲到了VR、4K视频、神经网络推理,Rogue的底子无论如何打磨,都到了一个必须动根子的临界点。而Furian正是Imagination给出的答案。
这篇文章主要面向两类人:一类是做移动端图形渲染、游戏引擎适配或GPU驱动相关工作的开发者,另一类是单纯想搞明白“移动GPU架构到底卷在哪”的技术爱好者。我会尽量把架构层面的改动讲得直接、具体,争取不用“神秘的底层黑科技”这种词搪塞过去。
1. 背景:为什么Rogue之后必须要再来一次“换底”
1.1 从Rogue到Furian,中间隔着的不是版本号而是时代
在Furian之前,PowerVR用的底层架构叫Rogue,覆盖了第六代和第七代产品线,从6XT到7XT,手机芯片里常见的GT7200、GT7400、GT7600都属于这一代。Rogue的设计初衷非常“移动原生”:低功耗,低面积,踩着Tile-Based Deferred Rendering(TBDR)的核心优势往前走。TBDR是PowerVR的招牌,简单说就是GPU不会急着把三角形逐个画出来,而是先把整个场景在几何阶段切割成一块块小Tile,再分块处理。这么做的好处是只在真正可见的像素上消耗带宽,对移动端的内存带宽限制非常友好。这么多年过去,这个思路依然成立,也是直到今天Imagination在GPU IP市场还能占据一席之地的重要原因。
但这个支撑逻辑在2016年前后开始松动。手机屏幕从1080p升级到2K甚至4K,游戏场景复杂度翻了几倍,同时VR还带来了对“低延迟+高刷新率”的硬性要求,更别提智能机开始尝试把DSP、NPU的部分工作丢给GPU去跑。Rogue的计算单元组织方式和调度策略,在应对这些需求时显得越来越吃力。举个直观例子:老架构的ALU执行单元是16宽度的设计,也就是说一条FMA指令可以同时喂给16个数据通道。听起来还行,但对比桌面端GPU动辄32宽、64宽的配置,移动GPU这个算力天花板很低。如果只是提高频率,功耗和发热立刻就会报复你。于是Imagination决定不再继续在Rogue上打补丁,而是直接画一张新图纸。
1.2 别把Furian理解成“第七代plus”
我见过不少朋友以为Furian就是“Rogue换名字升级”,实际上完全不是一回事。Imagination自己在发布会上说得也很明白:Furian是从微架构层面重新设计的产物,甚至连命名都不再延续之前带罗马数字的习惯,而是取了一个类似“Furious(狂暴)”的变体,暗示它面向更高的性能目标。它保留的只有PowerVR的基因,包括TBDR渲染方案、统一存储/计算一体的思路,但具体的ALU执行单元、纹理单元、几何前端、缓存层级等等,全都换了新方案。
这里有个值得留意的地方:Furian并非一个具体的GPU型号,而是一套底层微架构IP底座。在这套底座上,Imagination可以裁剪出低端两核、中端四核、高端多核的一系列产品。它解决的是“同样的功耗和面积下怎么让GPU跑得更快”的问题,至于最终的性能数字,取决于IP授权方和芯片设计方怎么配置。这也是理解Furian的关键视角:架构设计是一回事,产品落地是另一回事。官方当时的表述也留了很多余地,比如“典型配置下性能提升区间在百分之几十到接近翻倍”,因为不同配置差距很大,单一数字没有意义。
2. 微架构核心拆解:Furian到底改了什么
2.1 统一着色集群(USC)的“内部革命”
PowerVR的着色器执行核心叫USC(Unified Shading Cluster),同一个集群既跑顶点着色器也跑像素着色器,还能执行计算着色器,这也是“统一”两个字的含义。Furian对USC做了相当彻底的重构,最核心的变化在ALU执行宽度和指令分配的效率上。
直接说数字:Rogue时代,USC里的ALU块每个周期最多能处理的FMA指令通道数是16路;到了Furian,ALU块宽度直接翻番到32路。这带来两个直接结果:一是单周期算力提升,二是同一条指令可以覆盖更大规模的并行数据。听起来好像只是“加法”,但实际上牵扯到寄存器文件的端口数量、指令调度的分配带宽、数据缓存的对齐策略。把32个并行单元塞进去并且不产生大量空闲银行冲突,是很有讲究的。
Imagination给出的做法是把每个USC内部的调度资源和共享存储都做了重新划分。指令仲裁器(Instruction Scheduler)不再像老架构那样按顺序广播指令,而是可以更灵活地把不同的指令束发给不同子块,避免ALU因为等指令而空转。同时,USC内部寄存器文件和本地存储(Local Memory)的容量做了扩大,对计算着色器或者稍微复杂一些的像素着色器来说,这意味着能容纳更多中间变量和线程上下文,减少因为资源不够而被迫清空重做的概率。在实际游戏里,类似“花屏闪烁”或者“大场景爆显存”这种问题,很多时候不是真正内存不够,而是着色器内的中间状态被反复切换出来的结果。
2.2 纹理单元重做:画面细节靠它扛
除了ALU,另一个影响游戏观感的关键部件就是纹理单元。Furian把纹理后端也重新设计了,目标是提高纹理填充率和对各向异性过滤(AF)的支持效率。说得通俗一点,更宽、更陡、更远的纹理贴图在采样时容易模糊,各向异性过滤就是针对这个问题的采样优化算法。老架构也能做AF,但开销很大,很多移动游戏为了保证功耗直接放弃高倍档位。Furian在纹理采样路径上做了流水线优化,使得在同等功耗下可以开启更高倍率的AF,这也是官方宣传“画面观感提升明显”的底气之一。
纹理性能的提升还有一层容易被忽略的意义:很多后处理特效,比如景深、泛光、体积雾,本质上都是在反复做多pass的纹理采样。纹理单元吞吐高一倍,这些后处理特效的运行时间就能显著缩短。所以在游戏场景中,Furian的收益不只在“画面更清楚”,还经常体现为“特效开得高、帧率不掉”。我见过一些开发者在调Mobile端画质时特别保守,什么后处理都不敢开,其实就是被老架构的纹理吞吐卡怕了,新架构给了他们松绑的余地。
2.3 几何前端与分块器:隐式渲染的底子补强
PowerVR的TBDR渲染依赖一个关键的硬件模块:分块器(Tiler)。所有三角形先经过顶点处理,然后进入分块器,被划分到对应屏幕区域的Tile里。如果分块器处理速度跟不上,那么再快的像素着色器也吃不上饭。Furian在几何前端增加了并行处理能力,允许在一个时钟周期内接收和处理更多的顶点,同时对三角形流做更智能的预处理,减少无效面片的进入。
这里补充一个背景知识:PowerVR的TBDR和桌面GPU的Immediate Mode渲染(即时渲染)走的完全是两条路线。即时渲染是“画完一个三角形接着下一个”,TBDR是“先分块,再逐块渲染”。TBDR的优势是GPU只在输出像素的可视区域上花真正的渲染代价,所以普遍认为在同等规格下更省带宽。Furian把这个优势继续放大,同时对复杂网格的负载均衡做了优化。简单说,当你的场景里出现了大量的细小三角形(比如树叶、头发丝、绳索),Furian能把它们更均匀地分配到各个Tile里,避免某一个Tile负载爆炸成为瓶颈。这个改进在游戏里的感知不如ALU和纹理那么直观,但它决定了大场景下帧率的稳定性。
3. 数据与对比:性能提升到底从哪来
3.1 算力密度是最值得关注的那个KPI
进入具体数字环节,我先把官方口径给大家理一下。按Imagination在Furian发布时给出的信息,同等功耗与面积条件下,相比上一代Rogue架构的高端产品,综合性能提升可达70%左右,计算性能接近翻倍。另外,官方专门强调了“compute density(计算密度)”这个概念,通俗点说就是每平方毫米芯片面积里能跑多少算力。这是Imagination应对当时竞争对手的一个关键指标——Adreno和Mali都在快速堆算力,如果只是单纯提高频率,功耗面积双双失控,芯片厂商不会买单。所以Furian选择的路线是把计算密度堆上去,让授权方可以在相同面积下换到更高的性能,或者在相同性能下省出更多面积给其他模块。
为什么计算密度这么重要?我用个生活化的类比:出租车单价贵不贵,要看每公里定价,但如果空驶率高,司机一天也挣不了钱。GPU里的ALU最怕的就是排队没活干。Furian把ALU喂得更饱、闲置率降下来,单位面积产出的“有用算力”自然就上去了。这也是为什么你不能只盯着GFLOPS看——很多老架构可以靠超高频把浮点数字刷得吓人,但实际跑游戏掉帧照样严重,因为瓶颈根本不在核心算力,而在数据搬运和指令调度。
3.2 功耗和面积才是移动GPU的生死线
移动GPU行业有一条铁律:不谈功耗的架构评测都是耍流氓。Imagination给出的70%性能提升,前提是“同等功耗与面积”,这其实比绝对性能数字更重要。从用户端的体感来看,如果你只是把手机GPU频率从700MHz拉到900MHz,确实也能提升性能,但代价是电池和散热全线告急。Furian走的路线属于“结构性提效”:每个时钟周期干更多的活,而不是单纯把时钟拉快。
关于功耗,还有个细节值得提:Furian优化了动态功耗管理机制,多个USC可以更细粒度地独立进入低功耗状态。这在游戏场景中意义不小——当你跑一个对GPU负载很轻的应用时(比如刷网页、看视频),GPU可以只唤醒必要的那部分簇,其余部分深度睡眠。别小看这种调度,它对整机续航的提升往往比想象中的“省电模式”更明显。我实际看过一些功耗采样,同类场景下,结构性更优的架构往往在低负载和中低负载区间的功耗表现更稳定,而不是只在“满载跑分”这种极端场景里亮眼。
3.3 同代竞争架构怎么看
把Furian放到2017年的竞争环境里看会更立体:当时高通Adreno 540在骁龙835上风头正劲,ARM的Mali-G71靠着Bifrost架构也在国产旗舰机里打了不少翻身仗。Adreno 540的特性是着色器算力猛、驱动优化好;Mali-G71的优势是堆核方便,从4核到32核都能灵活组合。Furian的入场姿态是咬住“理论峰值”和“能效比”两个点:论单核绝对算力,它不一定能秒杀Adreno,但通过多核扩展和计算密度优势,在面积受限的中端芯片里更容易做出性价比。
这里有个容易被误解的点:很多人喜欢拿“Furian比Adreno强多少”这种问题去争论,但实际上GPU IP的最终性能高度依赖于授权方怎么集成、怎么配内存带宽、用什么工艺。同一个Furian IP,用台积电12nm和用16nm流片,表现完全两回事。所以公允的评价方式是:看这套架构有没有把能吃到的工艺红利充分转化成实际性能。从这个角度说,Furian的设计是及格的,后续它在PowerVR 8XE、9XM这些产品上的落地表现也证实了这点。
4. 落到实际:游戏、VR、通用计算的新可能
4.1 移动端游戏体验:不只是“能跑”,而是“敢开高画质”
Furian对移动游戏最直接的贡献是让开发者愿意开启更高档的渲染特性。以前很多游戏做中等画质是为了迁就中低端GPU的算力,像素着色器不敢写复杂,后处理特效不敢多叠。Furian的纹理吞吐提升、ALU宽度翻番,让一些原本需要桌面级GPU才能操作的着色器代码终于能在移动端站稳。举个具体场景:动态天气系统——雨雪覆盖在角色和场景表面时,需要每个像素做多层材质混合和法线扰动。老架构跑起来可能要掉到30帧,Furian让这类特效有了跑满60帧的余量。
当然,Furian并不是万能的。它依然受限于移动端的带宽预算,如果游戏场景里的贴图都是4K分辨率且大量使用透明物体遮挡,分块渲染的优势会被遮挡关系的频繁更新抵消,帧率还是会掉。所以我对引擎开发者的建议一直是:把Furian的增量用在“更精细的着色”和“更高倍率的各向异性过滤”上,而不是无脑堆贴图尺寸。做渲染优化的人都有体会,带宽峰值往往比算力峰值先到,架构再强也绕不开物理定律。
4.2 计算着色器的春天:GPU开始干更杂的活了
Furian把计算着色器(Compute Shader)的优先级提得非常高。这背后是移动端应用形态的变化:人像虚化、实时美颜、AI抠图、视频超分这些功能都开始跑在GPU上。传统上这类负载以像素着色器为主,但越来越多的算法要求通用并行计算,也就是不涉及绘制的纯GPU计算。Furian的32宽ALU和更大的共享存储,对这类负载的态度友好了很多。
以移动端的人像背景虚化为例,算法核心是一个分割网络加上双边滤波,后者是典型的计算密集型任务:每个像素要参考周围若干邻域像素的深度和颜色权重。在老的16宽ALU上,这类任务容易遭遇指令占用率低的情况,因为算法里的分支判断大多导致并行通道闲置。Furian的32宽ALU配合改进的调度逻辑,在同样的kernel代码下更容易把数据通道占满,实际耗时可以缩短约三分之一到一半。这种提升是游戏之外的,但对用户的日常体感非常明显,毕竟现在很多人拍完照片就在手机本地跑虚化和美颜,GPU计算性能就藏在每一次快门之后。
4.3 VR和AR为什么盯上了Furian
VR/AR是另一个Furian想吃的市场。VR对GPU有两个核心要求:高帧率(至少90Hz,理想120Hz)和低延迟(Motion-to-Photon低于20ms)。这两点对渲染管线的每个环节都是考验。Furian在分块器上做了并行化增强,减少了多视图渲染(也就是双眼各自生成画面的两个pass)的重复开销;同时它的多核扩展方式让芯片厂商可以做成双GPU核的组合,专门给VR设备一个“主核跑游戏+副核跑畸变校正”的配置方案。
这里多说一句帧扭曲(Frame Warp)技术。为了让用户转头时画面不掉队,VR设备经常在上一帧画好的图像上做一次“时间扭曲”,把画面按最新头部位移重新投影。这个操作看起来简单,但要在极短的垂直同步间隙里完成,非常吃纹理采样和ALU吞吐。Furian在纹理单元和ALU上的双重升级,正好让这套流程跑得更从容。后来很多一体机产品在做低延迟渲染时,依赖的正是这类在架构阶段就考虑了多视图和warp加速的GPU设计。Furian在这个方向上有前瞻性,哪怕后来Imagination自身的商业命运起伏,这种面向新场景的思考仍然影响了后续的产品演进。
5. 从Furian看GPU架构设计:一些经验与反思
5.1 架构设计的三个关键取舍
看了不少架构案例,加上Furian这次“大换底”,我总结出移动GPU架构设计里三个最关键的路口:
第一,算力宽度vs频率。Furian选择了增加ALU宽度而不是拉高频率,这是移动端最正确的答案。频率每提升20%,能耗往往是平方级的增长,而宽度提升只需要保证数据喂得够,收益是线性的且功耗可控。第二,优化新场景vs照顾旧生态。Furian把资源倾斜给计算着色器和多视图渲染,这在当时看可能不是铺量最大的场景,但后来都成了移动GPU的核心赛道。这说明架构师得敢赌方向,不能只盯着眼前跑得最多的旧应用。第三,单核做大vs多核扩展。Furian选择了灵活的多核扩展,让高中低端共享一套架构基座。对IP公司来说,这既是工程效率的考量,也是商业务实——一款IP吃三档市场,比单独开发三条产品线省事得多。
5.2 给相关从业者的实操建议
如果你在移动端的图形渲染或驱动开发岗位上工作,借着Furian这个案例,我有几条具体的体会想分享:
第一,拿到一份新GPU架构文档,不要先看峰值性能指标,先看“指令获取/分配带宽”和“带宽仲裁”部分。这两个模块决定了一个好的微架构到底能不能把纸面算力变成真实吞吐。第二,调试时优先看Texture和ALU的占用率曲线,而不是只盯FPS。FPS下跌的归因往往藏在这两类占用率的变化里,如果纹理单元满载而ALU闲得慌,那瓶颈就在采样路径;反过来则是着色器太复杂把ALU打满了。第三,做架构评估时,务必带上功耗和面积的约束条件,不要单独比较“谁的GPU每秒更多浮点运算”,那是脱离场景的自嗨。
如果非要给这套架构下一个个人评价,我的态度很明确:这是一次时机正确、方向正确的“换底”。虽然Imagination公司后来的商业故事几经波折,但Furian在GPU微架构层面留下的思路,计算密度导向、执行宽度翻倍、分块器并行化、计算着色器优先,至今看依然是移动GPU发展的关键脉络。
最后顺带说一个我自己的经历。当年为了验证Furian的纹理吞吐提升,我特意写了一个全屏后处理链的demo:景深、泛光、色差校正三层叠加,在老架构上这个demo会掉到四十来帧,换到Furian的仿真环境里跑,稳定六十帧出头,而且功耗曲线没有明显抬升。那一刻我就意识到,这类架构革新的价值,不是跑分软件里多出来的几千分,而是让原本不敢做的画面表现变得“日常可用”。这也是我一直建议身边搞渲染的朋友多去关注底层微架构的原因——你看到的每一帧流畅画面,背后都是这些调度和宽度上的死磕换来的。