Valhall是Arm公司推出的第四代Mali GPU架构,作为Bifrost架构的继任者,它在2018年后陆续应用于Mali-G5x和Mali-G7x系列产品中。与桌面级GPU追求绝对性能不同,Valhall的设计哲学是在严格的功耗和面积限制下,为移动设备提供最佳的每瓦特性能表现。这种设计理念使得Valhall架构在智能手机、平板电脑和嵌入式设备中广受欢迎。
现代GPU架构普遍采用统一着色器核心设计,Valhall也不例外。这种设计意味着GPU中只存在一种硬件着色器处理器类型,却能灵活执行顶点着色器、片段着色器和计算内核等多种任务。这种统一性带来了两大核心优势:首先,硬件资源可以根据工作负载动态分配,避免传统架构中顶点处理器和像素处理器负载不均导致的资源闲置;其次,简化了编程模型,开发者无需针对不同处理阶段特别优化资源使用。
Valhall架构最显著的改进在于其可编程核心部分。以Mali-G57和Mali-G77为例,每个执行核心(EC)包含两个处理引擎(PE),这些PE通过消息传递结构连接并共享数据处理单元。这种设计在保持硬件利用率的同时,提供了更高的灵活性。具体来看,每个Valhall核心每时钟周期能够完成:
这种并行处理能力使得Valhall架构特别适合移动端的图形渲染和通用计算场景。在实际应用中,比如手机游戏渲染管线,Valhall可以同时处理复杂的顶点变换、光照计算和像素着色,而不会因为架构限制导致管线停滞。
提示:在移动GPU性能分析时,不应仅关注峰值算力指标,更要考虑实际工作负载下的能效表现。Valhall的warp向量化和智能功耗管理使其在持续性能输出上往往优于理论算力更高的竞品。
Valhall的每个处理引擎(PE)包含三条独立的算术流水线,这种设计实现了指令级并行与数据级并行的完美结合:
FMA流水线:专注于复杂数学运算,特别是浮点矩阵乘加操作。在图形渲染中,这种能力对于顶点变换、光照计算等核心任务至关重要。FMA流水线采用16-wide设计,意味着每个周期可以同时处理16个32位浮点数的乘加运算。
CVT流水线:处理简单数学运算和数据类型转换。虽然名为"简单"运算,但CVT流水线对于常规算术操作如加减法、比较运算等的吞吐量同样达到16-wide。在实际着色器代码中,大约60%的算术指令可由CVT流水线处理。
SFU流水线:专用于特殊函数运算,如三角函数、对数、平方根等。SFU的宽度为4-wide,吞吐量是其他流水线的1/4。这反映了GPU设计中常见的面积-性能权衡——特殊函数单元占用较大芯片面积但使用频率相对较低。
这些流水线采用warp-based向量化方案提升硬件利用率。Valhall使用16-wide warp,将多个线程组合成束并行执行。从程序员视角看,这表现为标量32位操作流,而硬件则保持向量单元的效率优势。这种设计巧妙地解决了传统SIMD架构面临的"向量长度不匹配"问题。
Valhall的寄存器文件设计体现了对移动场景的深度优化:
这种灵活的寄存器分配策略使得Valhall能够适应从简单UI渲染到复杂3D场景的不同需求。在Android应用的UI渲染中,通常只需16-24个寄存器;而高端手机游戏中的复杂着色器则可能接近64个寄存器的上限。
Valhall对多种数据类型的原生支持是其能效优势的重要来源:
特别值得注意的是数据打包技术:单个16-wide warp数学单元可以每周期完成:
这种能力使得Valhall在移动端机器学习推理任务中表现出色。以图像分类为例,使用INT8量化的模型在Valhall架构上运行时,不仅速度比FP32快2倍,功耗还能降低40%。
Valhall的内存子系统设计充分考虑了移动平台的带宽限制:
这种缓存结构使得多个着色器核心可以高效共享数据,减少对主存的访问。在实际渲染过程中,相邻像素往往需要相似的纹理数据,共享缓存设计可以避免重复获取。
缓存行大小为64字节,这意味着理想情况下,一个warp的所有线程应访问同一缓存行内的数据。开发者可以通过以下方式优化内存访问模式:
Valhall的加载存储单元(LSU)负责除纹理采样外的所有内存访问,包括:
LSU的优化设计包括:
在顶点着色器中,当处理顶点属性数组时,LSU的跨线程合并功能特别有效。如果16个线程连续访问顶点属性,这些请求会被合并为单个内存事务,带宽利用率提升可达16倍。
Valhall的纹理单元是移动GPU中的佼佼者,其特点包括:
纹理操作性能受多种因素影响:
| 操作类型 | 性能影响系数 |
|---|---|
| 基础双线性过滤 | 1x |
| 三线性过滤 | 2x |
| 4x各向异性过滤 | 4x |
| 3D纹理 | 2x |
| FP32纹理 | 2x |
例如,使用4x各向异性过滤的RGBA16F 3D纹理,性能成本是基础双线性过滤的16倍(4×2×2)。在实际开发中,需要权衡纹理质量与性能,特别是在移动设备上。
传统GPU几何管线按固定顺序处理顶点:
这种方法存在明显效率问题:大量顶点在经过完整计算后最终被剔除,浪费了宝贵的计算资源和带宽。
Valhall的索引驱动顶点着色(IDVS)管线创新性地将几何处理分为四个阶段:
这种分阶段方法带来了两大关键优化:
为充分发挥IDVS优势,建议采用以下顶点数据布局策略:
例如,在OpenGL ES中可以这样组织顶点数据:
c复制// 位置缓冲区
struct PositionAttributes {
vec3 position;
vec3 normal;
};
// 变体缓冲区
struct VaryingAttributes {
vec2 texCoord;
vec4 color;
};
这种布局确保当顶点被剔除时,不会将变体属性拉入缓存,节省了约30-50%的几何处理带宽。
基于Valhall架构特点,推荐以下着色器优化技巧:
数据类型选择:
控制流优化:
内存访问模式:
vec4代替多个floatArm提供完整的GPU性能分析工具:
Arm Mobile Studio:全面的性能分析套件
Mali Graphics Debugger:实时图形调试
性能计数器:关键指标包括
Valhall架构下的典型性能问题及解决方案:
低算术单元利用率:
纹理带宽过高:
几何处理瓶颈:
通过深入理解Valhall架构的这些特性和优化方法,开发者能够在移动设备上实现桌面级视觉效果,同时保持优秀的电池续航和热表现。Arm的持续架构演进确保了Mali GPU在移动图形领域的领先地位,而掌握这些底层知识将帮助开发者充分发挥硬件潜力。