アプリのメモリ使用量の特性は、パフォーマンスの基本的な側面です。System Profiler を使用すると、利用可能な GPU カウンタ情報を確認して、これらの特性を分析できます。
Adreno デバイス
Adreno デバイスでは、まず CPU と GPU のフレーム処理時間の見積もりで説明されているように、単一の GPU フレームと一致する期間をハイライト表示します。 このページで説明されている手法を使用します。フレーム時間の境界に GPU % Utilization などのカウンタ トラックを使用します。カウンタ トラックはすべて同じタイミング手法を使用するため、メモリ使用量をより正確に見積もることができます(カウンタ トラック データとは別にデータが収集される GPU スライスから派生したフレーム時間の境界を使用する場合と比較して)。
読み取り/書き込みの合計
プロファイラで単一のフレームをハイライト表示したら、まず Read Total (Bytes/sec) カウンタと Write Total (Bytes/sec) カウンタを確認します。 これらのカウンタを使用すると、単一フレームの間にメモリバスを通過するデータ量を全体的に把握できます。メモリ帯域幅はモバイル デバイスのバッテリーの消耗の大きな原因となるため、バス経由で送信するデータ量を最小限に抑えるようにしてください。
Vertex Memory Read (Bytes/Second) カウンタと Texture Memory Read (Bytes/Second) カウンタを調べて、頂点データとテクスチャ データに使用される帯域幅の割合を特定することもできます。
これらの値の「良好」と見なされる値は、アプリで確認されるワークロードのタイプによって異なります。たとえば、2D アプリケーションでは、テクスチャ メモリの読み取り帯域幅が比較的大きい(2 GB/秒以上)場合がありますが、頂点メモリの帯域幅は非常に小さい(50 MB/秒程度)場合があります。詳細については、 頂点メモリ帯域幅を分析すると テクスチャ メモリ帯域幅の使用量を分析するのドキュメントをご覧ください。
フェッチ ストール
% Vertex Fetch Stall、% Texture Fetch Stall、% Stall on System Memory カウンタを確認します。これらは、アプリケーションのメモリ パフォーマンス全体に関するヒントを提供します。値が 5% を超える場合は、アプリがメモリにデータを効率的に配置していないか、キャッシュを利用するためにデータを効率的にアクセスしていることを示しています。 これらのタイプのアセットのメモリ使用量を改善する方法については、頂点メモリ帯域幅を分析すると テクスチャ メモリ帯域幅の使用量を分析するをご覧ください。
Mali デバイス
Mali デバイスでは、まず CPU と GPU のフレーム処理時間の見積もりで説明されているように、単一の GPU フレームと一致する期間をハイライト表示します。 このページで説明されている手法を使用します。フレーム時間の境界に GPU % Utilization などのカウンタ トラックを使用します。カウンタ トラックはすべて同じタイミング手法を使用するため、メモリ使用量をより正確に見積もることができます(カウンタ トラック データとは別にデータが収集される GPU スライスから派生したフレーム時間の境界を使用する場合と比較して)。
外部出力の合計
System Profiler で単一のフレームをハイライト表示したら、まず Output External Read bytes と Output External Write bytes カウンタを確認します。これらのカウンタを使用すると、単一フレームの間にメモリバスを通過するデータ量を全体的に把握できます。メモリ帯域幅はモバイル デバイスのバッテリー消費の大きな原因となるため、バス経由で送信するデータ量を最小限に抑えるようにしてください。
内部入力の合計
キャッシュ自体に関する情報を提供するカウンタもあります。関心のあるカウンタは「Input internal [read|write] stall cycles」です。これらの値が大きい場合は、キャッシュに正常にヒットしていますが、読み取りリクエストが多すぎるため、シェーダー コードがメモリへのアクセスを待機して停止しています。
フェッチ ストール
次に確認するカウンタは、Vertex Prefetcher Stall Cycles カウンタと Texture Fetch Stall カウンタです。これらは、アプリケーションのメモリ パフォーマンス全体に関するヒントを提供します。値が 5% を超える場合は、メモリにデータを効率的に配置していないか、キャッシュを利用するためにデータを効率的にアクセスしていることを示しています。これらのタイプのアセットのメモリ使用量を改善する方法については、[頂点|テクスチャ] メモリ帯域幅を分析するの記事をご覧ください。