前言:想要写出一篇引人入胜的文章?我们特意为您整理了图形命令大规模并行程序设计方法范文,希望能给你带来灵感和参考,敬请阅读。
摘要:超长图形流水线中图形命令执行的并行度直接制约图形处理的绘图及计算性能,图形命令解析程序完成图形接口到硬件可识别任务的映射,通过图形绘制接口的特征分类与特征提取,提出一种满足图形指令功能解析、符合图形流水线任务映射的编程结构和程序设计方法,加速了图形命令处理,并通过分析任务的处理流程与特征,设计了运行管理、中断管理与低功耗管理,提高了程序设计及功能执行的健壮性与时效性。
关键词:图形命令;大规模并行;命令处理器
引言
从1999年第一款图形处理器诞生起,图形处理架构发展经历了固定管线架构、分离染色器可编程架构和大规模统一染色阵列架构,提供的图形绘制能力、计算能力大幅提升,因其卓越的数据处理性能,图形处理技术广泛应用于显示系统、视觉计算、自动驾驶、目标识别与跟踪、人工智能等领域。图形绘制的编程模式如图1所示,图形应用程序通过调用标准的图形绘制接口完成场景绘制,图形处理器接收标准图形绘制接口、处理、并将最终的像素数据存储在帧缓冲区,经由显示器输出显示画面。目前常用的3D图形处理接口标准包括OpenGL和DirectX接口标准。
1图形命令特征分析
标准图形任务处理标准接口众多且不断发展,但并未对图形处理流水线提出本质性的改变,各大厂商对图形流水线的划分基本遵循如图2所示的结构[1],只是在形处理流水线各单元功能细分或实现方式上有所不同。
1.1图形绘制接口特征分类
通过分析标准图形绘制接口,将接口功能与图形处理流水线进行功能映射,按照绘图接口的作用范围及实现功能,将图形绘制接口分为如下三类:a)数据准备类接口。完成图形绘制之前的纹理数据加载、缓冲区数据加载、显示列表数据加载等准备工作。b)属性配置类接口。标准图形绘制接口中,约70%的接口函数都是用于完成某一类功能的参数配置或改变图形流水线中某一单元的运行状态,此类接口并不会直接的影响绘图结果[2]。c)绘制类接口。包括顶点类绘制接口及像素类绘制接口,不会改变图形流水线的状态,但直接影响最终的图形绘制结果。顶点类绘制接口经过顶点处理、几何处理、光栅化、片段处理及像素处理,最后输出显示;像素类绘制接口只经过像素处理,最后输出显示。
1.2图形绘制接口特征提取
数据准备类接口完成CPU与GPU之间的数据传输,分析OpenGL接口的特性可知,数据传输类接口与数据解析使用类接口分别实现,所以在数据准备类接口发起操作后不需要等待传输完成,即可执行后续命令,直到相应数据解析使用时再判断数据传输完成状态,加快了指令之间的并行度,避免了不相关指令之间的相互等待而造成的资源浪费[3]。属性配置类接口所占的比例很高,执行效率直接影响绘图效率,若采用串行执行的方式实现,既浪费硬件资源又影响接口的处理性能,结合属性配置类接口不直接影响绘图结果,仅配置相关模块属性状态的特点,采用流水线资源锁和并行属性配置的方式实现,减少了属性配置类接口之间的等待时间,统一了实现方式,加快了图形流水线的运行。绘制类接口类型众多、参数数量多变,为了加快数据传输与数据解析的效率,采用变长指令、固定格式指令解析的方法[4],即统一接口类型及参数数量,但不限制数据体的个数(只规定数据体个数的最大最小值),加速绘制类接口的数据传输,减少接口解析消耗。
1.3图形绘制接口的解析方式
根据图形绘制接口的解析特征,实现如下两种命令格式,用于映射各种图形任务的组合。类型1配置类图形命令配置类图形命令实现数据准备类接口和属性配置类接口,其命令格式如下所示,其中命令包头包括接口类型编码,用于识别当前命令的类型;接口参数个数,提供当前命令所携带的参数信息;参数信息存储首地址,用于配置图形属性寄存器。命令格式1:接口类型+参数信息+数据体1+…+数据体N类型2数据类图形命令数据类命令实现绘制类接口,由于图形绘制类接口类型及参数类型众多,如glVertex类型的命令包括了三种接口类型及八种数据类型,为了便于实现及统一管理,不同接口类型的格式转换及类型转换由主机驱动完成,命令解析程序只针对特定一种格式进行解析。命令格式如下所示,其中命令包头包括接口类型编码,用于识别当前命令的类型;接口参数个数,提供当前命令所携带的参数信息;参数信息分量个数,用于指定当前绘制类接口一套属性所携带的参数个数;参数信息存储首地址,用于配置图形属性寄存器。命令格式2:接口类型+参数信息+参数分量信息+数据体1+…+数据体N
2图形命令解析染色程序结构设计
图形应用程序特征如图3所示,数据准备类接口、属性配置类接口用于完成图形状态机的数据准备及状态配置,绘制类接口用于发送绘图操作生成新的顶点数据及像素数据。因此图形命令解析的染色程序主要是针对数据准备类接口、属性配置类接口的任务特征,高效完成图形状态机的设置,提高图形绘制的速率。根据处理任务的特征,采用RISC处理器+汇编驱动软件来完成图形接口任务的解析,保证了任务扩展的灵活性与解析处理的高效性[5]。
2.1图形命令解析程序功能设计
图形命令解析是将标准的图形接口解析为多个独立、图形处理硬件可识别的图形处理任务,由图形流水单元完成图形任务的执行。其处理流程如下:a)接收从主机传输的图形命令。b)识别图形命令,判断当前命令的合法性。c)若为合法命令,进行图形命令解析,包括图形属性寄存器配置、DMA配置、图形功能码发送,图形状态同步等操作;若为非法命令,进行数据记录、错误信息记录。其中:图形命令接收、识别、判断合法性、图形任务映射解析及错误信息记录由软件实现,保证图形接口处理的灵活性,可扩展性;图形任务的执行由硬件实现,保证功能的高效性与实时性,其流程如图4所示。图形命令解析软件伪代码结构如下所示:在汇编代码中以上所示的伪代码进行编码存在如下几个问题:a)获取到命令后匹配操作效率低,第一条命令需要进行一次判断,第n次操作需要作n次判断,平均匹配一条命令需要2/n次判断;b)图形指令的发送时机与图形流水线中各单元状态相关,若每条图形指令都等待上一条指令执行完成,执行效率较低;c)针对不同的应用场景,驱动的函数排布影响RISC处理器的取指效率、指令存储缺页率,频繁的指令页替换会导致访存效率低下[6]。针对以上问题,对驱动软件进行的优化操作如下:a)在每条命令包头中增加绘图函数的入口地址信息,采用哈希跳转的方式,当识别到绘图命令后,直接跳转到相应命令的入口地址或在命令中入口地址信息,位数较少时采用二次跳转实现,实现结构如图5所示,相较串行查找,哈希跳转查找提高了执行效率。b)定义图形流水线中各单元的状态,当接收到一条绘图命令后,根据包头信息识别当前命令,且只判断当前绘图命令起作用的单元及流水线中之前的单元都为空闲,则当前绘图命令具备发送处理的前提,可以发送的图形流水线中进行处理[7]。例如glClip⁃Plane命令在平面裁剪单元起作用,因此只需要判断图形流水线中模型变换单元、顶点光照单元、图元装配单元及平面裁剪单元都空闲时,才能够发送glClipPlane命令。c)在特定场景时,使用的绘图函数是固定的,因此可以根据具体的应用场景扫描得到函数的API种类及调用次数,指令CACHE页大小及CACHE调度策略,排布驱动程序,减少驱动代码量,降低CACHE缺页率[8]。
2.2图形命令解析任务管理设计
图形命令解析任务管理覆盖了RISC运行过程中运行状态管理、错误管理、中断处理及低功耗管理[9],在提供图形命令解析性能的同时,加强了健壮性设计,可靠性设计,提升了有效功耗比。
2.2.1运行流程管理为了保证RISC程序运行结果的可预期,将运行流程分为五种状态进行管理。上电后先加载染色器程序,加载完成后RISC处理器开始运行,根据程序的运行过程将RISC处理器的运行状态分为自检状态、初始化状态、空闲状态、解析命令状态、错误状态。RISC处理运行首先进行上电自检,上电自检内容包括了指令集、可访问资源、处理通路等,是保证处理器正常运行最基本的检测行为,若自检未通过,则进入错误状态。在初始化状态中,软件配置通用寄存器、图形属性参数、片上存储信息等为绘图接口规定的初始值,完成参数准备。初始化完成后,当RISC接收到需要处理的图形命令即进入解析命令状态,解析完成后若没有新的需要处理的图形命令即进入空闲状态,在执行解析处理的过程中若发生错误则进入错误状态。以软件插桩的方式将状态信息的设置分布在图形命令解析处理的过程中。
2.2.2中断管理图形命令解析过程中可能因为资源锁状态、FIFO状态、DMA资源状态等条件无法满足而导致命令解析的超长等待时间,进而会将图形流水线挂死。因此采用中断处理方式,在开始解析命令时配置看门狗使能及计数信息,在解析命令结束时禁止看门狗功能,以此来约束图形命令解析的时间[10]。当出现超时中断,进行现场信息记录,判断中断原因及类型,并进行相应的中断处理。
2.2.3低功耗管理在高性能图形处理器运行过程中,并不是所有的命令都需要通过RISC解析处理,因此在多数场景下RISC解析执行是不连续的,在不需要解析处理时RISC处理器会进入低功耗模式[11],不进行取指、译码等操作,直到有图形命令唤醒RISC处理器从指定地址执行解析操作。RISC处理器的状态迁移如图6所示。
3图形命令解析染色程序验证
面向图形命令解析染色程序运行机制及实现功能,将验证内容分为染色程序通路验证、染色程序命令解析验证、染色程序管理验证[12]。染色程序通路验证覆盖染色程序的每一个分支处理通路,保证图形命令解析过程数据处理的正确性;染色程序命令解析验证覆盖图形命令及参数与染色程序通路之间的对应关系,确保图形命令解析任务的正确性;染色程序管理验证包括了运行流程管理、中断管理等功能,验证染色程序运行的正确性、健壮性、可监控性。染色程序功能验证示例如图7所示,覆盖了图形流水线的典型功能。
4结束语
超长流水线中断流与访存等待延时等原因极大地影响了流水线的执行效率。本文在分析图形流水线功能划分,图形命令任务映射,图形访存属性特征的基础上,提出了一种可并行的图形命令解析程序设计方法,通过将命令任务逐类分解,减少不相关命令之间的等待延时等操作,提高了任务的并行性,加速了流水线任务处理,实现了低延时,高效率的图形任务解析。
作者:刘晖 田泽 张琛 苏东阁 单位:中国航空工业西安航空计算技术研究所