国产平台嵌入式高性能图形方案的研究与应用
2018-05-14胡明星肖博峰游夏
胡明星 肖博峰 游夏
摘要:为了提升显示应用在国产软硬件平台上的性能,本文提出了GPU显示芯片搭配国产CPU的嵌入式高性能图形方案。文中介绍了基于OpenGL ES的硬加速技术和QT5.5图形系统的分层模块化设计,以及在龙芯平台和锐华操作系统中使用的关键技术,最后通过锐华和linux操作系统的对比数据,证明了图形性能得到了显著的提高,满足嵌入式图形应用需求。
关键词:国产平台图形方案;GPU硬件加速驱动;OpenGL ES协议;QT5.5图形系统
中图分类号:TP273.5 文献标识码:A 文章编号:1007-9416(2018)02-0094-03
1 概述
随着嵌入式显示技术的快速发展,各种尺寸和能力增强的嵌入式显示设备被部署在车辆、船舶、飞机以及士兵的手中,实现更逼真、更立体、更高速的图象显示和数据处理。这些高性能显示设备对嵌入式图形处理能力提出了更高的要求,当前通过CPU实现的图形渲染引擎在国产CPU上性能低下,无法支撑日益复杂的应用需求。出于信息安全和国家自主可控考虑,将GPU加速驱动应用到国产处理器的高性能图形系统中具有重要的理论和现实意义。
嵌入式高性能图形解决方案采用了锐华嵌入式实时操作系统,充分利用AMD E8860显示芯片的硬件加速性能,在国产龙芯CPU的硬件平台下,以QT5.5图形系统为基础图形界面框架,配备OpenGL ES标准的三维图形渲染引擎,实现分辨率高达1920x1600的多屏显示能力要求的二维/三维图形引擎。
2 高性能图形引擎的总体设计
嵌入式高性能图形方案将采用层次化、模块化设计,其构架如图1所示。
(1)硬件:龙芯3A2000 CPU处理器是具有自主知识产权的处理芯片,该芯片作为独立的CPU具有高性能低功耗的特点,广泛使用在军用嵌入式系统中。支持渲染编程的AMD E8860图形显示芯片具备多屏高分辨率拼接显示能力和高性能OpenCL并行运算能力,可以将控制、信号处理和图形集成于一个并行计算与显示处理模块中,体现了完美的协同运算和显示功能。
(2)操作系统层:龙芯处理器搭载锐华嵌入式实时操作系统的纯国产嵌入式平台已成为多项信息产业科研项目的研发平台。锐华操作系统采用64位操作系统内核,支持64位国产龙芯处理器。基于GPU的硬加速驱动框架屏蔽了不同显示芯片和操作系统的差异,实现了E8860显示芯片的图形硬加速驱动,支撑了三维图形渲染引擎和二维图形引擎的高效显示。
(3)图形引擎层:OpenGL ES图形绘制引擎为用户提供支持加速高效的符合OpenGL ES标准的三维图形渲染接口,并为QT5.5提供支撑。基于QT5.5的二维图形界面框架提供了高效的二维控件接口及与三维视景融合的人机交互窗口接口。
(4)应用层:高性能的图形引擎可应用于战场态势可视化、雷达航迹绘制、地理信息实时显示等二维、三维图形渲染,在嵌入式图形应用方面有广泛的推广前景。
3 高性能图形引擎的关键技术
3.1 图形引擎的优化技术
决定图形绘制性能的因素,除了本身图形芯片尽量选择性能高的GPU以外,还取决于内存拷贝的速度、DMA传送速度、GPU图形硬加速能力、图形应用的优化等。因此,在国产嵌入式平台CPU的条件下,提高图形引擎性能的途径如下:
(1)优化C库的技术。根据不同的处理器结构特性采用汇编语言编写;C库中的memcpy、memmove等部分接口,改造原先逐字节拷贝的实现方式。根据龙芯CPU的字长特点,采用64位load/store指令一次以8字节(64位)拷贝来提高访问的位宽及速度;
(2)提高PCI总线DMA传送速度。在图形引擎中,数据交换是最为频繁的功能,提高DMA传送速度会大大降低CPU的资源占有率。针对处理器的cache的特性,避免数据交换过程中频繁的cache不命中情况,程序中确保数据连续读取或写入一整条cacheline。
(3)避免非对齐方式访问。非对齐方式访问内存频繁发生会导致处理器性能降低,因此在图形引擎设计上,在定义数据结构和对数据进行存储分配时,避免非对齐的地址分配。针对源地址和目标地址不对齐情况,通过先拷贝部分数据后,再使得源地址和目标地址对齐,从而使用高位宽的访存指令。
(4)采用GPU图形硬件加速技术。图形硬件加速的基本要求是在硬件层中要有显示芯片或独立显卡,实现基于GPU符合OpenGL ES标准的三维图形渲染引擎驱动,支持区域拷贝、矩形填充、纹理显示等硬件加速接口,为二维图形引擎奠定良好的基础。
(5)图形应用的优化。把应用任务分布在多核上运行,降低单个CPU的负荷,发挥CPU多核的计算能力,实现SMP模式下的绘制。
3.2 图形引擎设计主要关键技术
(1)GPU显存空间管理机制。GPU显存空间管理机制决定了显示资源在显存里的分配和使用情况。当显存中出现非法数据时,GPU将由于无法解析非法指令而陷入未知状态,因此需要采取恰当的措施确保显存管理中不发生越界或非法使用的情况。为了减少显存碎片,设计驱动的抽象层必须基于堆的空间管理机制来管理显存的分配。实现基于硬件的内存对齐、基于空间管理机制及固定类型资源(如纹理、顶点数据、帧缓存、环状命令队列等)的创建。在堆中创建批量的子缓存池,可以确保不同类型资源数据不发生越界的危险,设计可变长的资源数据来分割成多个子缓存进行存储,避免产生内存碎片,确保DMA传送连续空间数据的传送效率。
(2)GPU硬加速驱动。对龙芯平台下GPU主存地址空间、命令缓冲与传输机制及命令包的特点,实现GPU的硬件加速驱动。设计思想是将GPU驱动分为用户态驱动和内核态驱动两个部分。用户态驱动主要负责从三维图形渲染引擎数据的传递以及顶点阶段的编译与封装过程。内核态驱动主要负责显存管理、中断控制以及函数表等,并将GPU对硬件的操作封装成上层所调用的应用接口函数。驱动结构分为两个部分:软件处理部分和硬件處理部分。软件部分会将顶点处理的投影变换等矢量变换都交给CPU来处理,硬件部分会把传入的顶点数据与指令传递给GPU,然后利用GPU的处理单元实现绘制功能。GPU驱动处理流程图如图2所示。
(3)高效的渲染引擎模式。渲染引擎模式包括着色器和渲染编译器。着色器是采用GLSL高级语言编写的一段能够针对3D对象进行操作,并被GPU所执行的程序。渲染编译器是允许应用程序对渲染进行即时编译,高效的静态编译将确保渲染目标代码生成的效率。在使用方法上,开发者将3D对象着色编程后通过静态编译器进行编译,生成GPU识别的特定的二进制字节码并预先下装到目标平台中,在运行时GPU直接读取二进制字节码在界面中进行精细的逐点着色。这种静态高效的渲染引擎模式设计模式使三维渲染效果的性能得到大大提升。
3.3 OpenGL协议栈与QT5.5库的适配
为了在同一视窗下同时绘制2D控件和3D对象(如纹理按钮、逐帧显示的地图或三维场景),我们将抛弃繁杂低效的X窗口架构,采用最新的EGL+OpenGL ES架构,发挥底层OpenGL底层硬加速驱动在龙芯3A平台上顺畅运行,需要开启QT的configure参数的几个选项如下:
./configure -arch mips -xplatform mipsel-elf-g++ -eglfs opengl es2。
4 测试与实验结果
4.1 性能测试数据
分别在锐华和Ubuntu linux操作系统上进行图形绘制对比测试。相关的软硬件情况:CPU型号为龙芯3A2000,显示芯片组型号为AMD E8860;锐华操作系统为国产嵌入式实时操作系统,版本号为4.7.1,使用了基于OpenGL的硬加速驱动;Ubuntu linux操作系统安装了开源驱动MESA。设置分辨率位1024x768,采用性能测试程序ES2Bench和glMarkES2。测试的结果如表1所示。通过测试数据对比,证明了在锐华的图形性能优于linux操作系统。
4.2 基本图元性能分析
ES2Bench主要是测试画线(Line)、画三角形(Triangle)等基本图元在不同绘制模式下的绘制性能,单位为每秒多少条线(lps),每秒多少个三角形(tps)。绘制模式分为四种:对应顶点数据在内存中、顶点数据和索引数据均在内存中、顶点数据在显存中、顶点数据和索引数据均在显存中。从性能对比分析可以看出,在绘制线、三角形时,ReWorks的硬加速驱动性能明显于开源驱动mesa软件绘制引擎(1.5-10倍的绘制速度),说明在硬加速驱动中确实开启了基本图元的硬加速引擎。
glMarkES2主要测试了GPU 纹理贴图及纹理滤波、顶点着色器功能、片段着色器功能。基于Reworks的硬加速驱动相比较于开源软件mesa绘制引擎,性能均有明显上升,达20倍以上。
4.3 雷达和QT用例性能分析
Radar用例设计了一个基本的雷达显控软件,该软件主要实现了雷达状态显示,QT接口设计了界面控制,OpenGL接口绘制雷达扫描线和雷达静止目标点迹。在不同的雷达扫描周期下,显示流畅。基于linux由于其中包含一部分运算依赖于CPU, 整体应用在硬加速驱动相比较开源软加速引擎上的表现大约提升5倍左右。如图3所示。
5 结语
文中提出了在国产平台上的一种高性能图形解决方案,本方案充分利用AMD E8860显示芯片的3D图形加速,对国产CPU和操作系统的适配优化,使整个系统在图形处理方面有了很大的改进,减轻了CPU的处理负担。通过测试,在不开启GPU加速时,GUI界面的最大刷新速率为12fps至13fps,而在开启硬件加速之后最大刷新速率提高到了28fps至30fps。圖形应用验证经过图形加速后的GUI 界面响应大大加快, 不同界面的切换过程也没有垂帘效应和拖动延迟,图形性能有了显著的提高。
参考文献
[1]蒋飞.基于嵌入式Linux系统的数字电视GUI图形加速设计[D].北京:北京邮电大学,2012.
[2]徐广毅,张晓林,崔迎炜,等.嵌入式Linux 系统中GUI系统的研究与移植[J].单片机与嵌入式系统应用,2004.10:11-14.
[3]徐智林,周可风,林金龙. 一种基于嵌入式Linux 图形用户接口的实现[J].电脑开发与应用,2006,(1):27-29.
[4]陈皓,吴健学.一种嵌入式GUI的实现方案[J].电子设计工程,2017,31(9):2127-2130.