當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]圖形工作負(fù)載的優(yōu)化對于許多現(xiàn)代移動(dòng)應(yīng)用程序而言往往必不可少,因?yàn)閹缀跛袖秩粳F(xiàn)在都直接或間接地由基于 OpenGL ES 的渲染后端負(fù)責(zé)處理。本文介紹如何將ARM®DS-5&#8

圖形工作負(fù)載的優(yōu)化對于許多現(xiàn)代移動(dòng)應(yīng)用程序而言往往必不可少,因?yàn)閹缀跛袖秩粳F(xiàn)在都直接或間接地由基于 OpenGL ES 的渲染后端負(fù)責(zé)處理。本文介紹如何將ARM®DS-5™ Streamline™ 性能分析工具用于 Google Nexus 10,對利用Mali™-T604GPU的圖形應(yīng)用程序進(jìn)行性能分析和優(yōu)化。Streamline 是一款強(qiáng)大的工具,能夠深入細(xì)致地洞悉整個(gè)系統(tǒng)的行為,但也需要駕馭它的工程師能夠解讀相關(guān)數(shù)據(jù),識(shí)別問題區(qū)域,進(jìn)而提出修復(fù)建議。

對于初涉圖形優(yōu)化的開發(fā)人員而言,起步階段總會(huì)遇到一些困難,所以我寫了新的系列博文,給開發(fā)人員提供必要的知識(shí),以便他們能夠成功地針對 MaliGPU進(jìn)行優(yōu)化。在整個(gè)系列博文中,我將闡述開發(fā)人員必須要考慮的基本宏觀體系結(jié)構(gòu)和行為、這些因素如何轉(zhuǎn)化為能被內(nèi)容觸發(fā)的潛在問題,以及最終如何在

Streamline 中找出這些問題。

抽象渲染機(jī)器

要想成功分析應(yīng)用程序的圖形性能,必須先掌握一個(gè)最基本的知識(shí),也就是對 OpenGL ES API 底下系統(tǒng)運(yùn)作方式建立一個(gè)心智模型,讓工程師能夠推斷他們觀察到的行為。

為避免讓開發(fā)人員陷于驅(qū)動(dòng)程序軟件和硬件子系統(tǒng)的實(shí)施細(xì)節(jié)的沼澤之中(這些他們無法控制,因而價(jià)值有限),有必要定義一個(gè)簡化的抽象機(jī)器,用作解讀所觀察到的行為的基礎(chǔ)。這一機(jī)器包含三個(gè)有用部分,它們大體上是獨(dú)立不相干的,所以我將在本系列博文的開頭幾篇中逐一介紹。不過,為了讓你對它們有個(gè)初步印象,下面列出該模型的三個(gè)部分:

CPU-GPU渲染管線

基于區(qū)塊的渲染

著色器核心架構(gòu)

在本篇博文中,我們將探討第一個(gè)部分,即 CPU-GPU 渲染管線。

同步API,異步執(zhí)行

務(wù)必要了解的一個(gè)基本知識(shí)是,OpenGL ES API 上應(yīng)用程序函數(shù)調(diào)用和這些 API 調(diào)用所需渲染運(yùn)算的執(zhí)行之間的臨時(shí)關(guān)系。從應(yīng)用程序的角度而言,OpenGL ES API被指定為同步 API。應(yīng)用程序進(jìn)行一系列的函數(shù)調(diào)用來設(shè)置其下一繪制任務(wù)所需的狀態(tài),然后調(diào)用 glDraw[1] 函數(shù)(通常稱為繪制調(diào)用)觸發(fā)實(shí)際的繪制運(yùn)算。由于 API是同步的,執(zhí)行繪制調(diào)用后的所有 API 行為都被指定為要像渲染運(yùn)算已經(jīng)發(fā)生一樣進(jìn)行,但在幾乎所有硬件加速的 OpenGL ES 實(shí)現(xiàn)上,這只是一種由驅(qū)動(dòng)程序堆棧維持的美妙假象。

與繪制調(diào)用相似,驅(qū)動(dòng)程序維持的第二個(gè)假象是幀末緩沖翻轉(zhuǎn)。大多數(shù)頭一次編寫 OpenGL ES 應(yīng)用程序的開發(fā)人員會(huì)告訴你,調(diào)用 eglSwapBuffers將交換其應(yīng)用程序的前緩沖和后緩沖。雖然這在邏輯上是對的,但驅(qū)動(dòng)程序再一次維持了同步性的假象;在幾乎所有平臺(tái)上,實(shí)際的緩沖交換可能會(huì)在很久之后才會(huì)發(fā)生。

管線化

正如你所想到的,需要?jiǎng)?chuàng)造這一假象的原因在于性能。如果我們強(qiáng)制渲染運(yùn)算真正同步發(fā)生,你就會(huì)面臨這樣的尷尬:CPU 忙于創(chuàng)建下一繪制運(yùn)算的狀態(tài)時(shí),GPU 會(huì)閑置;GPU 執(zhí)行渲染時(shí),CPU 會(huì)閑置。對于以性能為重的加速器而言,所有這些閑置時(shí)間都是絕然不可接受的。

為了去除這一閑置時(shí)間,我們使用 OpenGL ES 驅(qū)動(dòng)程序來維持同步渲染行為的假象,而在面紗之后實(shí)際是以異步執(zhí)行的方式處理渲染和幀交換。通過異步運(yùn)行,我們可以建立一個(gè)小小的工作儲(chǔ)備以允許創(chuàng)建一個(gè)管線,GPU 從管線的一端處理較舊的工作負(fù)載,而 CPU 則負(fù)責(zé)將新的工作推入另一端。這一方式的優(yōu)勢在于,只要管線裝滿,就始終有工作在 GPU 上運(yùn)行,提供最佳的性能。

Mali GPU 管線中的工作單元是以渲染目標(biāo)為單位進(jìn)行計(jì)劃的,其中渲染目標(biāo)可能是屏幕緩存或離屏緩存。單個(gè)渲染目標(biāo)通過兩步處理。首先,GPU 為渲染目標(biāo)中的所有繪制調(diào)用處理頂點(diǎn)著色[2]。然后,為整個(gè)渲染目標(biāo)處理片段著色[3]。因此,Mali 的邏輯渲染管線包含三個(gè)階段:CPU 處理階段、幾何處理階段,以及片段處理階段。

管線節(jié)流

觀察力敏銳的讀者可能已注意到,上圖中片段部分的工作是三個(gè)運(yùn)算中最慢的,被 CPU 和幾何處理階段甩得越來越遠(yuǎn)。這種情形并不少見;大多數(shù)內(nèi)容中要著色的片段遠(yuǎn)多于頂點(diǎn),因此片段著色通常是占主導(dǎo)地位的處理運(yùn)算。

在現(xiàn)實(shí)中,最好要盡可能縮短從 CPU 工作結(jié)束到幀被渲染之間的延時(shí) – 對最終用戶而言,最讓人煩躁的莫過于在操作觸控屏設(shè)備時(shí),其觸控事件輸入和屏幕中數(shù)據(jù)顯示之間出現(xiàn)數(shù)百毫秒的不同步 – 所以,我們不希望等待片段處理階段的工作儲(chǔ)備變得過大。簡而言之,我們需要某種機(jī)制來定期減慢 CPU 線程,當(dāng)管線足夠滿、能夠維持良好性能時(shí)停止把工作放入隊(duì)列。

這種節(jié)流機(jī)制通常由主機(jī)窗口系統(tǒng)提供,而不是圖形驅(qū)動(dòng)程序本身。例如,在 Android 上,我們只有在知道緩沖方向時(shí)才能處理任何繪制運(yùn)算,因?yàn)橛脩艨赡軙?huì)旋轉(zhuǎn)其設(shè)備,造成幀大小出現(xiàn)變化。SurfaceFlinger— Android 窗口表面管理器 – 可以通過一個(gè)簡單方式控制管線深度:當(dāng)管線中排隊(duì)等待渲染的緩沖數(shù)量超過 N 個(gè)時(shí),拒絕將緩沖返回到應(yīng)用程序的圖形堆棧。

如果出現(xiàn)這種情形,你就會(huì)看到:一旦每一幀達(dá)到“N”時(shí) CPU 就會(huì)進(jìn)入閑置狀態(tài),在內(nèi)部阻止 EGL 或 OpenGL

ES API 函數(shù),直到顯示屏消耗完一個(gè)待處理緩存,為新的渲染運(yùn)算空出一個(gè)位置。

如果圖形堆棧的運(yùn)行快于顯示刷新率,同樣的方案也可限制管線緩沖;在這一情形下,內(nèi)容受到VSYNC限制”并等待垂直空白(VSYNC同步)信號(hào),該信號(hào)告訴顯示控制器它可以切換到下一緩沖。如果 GPU 產(chǎn)生幀的速度快于顯示屏顯示幀的速度,那么

SurfaceFlinger 將積累一定數(shù)量已經(jīng)完成渲染但依然需要顯示在屏幕上的緩沖;即使這些緩沖不再是 Mali 管線的一個(gè)部分,它們依然算在應(yīng)用程序進(jìn)程的 N 幀限制內(nèi)。

正如上面的管線示意圖所示,如果內(nèi)容受到VSYNC同步限制,那么會(huì)經(jīng)常出現(xiàn) CPU 和 GPU 都完全閑置的時(shí)段。平臺(tái)動(dòng)態(tài)電壓和頻率調(diào)節(jié) (DVFS) 通常會(huì)在此類情形中嘗試降低當(dāng)前的工作頻率,以降低電壓和功耗,但由于 DVFS 頻率選擇通常相對粗糙,所以可能會(huì)出現(xiàn)一定數(shù)量的閑置時(shí)間。

小結(jié)

本篇博文中,我們探討了 OpenGL ES API 提供的同步假象,以及 API 下實(shí)際運(yùn)行異步渲染管線的原因。


0次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉