ARM Mali GPU: 抽象机器(一):帧管线化

分享到:
150
下一篇 >

图形工作负载的优化对于许多现代移动应用程序而言往往必不可少,因为几乎所有渲染现在都直接或间接地由基于OpenGL ES的渲染后端负责处理。本文介绍如何将ARM®DS-5™ Streamline™性能分析工具用于Google Nexus 10,对利用Mali™-T604 GPU的图形应用程序进行性能分析和优化。Streamline是一款强大的工具,能够深入细致地洞悉整个系统的行为,但也需要驾驭它的工程师能够解读相关数据,识别问题区域,进而提出修复建议。

对于初涉图形优化的开发人员而言,起步阶段总会遇到一些困难,所以我写了新的系列博文,给开发人员提供必要的知识,以便他们能够成功地针对Mali GPU进行优化。在整个系列博文中,我将阐述开发人员必须要考虑的基本宏观体系结构和行为、这些因素如何转化为能被内容触发的潜在问题,以及*终如何在

Streamline中找出这些问题。

抽象渲染机器

要想成功分析应用程序的图形性能,必须先掌握一个*基本的知识,也就是对OpenGL ES API底下系统运作方式建立一个心智模型,让工程师能够推断他们观察到的行为。

为避免让开发人员陷于驱动程序软件和硬件子系统的实施细节的沼泽之中(这些他们无法控制,因而价值有限),有必要定义一个简化的抽象机器,用作解读所观察到的行为的基础。这一机器包含三个有用部分,它们大体上是独立不相干的,所以我将在本系列博文的开头几篇中逐一介绍。不过,为了让你对它们有个初步印象,下面列出该模型的三个部分:

  • CPU-GPU渲染管线
  • 基于区块的渲染
  • 着色器核心架构

在本篇博文中,我们将探讨**个部分,即CPU-GPU渲染管线。

同步API,异步执行

务必要了解的一个基本知识是,OpenGL ES API上应用程序函数调用和这些API调用所需渲染运算的执行之间的临时关系。从应用程序的角度而言,OpenGL ES API被指定为同步API。应用程序进行一系列的函数调用来设置其下一绘制任务所需的状态,然后调用glDraw[1]函数(通常称为绘制调用)触发实际的绘制运算。由于API是同步的,执行绘制调用后的所有API行为都被指定为要像渲染运算已经发生一样进行,但在几乎所有硬件加速的OpenGL ES实现上,这只是一种由驱动程序堆栈维持的美妙假象。

与绘制调用相似,驱动程序维持的**个假象是帧末缓冲翻转。大多数头一次编写OpenGL ES应用程序的开发人员会告诉你,调用eglSwapBuffers将交换其应用程序的前缓冲和后缓冲。虽然这在逻辑上是对的,但驱动程序再一次维持了同步性的假象;在几乎所有平台上,实际的缓冲交换可能会在很久之后才会发生。

管线化

正如你所想到的,需要创造这一假象的原因在于性能。如果我们强制渲染运算真正同步发生,你就会面临这样的尴尬:CPU忙于创建下一绘制运算的状态时,GPU会闲置;GPU执行渲染时,CPU会闲置。对于以性能为重的加速器而言,所有这些闲置时间都是绝然不可接受的。

你可能感兴趣: 嵌入式 图片
无觅相关文章插件,快速提升流量