在上一篇文章中我簡(jiǎn)要的介紹了一下我們要采用的平臺(tái)(PowerVR GPU+Cocos2d-x),以及一些列的評(píng)測(cè)規(guī)則和工具。這本篇文章中我將向大家展示如何使用PVRTune工具來(lái)鑒別性能瓶頸。
搭建測(cè)試環(huán)境
如果你想體驗(yàn)一下Fantasy Warrior 3D(幻想勇士3D)這個(gè)游戲,你可以訪問(wèn)“這里”,提供了游戲視頻介紹,然后訪問(wèn)“這里”下載這個(gè)游戲的源代碼。
第一步我們需要按照Fantasy Warrior 3D(幻想勇士3D)工程目錄下的README.md文件說(shuō)明編譯游戲。然后我們才能夠使用PVRHub和PVRTune工具記錄性能分析文件。我已經(jīng)將我的記錄文件提交到了“這里”。這些文件記錄了如下環(huán)境下分析信息:
? 硬件信息
o 設(shè)備名稱:昂達(dá)V989平板電腦(Allwinner A80芯片,PowerVR Series6G6230 GPU)
? 軟件信息
o 安卓系統(tǒng)版本:4.4.2
o 驅(qū)動(dòng)信息:版本1.4 Rogue_DDK_Android_RSCompute rogueddk @3234138 (正式版) sunxi_android
o PVRTuneDeveloper:版本V14.111.1(SDK bulid 3.5@3530647)
o PVRpPefServerDeveloper:版本V14.111.1(SDK build 3.5@3533642)
o PVRTrace記錄庫(kù)文件:版本V20(SDK build 3.5@3533642)
鑒別性能瓶頸
在這游戲中要想鑒別性能瓶頸,我們可以采用PVRTune工具。在所有的記錄文件(*.pvrtune)中我提取了一個(gè)具有代表性性的數(shù)據(jù)文件(2338)。我將用下面列出的幾條標(biāo)準(zhǔn)向大家解釋如何借助PVRTune工具來(lái)鑒別性能瓶頸。性能瓶頸一般可分為以下五種類型:
? CPU局限
? 頂點(diǎn)局限(游戲中一般有頂點(diǎn)著色渲染)
? 垂直同步局限
? 碎片局限
? 帶寬局限
CPU局限
CPU性能顯示還是很容易鑒別的,盡管顯卡的使用率不高但是我們可以明顯感覺(jué)到性能很差,幀率很低。借助PVRTune工具更能直觀的鑒別出來(lái),受CPU性能局限的應(yīng)用往往CPU的負(fù)載會(huì)達(dá)到或者接近100%(a)。
其它鑒別因素還有著色器加載的間隔,這個(gè)間隔表示PowerVR硬件將進(jìn)行暫時(shí)休眠,因?yàn)樗赡苷诘却鼵PU操作完成
(b)或者GPU正在等待下一次的幀同步。
以Fantasy Warrior 3D(幻想勇士3D)為測(cè)試對(duì)象,我們收集了如下數(shù)據(jù):
從分析圖中我們可以看出CPU的負(fù)載率僅為12.0%,但是在Tiler和渲染之間出現(xiàn)很多較長(zhǎng)的間隔。因此PowerVR硬件在等待來(lái)自渲染線程(10612)指令的同時(shí)進(jìn)入了休眠。所以此游戲的最大問(wèn)題就是Cocos2d-x引擎不支持獨(dú)立的渲染線程。每一幀的渲染都需要等待游戲邏輯完成后才能進(jìn)行。在第三行的時(shí)序圖中你可以發(fā)現(xiàn)每一幀的圖像API調(diào)用之間都有很大的間隔,這表明CPU的性能局限。
Vertex(頂點(diǎn))局限
頂點(diǎn)局限的原因是每一幀都有很多定點(diǎn)需要處理或者是使用了復(fù)雜的頂點(diǎn)著色器,亦或者是兩者共同的原因。我們也可以通過(guò)時(shí)序間隔來(lái)鑒別,在渲染操作(a)時(shí)序中會(huì)有很多大的間隔,而在Tiler操作(b)時(shí)序中只有很小或者沒(méi)有間隔。
我們可以從頂點(diǎn)加載處理過(guò)程和Tiler加載計(jì)數(shù)器中獲取更多更詳細(xì)的分析數(shù)據(jù)。如果Tiler激活指示曲線(c)是很高的一條線而加載處理過(guò)程不是:說(shuō)明Vertex(頂點(diǎn))過(guò)程并沒(méi)有很多頂點(diǎn)元素需要處理,性能的支出主要用于Tiler操作。相反如果加載處理過(guò)程中Vertex指示曲線(d)很高而Tiler操作不是,那么性能的瓶頸主要是因?yàn)轫旤c(diǎn)的著色操作。
我們可以很明顯的看出,在渲染(Render)操作和Tiler操作曲線之間有很多的間隔。處理加載均值Vertex是1.6%,峰值達(dá)14.4%,Tiler操作均值為10%。盡管實(shí)際上每一幀的加載處理包括Vertex和Tiler效率均值都很低,我們可以借助PVRSaderEditor工具優(yōu)化Vertex(頂點(diǎn))著色。所幸的是Fantasy Warrior 3D(幻想勇士3D)并沒(méi)有vertex(頂點(diǎn))局限的問(wèn)題。
垂直同步(V-sync)局限
垂直同步(V-sync)顯示上的一種設(shè)置,即在某一應(yīng)用中將圖形的更新速率與顯示器的更新速率進(jìn)行同步。這會(huì)造成一些幀有稍微延后的情況,強(qiáng)制設(shè)置為最快的刷新速率,減少屏幕的卡頓且降低功耗。具有V-sync局限應(yīng)用的特點(diǎn)是在圖形視圖中連續(xù)的幀之間會(huì)出現(xiàn)斷續(xù)的間隔,幀刷新速率被限制設(shè)置為最大值。如果可能的話,在分析某一應(yīng)用時(shí)v-sync應(yīng)該被禁用,否則它會(huì)給PVRTune的輸出數(shù)據(jù)增加干擾,這會(huì)讓我們更加難判斷哪些優(yōu)化工作是有用的或者各種優(yōu)化措施已經(jīng)見(jiàn)效。
下面我們分析一下幻想勇士(Fantasy Warrior 3D)的數(shù)據(jù),我們可以看出幀之間的間隔很穩(wěn)定(1-2ms)。除此之外,這一幀的FPS數(shù)值會(huì)保持在29.3。因?yàn)槊恳粠腇PS值都不會(huì)超過(guò)最大值,所以我們可以判定這個(gè)游戲沒(méi)有V-sync局限問(wèn)題。
碎片局限
碎片局限的應(yīng)用比較普遍,在大部分情景下都可能會(huì)發(fā)生,通常在幀緩存區(qū)中頂點(diǎn)的數(shù)量會(huì)比像素點(diǎn)的數(shù)量少。碎片局限的應(yīng)用可以從以下特點(diǎn)來(lái)判定:在渲染操作(a)之間沒(méi)有間隔,在Tiler操作之間有很大的間隔或者很高的像素處理負(fù)載(c)。
對(duì)于這個(gè)游戲我們得到的數(shù)據(jù)如下:
像素處理負(fù)載是46.3%且在渲染操作之間總是有很大的間隔,所以Fantasy Warrior 3D(幻想勇士3D)這個(gè)游戲并沒(méi)有碎片局限的問(wèn)題。
帶寬局限
帶寬局限的應(yīng)用很難看出來(lái)也很難判定,因?yàn)樗鼈兊谋硐笙衿渌阅芷款i。如果有以下特點(diǎn)那么就可能有帶寬局限的問(wèn)題:
? 從時(shí)序圖中可以看出有碎片局限問(wèn)題,但是像素處理負(fù)載卻很低。
? 從時(shí)序圖中可以看出有Vertex(頂點(diǎn))局限問(wèn)題,但是Vertex(頂點(diǎn))和Tiler的處理負(fù)載率都很低。
其它一些帶寬局限的問(wèn)題也可能發(fā)生。例如片上系統(tǒng)(SoC)的帶寬是被片上的各部分共享的。沒(méi)有圖形處理器的芯片(例如CPU)會(huì)占用大部分的帶寬,這會(huì)導(dǎo)致應(yīng)用程序圖形操作帶寬受限。這是一個(gè)特定的測(cè)試平臺(tái),沒(méi)有計(jì)數(shù)器用來(lái)記錄它,從以往的經(jīng)驗(yàn)來(lái)看,當(dāng)我們進(jìn)行紋理壓縮,網(wǎng)格優(yōu)化等操作時(shí)我們要采用適當(dāng)?shù)拇胧﹣?lái)減少帶寬的使用,同時(shí)要避免不必要的紋理讀操作等。
根據(jù)前面Vertex(頂點(diǎn))局限和Pixel(像素)局限部分分析得出的結(jié)論,我們可以推斷出這個(gè)游戲不存在帶寬局限的問(wèn)題。
總結(jié)
這個(gè)游戲存在典型的CPU局限問(wèn)題,正如前面CPU局限部分分析的那樣,將OpenGL ES的調(diào)用由專用的CPU線程來(lái)完成會(huì)讓CPU忙碌起來(lái)并且能夠在很多設(shè)備上提升幀速率。在下一篇文章中,我將向大家介紹PVRTune有哪些高級(jí)的特性,同樣是以Fantasy Warrior 3D(幻想勇士3D)這個(gè)游戲?yàn)槔齺?lái)分析造成性能瓶頸的具體原因。
下面我列出了“優(yōu)化系列”所有已經(jīng)發(fā)表的文章,你可以直接訪問(wèn):
? 使用PowerVR圖形工具進(jìn)行分析和調(diào)試
? PowerVR圖形SDK工具說(shuō)明:PVRTune GUI基礎(chǔ)入門
? PowerVR圖形SDK工具說(shuō)明:使用PVRTune分析渲染操作
? PowerVR圖形SDK工具說(shuō)明:PVRTrace GUI基礎(chǔ)入門
? PowerVR圖形SDK工具說(shuō)明:使用PVRTrace捕獲渲染操作
? PowerVR圖形SDK工具說(shuō)明:PVRTrace GUI的高級(jí)特性
? 掌握使用PVRTraceGUI進(jìn)行正則表達(dá)式搜索
對(duì)于已經(jīng)發(fā)表的文章如果你有任何的想法請(qǐng)讓我們知道,你可以留言期望看到的分析文章。當(dāng)然你可以在Twitter上關(guān)注我們(@Imagination,@GPUCompute,
@PowerVRInsider),Imagination公司會(huì)發(fā)表更多的新聞和聲明。
評(píng)論
查看更多