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