胡明星 肖博峰 游夏
摘要:為了提升顯示應用在國產軟硬件平臺上的性能,本文提出了GPU顯示芯片搭配國產CPU的嵌入式高性能圖形方案。文中介紹了基于OpenGL ES的硬加速技術和QT5.5圖形系統(tǒng)的分層模塊化設計,以及在龍芯平臺和銳華操作系統(tǒng)中使用的關鍵技術,最后通過銳華和linux操作系統(tǒng)的對比數(shù)據(jù),證明了圖形性能得到了顯著的提高,滿足嵌入式圖形應用需求。
關鍵詞:國產平臺圖形方案;GPU硬件加速驅動;OpenGL ES協(xié)議;QT5.5圖形系統(tǒng)
中圖分類號:TP273.5 文獻標識碼:A 文章編號:1007-9416(2018)02-0094-03
1 概述
隨著嵌入式顯示技術的快速發(fā)展,各種尺寸和能力增強的嵌入式顯示設備被部署在車輛、船舶、飛機以及士兵的手中,實現(xiàn)更逼真、更立體、更高速的圖象顯示和數(shù)據(jù)處理。這些高性能顯示設備對嵌入式圖形處理能力提出了更高的要求,當前通過CPU實現(xiàn)的圖形渲染引擎在國產CPU上性能低下,無法支撐日益復雜的應用需求。出于信息安全和國家自主可控考慮,將GPU加速驅動應用到國產處理器的高性能圖形系統(tǒng)中具有重要的理論和現(xiàn)實意義。
嵌入式高性能圖形解決方案采用了銳華嵌入式實時操作系統(tǒng),充分利用AMD E8860顯示芯片的硬件加速性能,在國產龍芯CPU的硬件平臺下,以QT5.5圖形系統(tǒng)為基礎圖形界面框架,配備OpenGL ES標準的三維圖形渲染引擎,實現(xiàn)分辨率高達1920x1600的多屏顯示能力要求的二維/三維圖形引擎。
2 高性能圖形引擎的總體設計
嵌入式高性能圖形方案將采用層次化、模塊化設計,其構架如圖1所示。
(1)硬件:龍芯3A2000 CPU處理器是具有自主知識產權的處理芯片,該芯片作為獨立的CPU具有高性能低功耗的特點,廣泛使用在軍用嵌入式系統(tǒng)中。支持渲染編程的AMD E8860圖形顯示芯片具備多屏高分辨率拼接顯示能力和高性能OpenCL并行運算能力,可以將控制、信號處理和圖形集成于一個并行計算與顯示處理模塊中,體現(xiàn)了完美的協(xié)同運算和顯示功能。
(2)操作系統(tǒng)層:龍芯處理器搭載銳華嵌入式實時操作系統(tǒng)的純國產嵌入式平臺已成為多項信息產業(yè)科研項目的研發(fā)平臺。銳華操作系統(tǒng)采用64位操作系統(tǒng)內核,支持64位國產龍芯處理器。基于GPU的硬加速驅動框架屏蔽了不同顯示芯片和操作系統(tǒng)的差異,實現(xiàn)了E8860顯示芯片的圖形硬加速驅動,支撐了三維圖形渲染引擎和二維圖形引擎的高效顯示。
(3)圖形引擎層:OpenGL ES圖形繪制引擎為用戶提供支持加速高效的符合OpenGL ES標準的三維圖形渲染接口,并為QT5.5提供支撐?;赒T5.5的二維圖形界面框架提供了高效的二維控件接口及與三維視景融合的人機交互窗口接口。
(4)應用層:高性能的圖形引擎可應用于戰(zhàn)場態(tài)勢可視化、雷達航跡繪制、地理信息實時顯示等二維、三維圖形渲染,在嵌入式圖形應用方面有廣泛的推廣前景。
3 高性能圖形引擎的關鍵技術
3.1 圖形引擎的優(yōu)化技術
決定圖形繪制性能的因素,除了本身圖形芯片盡量選擇性能高的GPU以外,還取決于內存拷貝的速度、DMA傳送速度、GPU圖形硬加速能力、圖形應用的優(yōu)化等。因此,在國產嵌入式平臺CPU的條件下,提高圖形引擎性能的途徑如下:
(1)優(yōu)化C庫的技術。根據(jù)不同的處理器結構特性采用匯編語言編寫;C庫中的memcpy、memmove等部分接口,改造原先逐字節(jié)拷貝的實現(xiàn)方式。根據(jù)龍芯CPU的字長特點,采用64位load/store指令一次以8字節(jié)(64位)拷貝來提高訪問的位寬及速度;
(2)提高PCI總線DMA傳送速度。在圖形引擎中,數(shù)據(jù)交換是最為頻繁的功能,提高DMA傳送速度會大大降低CPU的資源占有率。針對處理器的cache的特性,避免數(shù)據(jù)交換過程中頻繁的cache不命中情況,程序中確保數(shù)據(jù)連續(xù)讀取或寫入一整條cacheline。
(3)避免非對齊方式訪問。非對齊方式訪問內存頻繁發(fā)生會導致處理器性能降低,因此在圖形引擎設計上,在定義數(shù)據(jù)結構和對數(shù)據(jù)進行存儲分配時,避免非對齊的地址分配。針對源地址和目標地址不對齊情況,通過先拷貝部分數(shù)據(jù)后,再使得源地址和目標地址對齊,從而使用高位寬的訪存指令。
(4)采用GPU圖形硬件加速技術。圖形硬件加速的基本要求是在硬件層中要有顯示芯片或獨立顯卡,實現(xiàn)基于GPU符合OpenGL ES標準的三維圖形渲染引擎驅動,支持區(qū)域拷貝、矩形填充、紋理顯示等硬件加速接口,為二維圖形引擎奠定良好的基礎。
(5)圖形應用的優(yōu)化。把應用任務分布在多核上運行,降低單個CPU的負荷,發(fā)揮CPU多核的計算能力,實現(xiàn)SMP模式下的繪制。
3.2 圖形引擎設計主要關鍵技術
(1)GPU顯存空間管理機制。GPU顯存空間管理機制決定了顯示資源在顯存里的分配和使用情況。當顯存中出現(xiàn)非法數(shù)據(jù)時,GPU將由于無法解析非法指令而陷入未知狀態(tài),因此需要采取恰當?shù)拇胧┐_保顯存管理中不發(fā)生越界或非法使用的情況。為了減少顯存碎片,設計驅動的抽象層必須基于堆的空間管理機制來管理顯存的分配。實現(xiàn)基于硬件的內存對齊、基于空間管理機制及固定類型資源(如紋理、頂點數(shù)據(jù)、幀緩存、環(huán)狀命令隊列等)的創(chuàng)建。在堆中創(chuàng)建批量的子緩存池,可以確保不同類型資源數(shù)據(jù)不發(fā)生越界的危險,設計可變長的資源數(shù)據(jù)來分割成多個子緩存進行存儲,避免產生內存碎片,確保DMA傳送連續(xù)空間數(shù)據(jù)的傳送效率。
(2)GPU硬加速驅動。對龍芯平臺下GPU主存地址空間、命令緩沖與傳輸機制及命令包的特點,實現(xiàn)GPU的硬件加速驅動。設計思想是將GPU驅動分為用戶態(tài)驅動和內核態(tài)驅動兩個部分。用戶態(tài)驅動主要負責從三維圖形渲染引擎數(shù)據(jù)的傳遞以及頂點階段的編譯與封裝過程。內核態(tài)驅動主要負責顯存管理、中斷控制以及函數(shù)表等,并將GPU對硬件的操作封裝成上層所調用的應用接口函數(shù)。驅動結構分為兩個部分:軟件處理部分和硬件處理部分。軟件部分會將頂點處理的投影變換等矢量變換都交給CPU來處理,硬件部分會把傳入的頂點數(shù)據(jù)與指令傳遞給GPU,然后利用GPU的處理單元實現(xiàn)繪制功能。GPU驅動處理流程圖如圖2所示。
(3)高效的渲染引擎模式。渲染引擎模式包括著色器和渲染編譯器。著色器是采用GLSL高級語言編寫的一段能夠針對3D對象進行操作,并被GPU所執(zhí)行的程序。渲染編譯器是允許應用程序對渲染進行即時編譯,高效的靜態(tài)編譯將確保渲染目標代碼生成的效率。在使用方法上,開發(fā)者將3D對象著色編程后通過靜態(tài)編譯器進行編譯,生成GPU識別的特定的二進制字節(jié)碼并預先下裝到目標平臺中,在運行時GPU直接讀取二進制字節(jié)碼在界面中進行精細的逐點著色。這種靜態(tài)高效的渲染引擎模式設計模式使三維渲染效果的性能得到大大提升。
3.3 OpenGL協(xié)議棧與QT5.5庫的適配
為了在同一視窗下同時繪制2D控件和3D對象(如紋理按鈕、逐幀顯示的地圖或三維場景),我們將拋棄繁雜低效的X窗口架構,采用最新的EGL+OpenGL ES架構,發(fā)揮底層OpenGL底層硬加速驅動在龍芯3A平臺上順暢運行,需要開啟QT的configure參數(shù)的幾個選項如下:
./configure -arch mips -xplatform mipsel-elf-g++ -eglfs opengl es2。
4 測試與實驗結果
4.1 性能測試數(shù)據(jù)
分別在銳華和Ubuntu linux操作系統(tǒng)上進行圖形繪制對比測試。相關的軟硬件情況:CPU型號為龍芯3A2000,顯示芯片組型號為AMD E8860;銳華操作系統(tǒng)為國產嵌入式實時操作系統(tǒng),版本號為4.7.1,使用了基于OpenGL的硬加速驅動;Ubuntu linux操作系統(tǒng)安裝了開源驅動MESA。設置分辨率位1024x768,采用性能測試程序ES2Bench和glMarkES2。測試的結果如表1所示。通過測試數(shù)據(jù)對比,證明了在銳華的圖形性能優(yōu)于linux操作系統(tǒng)。
4.2 基本圖元性能分析
ES2Bench主要是測試畫線(Line)、畫三角形(Triangle)等基本圖元在不同繪制模式下的繪制性能,單位為每秒多少條線(lps),每秒多少個三角形(tps)。繪制模式分為四種:對應頂點數(shù)據(jù)在內存中、頂點數(shù)據(jù)和索引數(shù)據(jù)均在內存中、頂點數(shù)據(jù)在顯存中、頂點數(shù)據(jù)和索引數(shù)據(jù)均在顯存中。從性能對比分析可以看出,在繪制線、三角形時,ReWorks的硬加速驅動性能明顯于開源驅動mesa軟件繪制引擎(1.5-10倍的繪制速度),說明在硬加速驅動中確實開啟了基本圖元的硬加速引擎。
glMarkES2主要測試了GPU 紋理貼圖及紋理濾波、頂點著色器功能、片段著色器功能。基于Reworks的硬加速驅動相比較于開源軟件mesa繪制引擎,性能均有明顯上升,達20倍以上。
4.3 雷達和QT用例性能分析
Radar用例設計了一個基本的雷達顯控軟件,該軟件主要實現(xiàn)了雷達狀態(tài)顯示,QT接口設計了界面控制,OpenGL接口繪制雷達掃描線和雷達靜止目標點跡。在不同的雷達掃描周期下,顯示流暢?;趌inux由于其中包含一部分運算依賴于CPU, 整體應用在硬加速驅動相比較開源軟加速引擎上的表現(xiàn)大約提升5倍左右。如圖3所示。
5 結語
文中提出了在國產平臺上的一種高性能圖形解決方案,本方案充分利用AMD E8860顯示芯片的3D圖形加速,對國產CPU和操作系統(tǒng)的適配優(yōu)化,使整個系統(tǒng)在圖形處理方面有了很大的改進,減輕了CPU的處理負擔。通過測試,在不開啟GPU加速時,GUI界面的最大刷新速率為12fps至13fps,而在開啟硬件加速之后最大刷新速率提高到了28fps至30fps。圖形應用驗證經過圖形加速后的GUI 界面響應大大加快, 不同界面的切換過程也沒有垂簾效應和拖動延遲,圖形性能有了顯著的提高。
參考文獻
[1]蔣飛.基于嵌入式Linux系統(tǒng)的數(shù)字電視GUI圖形加速設計[D].北京:北京郵電大學,2012.
[2]徐廣毅,張曉林,崔迎煒,等.嵌入式Linux 系統(tǒng)中GUI系統(tǒng)的研究與移植[J].單片機與嵌入式系統(tǒng)應用,2004.10:11-14.
[3]徐智林,周可風,林金龍. 一種基于嵌入式Linux 圖形用戶接口的實現(xiàn)[J].電腦開發(fā)與應用,2006,(1):27-29.
[4]陳皓,吳健學.一種嵌入式GUI的實現(xiàn)方案[J].電子設計工程,2017,31(9):2127-2130.