十三、附录 B:Android 硬件概述

不出所料,Android 操作系统运行在计算机硬件上。其他移动平台的开发人员可以依赖于对单一 CPU 架构、指令集和 GPU 类型的支持。如果 Android 开发者想要最大化他们应用的覆盖范围,他们就没有这种奢侈。

在本附录中,我们来看看 Android 平台上使用的主要 CPU 和 GPU 架构。

CPU 架构

目前,Android 平台上使用的主要 CPU 架构有三种。它们基于 ARM、MIPS 和 x86 指令集。

手臂ˌ武器ˌ袖子ˌ装备

ARM 目前在移动领域享有主导 CPU 架构的地位。ARM 架构最初是由 Acorn 在 20 世纪 80 年代创建的,用于桌面计算机系统。近年来,ARM 更普遍地被称为 CPU 指令集和架构的设计者,并没有制造自己的 CPU。

目前有两种不同类型的 ARM 许可证持有者。公司可以获得整个 CPU 的设计许可,然后为他们的设备制造,或者他们可以获得架构本身的许可,然后设计他们自己的 CPU。

ARM 目前最受欢迎的授权 CPU 是 Cortex-A9 和 Cortex-A15。Cortex-A9 是一种较旧且不太灵活的设计,可以在当今许多现代智能手机和架构中找到。NVIDIA 的 Tegra 3 平台包含一个四核 Cortex-A9 CPU,Galaxy Nexus 等手机包含双核 A9。

Cortex-A15 是一个更强大的 CPU,它在更高的温度下运行,比 A9 耗电更多。迄今为止,它仅用于高端产品,如 Nexus 10、三星 Galaxy S4 八核变体以及英伟达即将推出的 Tegra 4 芯片组。

高通基于 ARM 架构许可创建了自己的 CPU。该公司生产的骁龙片上系统(SoC)部件在许多现代设备中都可以找到。一个备受瞩目的例子是 Nexus 4 智能手机。

MIPS

当谈到 Android 时,MIPS 方面没有太多可说的,因为目前没有多少设备使用这种架构。然而,作为一家公司,MIPS 在游戏业务方面有着丰富的历史。Playstation、Playstation 2、任天堂 64 等游戏机都有 MIPS 打造的 CPU。

最近,MIPS 被 PowerVR GPUs 背后的公司 Imagination Technologies 收购。Android NDK 支持 MIPS 架构的构建,这是一个未来可能用于更多设备的 CPU。

x86

x86 体系结构在台式机和笔记本电脑中的地位由来已久。迄今为止,x86 在移动领域还没有太多的表现。这种情况可能即将改变,因为英特尔已经通过其 Atom 系列处理器在能效和性能方面取得了巨大进步。今年,他们的 Haswell 架构将更加节能,在未来几年,我们可能会开始看到英特尔台式机和移动处理器的融合。在这一点上,确保你的游戏能在 x86 上运行是非常重要的。

GPU 架构

Android 支持 Khronos 的 OpenGL ES APIs,这允许我们的游戏将图形驱动程序作为外部芯片,我们不需要关心这些。对于学习用本书中的 NDK 创建游戏的基础来说,这是一个非常好的方法;然而,在 Android 上创建高性能游戏需要更深入地了解可用的 GPU 架构。

powervr!power VR

目前最常见的 PowerVR GPU 芯片组是 SGX 系列芯片。PowerVR GPUs 在 GPU 界有着独特的架构。这些芯片的独特卖点是其基于图块的延迟渲染引擎。我们将分解这个短语来理解 PowerVR SGX 是如何操作的。

首先要考虑的是瓷砖。SGX 的工作原理是将屏幕分割成一系列小方块。当我们向驱动程序提交一个glDrawElements命令时,它会执行一个叫做宁滨的过程。每个绘制命令都被分入一个图块中。然后,使用将影响正在执行的图块的所有绘制命令,按顺序渲染图块。这一昂贵步骤的好处来自 GPU 本身。GPU 包含少量非常快速的片上内存,而不是必须不断访问主内存来读取深度值和写出像素颜色。该存储器足够大,可以包含处理该帧时读写单个图块所需的数据。填充从图块读取所需数据(如深度或模板值)的过程称为恢复,从图块通道写出数据的过程称为解析。

该术语的延期部分涉及 PowerVR 独特的隐藏表面移除(HSR)算法。处理图块时,GPU 会在执行片段着色器之前计算离相机最近的多边形的深度。这完全消除了对不透明对象的过度绘制,并且通过不必对隐藏多边形的纹理进行采样或写出它们的深度和颜色来节省存储器带宽,并且节省了与对将被覆盖的像素执行片段着色器相关联的片段处理时间。

这种方法的缺点是,它可能会限制具有大量顶点的场景的性能。

马里和阿德诺

对于开发者来说,Mali 和 Adreno 的高层架构非常相似。这两种 GPU 架构都实现了基于图块的渲染。就像在 PowerVR 芯片上一样,draw 命令被分箱并按图块执行,但它们不执行隐藏表面移除步骤。

相反,它们按照收到命令的顺序对每个图块执行命令。这被称为即时模式渲染(IMR)。然而,GPU 执行早期 z 拒绝;因此,开发人员可以在 GPU 成为瓶颈的游戏中提高性能,方法是将几何图形从最靠近相机的位置排序到最远的位置,以减少过度绘制。

整数〔t0〕

最后但并非最不重要的是 NVIDIA 的 Tegra 架构。与其他 GPU 相比,Tegra 的工作方式更像传统的桌面 GPU,因为它不使用平铺渲染。它只是按照接收的顺序执行所有的渲染命令。它还包含早期 z 拒绝测试,并将受益于几何图形的从前到后排序。