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