分析記憶體效率

應用程式的記憶體用量是應用程式效能的基本層面。您可以使用系統分析器,查看可用的 GPU 計數器資訊來分析這些特性。

Adreno 裝置

在 Adreno 裝置上,請先醒目顯示與單一 GPU 影格一致的一段時間,詳情請參閱「估算 CPU 和 GPU 影格的處理時間」。請根據該頁面所述的技巧,針對影格時間範圍使用 GPU 使用率或類似的計數器軌跡瞭解影格時間範圍。這是因為計數器追蹤的全部都使用相同的時間技術,能夠更準確地估算記憶體使用率 (相較於使用從計數器追蹤資料獨立收集資料的 GPU 配量衍生出的影格時間邊界)。

使用軌道與下方相關計數器
圖 1 使用率軌跡歸結以下相關計數器

讀取/寫入總計

當您在分析器中醒目顯示單一影格後,請先查看「Read Total (Bytes/sec)」和「Write Total (Bytes/sec)」計數器。這些計數器能讓您整體瞭解在單一影格過程中,跨記憶體匯流排的資料量。由於記憶體頻寬是行動裝置的電池耗電量大之一,因此建議您盡可能減少透過匯流排傳送的資料量。

讀取 + 寫入計數器總數
圖 2. 讀取 + 寫入計數器總數

您也可以檢查「Vertex 記憶體讀取 (位元組/秒)」和「紋理記憶體讀取 (位元組/秒)」計數器,判斷頂點和紋理資料使用的頻寬比例。

Vertex + 紋理記憶體讀取計數器
圖 3 Vertex + 紋理記憶體讀取計數器

您認為這些值的「良好」視同應用程式處理的工作負載類型而定。舉例來說,2D 應用程式可能會使用相對龐大的紋理記憶體讀取頻寬 (約 2+ GB/秒),但頂點記憶體頻寬可能極低 (約 50MB/秒)。詳情請參閱「分析頂點記憶體頻寬」和「分析紋理記憶體頻寬用量」說明文件。

擷取攤位

請參考 % Vertex 擷取攤位紋理擷取攤位百分比系統記憶體使用率百分比計數器,這些可以提供一些提示,說明應用程式的整體記憶體效能。如果這個值高於約 5%,就表示應用程式不是以有效率的方式在記憶體中放置資料,或是以有效率的方式存取資料,因此無法使用快取。詳情請參閱「分析頂點記憶體頻寬」和「分析紋理記憶體頻寬用量」,進一步瞭解如何提高這些資產類型的記憶體用量。

記憶體攤位計數器
圖 4:記憶體儲存計數器

Mali 裝置

在 Mali 裝置上,請先醒目顯示與單一 GPU 影格一致的一段時間,詳情請參閱「估算 CPU 和 GPU 影格的處理時間」。請根據該頁面所述的技巧,針對影格時間範圍使用 GPU 使用率或類似的計數器軌跡瞭解影格時間範圍。這是因為計數器追蹤的全部都使用相同的時間技術,能夠更準確地估算記憶體使用率 (相較於使用從計數器追蹤資料獨立收集資料的 GPU 配量衍生出的影格時間邊界)。

使用率追蹤在下方與你想關注的計數器之間對齊
圖 5 使用率軌道與想關注的計數器進行比對

輸出外部總計

系統分析器中醒目顯示單一影格後,請先查看「Output External Readbytes」輸出外部寫入位元組計數器。這些計數器能讓您整體瞭解在單一影格中跨越記憶體匯流排的資料量。由於記憶體頻寬是行動裝置的大電量消耗,因此盡可能減少透過匯流排傳送的資料量。

輸出外部計數器軌跡
圖 6:輸出外部計數器軌跡

輸入內部總計

您也可以點選計數器,以提供快取本身的相關資訊。您想瞭解的計數器是「輸入內部 [讀取|寫入] 延遲週期」。這類的值越高,代表您已成功達成快取,但發出的讀取要求數量過多,因此著色器程式碼需要等待存取記憶體。

輸入內部計數器軌跡
圖 7:輸入內部計數器音軌

擷取攤位

下一組您可以查看的計數器為 Vertex 預先擷取作業生命週期 (Stall Cycles)Texture Fetch Stall 計數器,這可以為您提供應用程式整體記憶體效能的一些提示。如果您看到值高於約 5%,就表示您並非以有效的方式在記憶體中放置資料,或未能有效利用快取來存取資料。請參閱「分析 [Vertex|紋理] 記憶體頻寬」文章,進一步瞭解如何改善這類資產的記憶體用量

擷取攤位計數器
圖 8:擷取攤位計數器軌道