国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于QtOpenGL的大容量圖形渲染性能優(yōu)化研究

2021-11-20 00:32靳慧亮張波
計算機時代 2021年11期
關鍵詞:性能優(yōu)化

靳慧亮 張波

DOI:10.16644/j.cnki.cn33-1094/tp.2021.11.001

摘? 要: 隨著國產計算機的推廣應用,原X86平臺開發(fā)的軟件經常面臨國產化平臺適配的需求,且要求適配后的功能、性能不降低。以大批量實時圖像渲染類的應用為例,性能問題是國產化平臺適配時經常遇到的難題。文章以主流的國產軟硬件平臺為研究基準,以對比實驗形式論證了基于QtOpenGL的實時渲染軟件國產化適配性能優(yōu)化的關鍵技術點及解決方法。提出了六條切實可行的顯示性能優(yōu)化技術途徑,這些成果對于基于QtOpenGL的國產平臺顯示性能的優(yōu)化工作有借鑒意義。

關鍵詞: Qt; OpenGL; 國產計算機; 性能優(yōu)化

中圖分類號:TP311.1? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2021)11-01-04

Research on performance optimization for large amount graph rendering with QtOpenGL

Jin Huiliang, Zhang Bo

(China Academy of Electronic and Information Technologies, Beijing 100041, China)

Abstract: ChinaProduced computer and operation systems are gradually applied for critical equipment, meanwhile the software for these platforms is progressing rapidly. Software performance is one of the major issues while migrating software from X86 platform to ChinaProduced platforms, especially the rendering of large amount real time graphs. Taking the mainstream domestic software and hardware platforms as the research benchmark, this paper demonstrates the key technical points and solutions for performance optimization of QtOpenGL based real-time rendering software on ChinaProduced platforms in the form of comparative experiments. Six feasible technical approaches for display performance optimization are proposed, these results can be used as a reference for the optimization of QtOpenGL based display performance of ChinaProduced platforms.

Key words: QtOpenGL; ChinaProduced computer; performance optimization

0 引言

當前國產計算機在政府、企事業(yè)單位、關鍵型號裝備等領域應用越來越廣泛,主流的國產CPU處理器也達到16核心以上,并發(fā)能力更強,可以支持更多高性能的應用。在裝備領域,具有人機顯示界面的軟件是最常見的應用場景之一[1],該類軟件對計算機實時圖形顯示能力的要求很高。圖形顯示作為典型的性能密集型應用,圖像渲染性能的高低能夠表現(xiàn)計算機硬件和軟件的綜合效能。在硬件配置相對固定的條件下,軟件層面的性能優(yōu)化就起到了決定性的作用。本文從OpenGL渲染入手,用對比實驗的方式,論證了國產計算機平臺軟件顯示性能的優(yōu)化技術方法。

1 國產平臺介紹

按照CPU分類,當前主流的國產計算機主要有以下三類。①飛騰處理器系列CPU國產計算機,飛騰處理器是由國防科技大學研發(fā),兼容2011年發(fā)布的ArmV8指令集,典型型號為飛騰1500A,具有16核心,主頻2GHz[2]。②龍芯CPU國產計算機,龍芯處理器是由中科院計算所研發(fā),采用MIPS指令集,典型型號為龍芯3A3000四核64位通用處理器,主頻1.5GHz[3]。③申威CPU國產計算機,申威處理器是由上海高性能集成電路設計中心研發(fā),采用自主設計的指令集,申威1621單芯片中包含16核64位處理器,主頻2GHz[4]。上述三類國產CPU平臺在國產計算機領域占了很大份額,并都形成了各自的應用生態(tài)。盡管是基于不同的CPU指令集,但在圖形渲染方面,通常采用OpenGL技術作為底層圖形庫通用技術方案。

2 OpenGL渲染管線

OpenGL是跨平臺計算機圖形應用程序的應用規(guī)范,廣泛應用于仿真、游戲、GIS系統(tǒng)等領域,實現(xiàn)二三維圖形的渲染。OpenGL渲染過程需要經歷CPU、GPU兩個階段,CPU中進行圖形計算,完成之后調用OpenGL開發(fā)接口在GPU中創(chuàng)建緩存區(qū)緩存繪制數(shù)據,將生成的幾何數(shù)據(頂點坐標、幾何單元等)輸入到一系列著色器中進行處理。著色器(Shaders)是一段用著色器語言GLSL編寫的腳本,在OpenGL渲染過程中通常依次經過頂點著色、細分著色以及幾何著色階段,然后對數(shù)據進行光柵化處理,生成片元數(shù)據,最后經過片元著色,將圖形渲染到屏幕上[5]。OpenGL的可編程管線著色器能直接對GPU的數(shù)據緩存進行操作,渲染效率高, 在X86商用計算機上幀率通常能達到60FPS以上。

OpenGL的完整渲染過程如圖1所示,客戶端運行于CPU中,通過驅動程序將數(shù)據與渲染指令進行連接,并發(fā)送到服務端執(zhí)行。服務端和客戶端為異步調用,因此兩端都能夠不間斷的工作。客戶端計算完畢后,將計算結果和命令塊組合在一起送入緩沖區(qū),然后緩沖區(qū)會發(fā)送到服務端執(zhí)行。服務端執(zhí)行緩沖區(qū)內容的同時,客戶端已經在進行下一個周期的計算,如此循環(huán)實現(xiàn)計算和圖形資源的最大化利用。

由于國產GPU當前尚未大規(guī)模應用,國產計算機通常采用國產CPU加商用GPU的整機方案。本文作者在進行國產計算機平臺的軟件適配時,同樣的圖形渲染軟件在國產計算機上無法達到商用機幀率,甚至在繪制批量大時會低于10FPS,即一個周期的圖形刷新時間大于100毫秒,人在交互時會感到明顯的操作卡滯和視覺延遲[6],因此需要有針對性地優(yōu)化國產機軟件顯示性能。本文設計了五組對比試驗,探討國產計算機平臺OpenGL渲染性能進行優(yōu)化的技術途徑。由于原生OpenGL沒有提供窗口系統(tǒng)和用戶交互的函數(shù),本文使用跨平臺軟件框架Qt作為支持OpenGL的窗口和交互系統(tǒng)開發(fā)環(huán)境。

實驗采用的硬件配置為:飛騰1500A型16核心處理器,32G內存,AMD Radeon HD7470顯卡。OpenGL核心版本為3.3,mesa版本為11.2.0,采用Qt5.9.2作為界面開發(fā)環(huán)境。

3 性能優(yōu)化實驗設計

針對OpenGL典型渲染流程中數(shù)據存儲、數(shù)據計算、數(shù)據提交等階段,結合筆者工作中對OpenGL顯示軟件的優(yōu)化經驗,提煉出以下五種典型的可能出現(xiàn)性能問題的關鍵環(huán)節(jié)。并設計對比實驗。實驗采用Qt提供的計時器類QTime作為基準,計算任務開始到任務結束經過的時間,作為度量計算性能的依據。時間單位為毫秒,耗時越短,說明性能越高, 最終軟件顯示的幀率越高,操作越流暢。

3.1 數(shù)據存儲性能

OpenGL客戶端在進行頂點坐標、紋理坐標、顏色矩陣計算前,首先要將渲染對象的原始坐標存儲到內存中。比如要在屏幕上繪制一些點,要先將繪制點的原始坐標存儲到內存,數(shù)據存儲就需要用到軟件容器,如Qt提供的QVector容器和C++標準庫std::vector容器。QVector在內存中連續(xù)存儲數(shù)據,支持按序號快速查找,而std::vector的內部結構更為簡單。此外,在數(shù)據長度相對確定時,也可以使用滿足最大數(shù)據存儲的數(shù)組保存坐標對象。本實驗采用上述三種典型的數(shù)據容器,依次插入float類型數(shù)據,并比較三類容器數(shù)據存儲的時間。實驗結果見表1和圖2。

從實驗結果可以看出,小于100萬次寫入時,std::vector和QVector的性能相當,在100萬次以上,QVector的耗時幾乎是std::vector的兩倍。而同樣次數(shù)的寫入,使用數(shù)組存儲的速度是std::vector的五倍,是QVector的將近十倍。這是由于QVector初始化時會預先分配兩倍于實際需要數(shù)據的空間大小[7],如果數(shù)據超出預先分配的空間,QVector會重新分配整個內存空間,導致耗時增大。因此,在數(shù)據量較為確定時,使用預先分配空間的數(shù)組能大大縮短OpenGL的數(shù)據存儲時間,進而縮短整體的圖形渲染時間。

3.2 數(shù)據計算性能

OpenGL計算頂點坐標、紋理坐標等的過程可以抽象為矩陣的平移、縮放、旋轉。重新設計算法,將串行的計算過程并行化后,也能提升計算性能。本實驗對比了采用單線程計算和多線程計算時,分別需要的計算時間。計算過程基于3.1中存儲的float數(shù)據,對數(shù)據逐一進行一次乘法(旋轉)和一次加法(平移)。多線程采用了Qt的并行計算框架QtConCurrent,使用該框架可以不用考慮線程鎖的問題,并且QtConcurrent會根據可用CPU核數(shù)自動調整線程數(shù)。

實驗結果見表2。從實驗可以看出,在10萬次計算以下時,多線程耗時要高于單線程,并且次數(shù)越少,多線程相對單線程耗時越大。在10萬次計算以上時,多線程計算的優(yōu)勢更加明顯(100萬次三倍,1000萬次六倍),實驗結果證明,大批量計算時多線程能成倍縮短計算時間。但在計算次數(shù)較少時,多線程的上下文切換耗時可能會高于多線程計算節(jié)省的時間,導致了多線程的耗時反而高過單線程[8]。批量切換的性能門限,與計算機配置、程序算法設計有直接關系,需要根據實際情況進行摸底測試確定。

3.3 數(shù)據遍歷性能

在渲染數(shù)據計算時,由于繪制對象的不同,會產生一些大小不確定的中間數(shù)據,由于數(shù)據量大小未知,無法使用預先分配的數(shù)組存儲,只能采用標準的數(shù)據容器。而對這些數(shù)據的遍歷時間也會對整體渲染時間產生影響。本文選取了三類Qt標準容器(QVector,QList和QLinkedList),對比數(shù)據遍歷性能。QVector存儲時占用連續(xù)存儲的內存空間,而QList的數(shù)據存儲在堆上。QLinkedList是鏈表存儲,使用迭代器而不是索引進行遍歷。實驗結果見表3,實驗證明,在三類容器中,QVector的順序遍歷速度在三類容器中最優(yōu),但結果差距不明顯,結果與Qt官方推薦的結果一致。

3.4 數(shù)據繪點性能

點繪制是雷達等傳感器應用的典型場景[9],本實驗對OpenGL的點繪制性能進行對比。OpenGL繪制管線中,提供了單點單次提交繪制的形式glVertex,和坐標緩存批量提交繪制方式glDrawArrays,本實驗對比了在不同點批量的情況下,采用單次和批量提交時繪制時間的差別,實驗結果見表4和圖3。

結果證明在50萬點以下,兩種點繪制方式的時間相差不大,在50萬點以上,批量繪制點的時間明顯要短于單次提交。因為在大批量繪制時,采用批量提交的形式能減少CPU到GPU的數(shù)據提交次數(shù),成倍提升繪制速度。

3.5 調試打印

軟件人員在調試階段會在代碼中增加打印調試信息,如果軟件發(fā)布后沒有將打印刪除,頻繁的打印會嚴重拖慢性能,而打印耗時卻容易被忽視。本實驗在3.2節(jié)計算處理基礎上,在每次計算時使用qDebug打印計算結果。對比在單線程和多線程情況下,需要的處理時間,實驗結果見表5。對比表5和表2可見,從10000次開始,單線程增加打印的時間已經是無打印計算的80倍,隨著計算次數(shù)的增加,這種差距不斷擴大。而在多線程計算時,打印耗時抵消了多線程計算縮短的時間。在1000萬次計算時,單線程和多線程的耗時均已經超過了8分鐘,單線程下增加打印的耗時達到無打印耗時的400倍,多線程達2400倍。實驗證明,在開發(fā)那些對時間性能要求高的軟件時,必須避免頻繁打印,從而提升軟件的性能。

4 結論

在OpenGL圖形渲染過程中,CPU客戶端的計算時間在整體渲染時間中占比很高。在國產化適配時,降低CPU端的計算時間,就能夠顯著縮短整體的渲染用時??梢詮娜缦铝鶄€方面做CPU端性能優(yōu)化:

⑴ 在數(shù)據批量可預測的情況下,采用預先分配的數(shù)組進行數(shù)據存儲,提升數(shù)據存儲效率;

⑵ 采用多線程并行計算,降低圖形坐標計算時間,充分利用國產處理器的多核性能;

⑶ 采用性能最高的數(shù)據容器,縮短大批量數(shù)據遍歷的耗時,并且避免頻繁的隨機查找數(shù)據;

⑷ 去掉減少代碼中的無效打印,減少由于打印帶來的CPU時間損耗;

⑸在圖形渲染階段,采用OpenGL批量繪制方式提交,加快渲染速度。

此外,在OpenGL繪制時,可以根據渲染類型或者頻次的差別,應用分層渲染的方式,將高頻渲染和低頻渲染元素放在不同的圖層中處理,以降低性能負載。

參考文獻(References):

[1] 趙星漢,于洋.基于自主可控計算平臺的信號采集處理系統(tǒng)

設計與實現(xiàn)[J].中國電子科學研究院學報,2013.1:100-105

[2] 孫立明,吳慶波.國產飛騰1500A處理器的顯存管理優(yōu)化[J].

計算機技術與發(fā)展,2017.27(5):6-9

[3] 孟小甫,高翔,從明,張爽爽.龍芯3A多核處理器系統(tǒng)級性能

優(yōu)化與分析[J].計算機研究與發(fā)展,2012.49(S1):137-142

[4] 胡向東,楊劍新,朱英.高性能多核處理器申威1600[J].中國

科學:信息科學,2015.45:513-522

[5] Dave Shreiner等.OpenGL編程指南[M].機械工業(yè)出版社,

2016.

[6] A. B. Watson, "High Frame Rates and Human Vision: A

View through the Window of Visibility," in SMPTE Motion Imaging Journal[J].2013.122(2):18-32

[7] Marc Mutz, Understand the Qt Containers[], https://www.

cleanqt.io/blog/exploring-qt-containers, 2018.

[8] Jonas Trümper,Johannes Bohnet,Jürgen D?llner.

Understanding complex multithreaded software systems by using trace visualization[P].Software visualization,2010.

[9] 吉軍.雷達點跡的目標智能特征提取方法研究[J].信息技術,

2013.6.

猜你喜歡
性能優(yōu)化
大數(shù)據環(huán)境下高校選課系統(tǒng)性能優(yōu)化應用研究
數(shù)據挖掘算法性能優(yōu)化的研究與應用
SQL Server數(shù)據庫性能優(yōu)化的幾點分析
Web應用的前端性能優(yōu)化
WEB網站緩存性能優(yōu)化
Oracle數(shù)據庫性能調整與優(yōu)化分析
基于節(jié)點緩存的Web服務器性能優(yōu)化研究
基于SQL數(shù)據庫的性能優(yōu)化的探討
Oracle數(shù)據庫應用系統(tǒng)的性能優(yōu)化
铁力市| 和田县| 胶南市| 固始县| 瓦房店市| 双城市| 连州市| 肇源县| 都江堰市| 准格尔旗| 屏山县| 安仁县| 同德县| 古田县| 洪湖市| 澄迈县| 井研县| 龙胜| 温泉县| 佛教| 遵化市| 元氏县| 武威市| 旺苍县| 连州市| 扬中市| 林西县| 洛南县| 岳阳县| 收藏| 芦溪县| 普安县| 邯郸县| 永春县| 青铜峡市| 宾川县| 岢岚县| 固镇县| 镇赉县| 瑞金市| 朝阳市|