您的位置 首页 基础

ARM Mali GPU: 笼统机器帧管线化

图形工作负载的优化对于许多现代移动应用程序而言往往必不可少,因为几乎所有渲染现在都直接或间接地由基于

图形作业负载的优化关于许多现代移动应用程序而言往往必不行少,由于简直一切烘托现在都直接或间接地由根据 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 会搁置。关于以功能为重的加速器而言,一切这些搁置时刻都是绝然不行承受的。

为了去除这一搁置时刻,咱们运用 OpenGL ES 驱动程序来保持同步烘托行为的假象,而在面纱之后实践是以异步履行的方法处理烘托和帧交流。经过异步运转,咱们能够树立一个小小的作业储藏以答应创立一个管线,GPU 从管线的一端处理较旧的作业负载,而 CPU 则担任将新的作业推入另一端。这一方法的优势在于,只需管线装满,就一直有作业在 GPU 上运转,供给最佳的功能。

Mali GPU 管线中的作业单元是以烘托方针为单位进行计划的,其间烘托方针或许是屏幕缓存或离屏缓存。单个烘托方针经过两步处理。首要,GPU 为烘托方针中的一切制作调用处理极点上色[2]。然后,为整个烘托方针处理片段上色[3]。因而,Mali 的逻辑烘托管线包括三个阶段:CPU 处理阶段、几许处理阶段,以及片段处理阶段。

管线节省

观察力敏锐的读者或许已注意到,上图中片段部分的作业是三个运算中最慢的,被 CPU 和几许处理阶段甩得越来越远。这种景象并不罕见;大多数内容中要上色的片段远多于极点,因而片段上色一般是占主导地位的处理运算。

在实际中,最好要尽或许缩短从 CPU 作业完毕到帧被烘托之间的延时 – 对终究用户而言,最让人烦躁的莫过于在操作触控屏设备时,其触控事情输入和屏幕中数据显现之间呈现数百毫秒的不同步 – 所以,咱们不期望等候片段处理阶段的作业储藏变得过大。简而言之,咱们需求某种机制来定时减慢 CPU 线程,当管线满足满、能够保持杰出功能时中止把作业放入行列。

这种节省机制一般由主机窗口体系供给,而不是图形驱动程序自身。例如,在 Android上,咱们只要在知道缓冲方向时才干处理任何制作运算,由于用户或许会旋转其设备,形成帧巨细呈现改变。SurfaceFlinger— Android 窗口外表管理器 – 能够经过一个简略方法操控管线深度:当管线中排队等候烘托的缓冲数量超越 N 个时,回绝将缓冲返回到应用程序的图形仓库。

假如呈现这种景象,你就会看到:一旦每一帧到达“N”时 CPU 就会进入搁置状况,在内部阻挠 EGL 或 OpenGL

ES API 函数,直到显现屏耗费完一个待处理缓存,为新的烘托运算空出一个方位。

假如图形仓库的运转快于显现刷新率,相同的计划也可约束管线缓冲;在这一景象下,内容遭到VSYNC约束”并等候笔直空白(VSYNC同步)信号,该信号告知显现操控器它能够切换到下一缓冲。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/91278.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部