1、嵌入式GPU概述:GPU在嵌入式系统中的作用、嵌入式GPU与桌面GPU的区别、主流嵌入式GPU架构概览(Mali、Adreno、PowerVR)

大家好,我是你们的老朋友。今天咱们正式开篇,聊聊嵌入式GPU。

说实话,我入行那会儿,嵌入式系统里跑个简单的2D图形界面就算很了不起了。谁能想到现在手机上的游戏画质,都快追上当年的PS3了?这背后,嵌入式GPU功不可没。

1.1 GPU在嵌入式系统中的作用

很多人觉得GPU就是用来打游戏的。其实不然。在嵌入式系统里,GPU的角色要丰富得多。

  • 图形渲染:这是老本行。从手机UI的滑动流畅度,到车载仪表盘的3D导航,再到智能手表的表盘动画,都离不开GPU。
  • 通用计算(GPGPU):这个我重点提一下。我在做AI相机项目时,就发现用GPU跑图像预处理,比CPU快了一个数量级。像图像滤波、特征提取、甚至轻量级神经网络推理,GPU都能干。
  • 显示合成与输出:嵌入式系统里,GPU还负责把多个图层(比如状态栏、应用界面、弹窗)合成一帧,再送到屏幕。这个活儿看似简单,但做不好就会掉帧、撕裂。
  • 视频编解码加速:很多嵌入式GPU内部集成了视频处理单元。你刷抖音、看B站,其实GPU都在默默干活。

核心观点:在嵌入式系统里,GPU早已不是单纯的“画图卡”。它是图形、计算、显示、视频的“多面手”。

1.2 嵌入式GPU与桌面GPU的区别

你可能会问:都是GPU,能有多大区别?

区别大了去了。我当年从桌面显卡驱动转到嵌入式时,第一感觉就是——处处受限。

对比维度 桌面GPU 嵌入式GPU
功耗 几十瓦到几百瓦 几百毫瓦到几瓦
散热 主动风扇,甚至水冷 被动散热,靠手机壳
内存 独立显存(GDDR6/HBM) 共享系统内存(LPDDR)
带宽 几百GB/s 十几到几十GB/s
驱动模型 全功能,支持CUDA/Vulkan 精简驱动,常需定制
实时性要求 尽力而为,帧率波动可接受 必须稳定,不能卡顿

说白了,桌面GPU是“大力出奇迹”,嵌入式GPU是“螺蛳壳里做道场”。

举个例子。桌面GPU可以为了画质,把功耗拉到300W。嵌入式GPU呢?你手机玩原神,机身发烫到45度,用户就开始骂娘了。所以驱动里必须做精细的调频调压,甚至动态降分辨率。

我的经验:做嵌入式GPU驱动,脑子里要时刻绷着一根弦——功耗。我见过太多团队,功能调通了,一测功耗直接超标,又得从头优化。

1.3 主流嵌入式GPU架构概览

目前市面上主流的嵌入式GPU,基本就是三足鼎立:Mali、Adreno、PowerVR。我挨个说说。

1.3.1 Mali系列(ARM)

Mali是ARM家的亲儿子。你用的绝大多数安卓手机,尤其是中低端机型,里面都是Mali GPU。

  • 架构特点:采用分块渲染(Tile-Based Rendering)。把屏幕分成16x16或32x32的小块,逐块渲染。好处是带宽省,功耗低。
  • 驱动生态:ARM提供官方的Mali DDK(驱动开发套件)。但说实话,闭源部分不少,调试起来挺头疼。
  • 代表型号:Mali-G78、Mali-G610、Mali-G715。

避坑指南:我曾经在Mali G52上遇到过一个bug——高负载下纹理采样会随机出错。查了三天,最后发现是驱动里L2缓存配置参数写错了。嗯,这种坑,文档里根本不会写。

1.3.2 Adreno系列(Qualcomm)

Adreno是高通骁龙SoC里自带的GPU。性能强,驱动相对成熟。

  • 架构特点:也是分块渲染,但内部调度更激进。Adreno的着色器核心可以动态组合,灵活分配计算资源。
  • 驱动生态:高通提供闭源驱动,但会开源一部分内核模块(msm/drm驱动)。社区有freedreno开源驱动项目,但功能不全。
  • 代表型号:Adreno 660、Adreno 730、Adreno 740。

我个人觉得,Adreno的驱动文档比Mali要友好一些。但闭源就是闭源,出了问题你只能找高通FAE,自己改不了。

1.3.3 PowerVR系列(Imagination)

PowerVR是个老牌选手了。当年iPhone早期用的就是它。现在主要用在一些车载、IoT设备上。

  • 架构特点:PowerVR是分块渲染的鼻祖。它的核心思想是“延迟渲染”——先算可见性,再算着色。这样能省掉大量无效计算。
  • 驱动生态:Imagination提供完整的驱动源码(部分开源)。这对我们做深度定制非常友好。
  • 代表型号:PowerVR Series9、Series8XE。

一句话总结:Mali用户多,Adreno性能强,PowerVR架构巧。选哪个,看你项目需求。

1.4 小结

这一章我们聊了嵌入式GPU的定位、与桌面GPU的差异,以及三大主流架构。

你想想看,嵌入式GPU驱动开发,本质上就是在功耗、性能、带宽、实时性之间找平衡。没有银弹,只有不断踩坑、填坑。

下一章,我会带大家深入驱动开发的第一个环节——初始化流程。到时候咱们聊聊GPU是怎么从“睡醒”到“干活”的。

公众号:蓝海资料掘金营,微信deep3321