開発
開発
プラットフォームを選択

Vulkanシェーダー統計へのアクセス

RenderDoc Meta Forkは、VulkanエクステンションKHR_pipeline_executable_propertiesを通じて、Meta Questヘッドセットのシェーダー統計へのアクセスを提供します。RenderDoc Meta Forkでは、この拡張機能をシェーダーモジュールパネルのシェーダー分解オプションとして実装しているため、取得のためにコードを記述する必要はありません。

キャプチャの取得と読み込み

Vulkanシェーダーの統計情報を取得するためには、キャプチャが必要です。このセクションの指示に従う前に「キャプチャの取得と読み込み」をお読みください。シェーダーの統計情報を取得する際には、プロファイリングの再生コンテキストまたは非プロファイリングの再生コンテキストのどちらでも使用できます。

シェーダー統計へのアクセス

RenderDoc Meta ForkでVulkanシェーダーの統計情報にアクセスするには、キャプチャを読み込んだ後で以下を実行します。
  1. イベントブラウザーで、関心のあるドローコールを選択します。 Selecting a draw call for shader stats
  2. [Pipeline State (パイプライン状態)]パネルに移動します。[Vertex Shader (VS) (頂点シェーダー(VS))][Fragment Shader (FS) (フラグメントシェーダー(FS))]、または[Compute Shader (CS) (計算シェーダー(CS))]を選択して、[View (表示)]をクリックします。
    Vertex Shader in the Pipeline State panel
  3. [Shader Module (シェーダーモジュール)]パネルが開きます。ドロップダウンメニューから [KHR_pipeline_executable_properties]を選択すると、Vulkanシェーダーの統計情報が表示されます。 KHR_pipeline_executable_properties in the Shader Module panel

シェーダー統計の説明

全命令カウント

  
説明
すべての命令の合計数。命令数が多い複雑なシェーダーは実行時間が長くなることがあります。指示が増えれば増えるほど、シェーダーの実行時間は長くなる傾向にあります。命令数が命令キャッシュサイズより大きいとミスが発生し、I$シェーダー性能に悪影響を及ぼします。
値の範囲
正の整数
最適化
冗長な操作を避けます。

32ビットALU命令カウント

  
説明
全32ビットALU命令の合計数。ALU命令の数が増えた場合、パフォーマンスには影響がないかもしれませんが消費電力は増加します。
値の範囲
0 - 命令の総数
最適化
余計な計算を削除します。

16ビットALU命令カウント

  
説明
全16ビットALU命令の合計数。16ビットALU命令は32ビット命令よりもパフォーマンスが高く、使うレジスタ容量は少なくなります。これは完全精度ALU命令に似ています。完全精度ALU命令を半精度ALU命令に変換することで、ALUにより制約を受けるシェーダーでの性能を向上させることができます。
値の範囲
0 - 命令の総数
最適化
なるべく低精度のものを使います。

複合命令カウント

  
説明
すべての複雑命令の合計数(sin、cosなど)。EFU命令はALU命令よりも長い時間を必要とします。EFUとその使用命令との依存関係のために、ショートレイテンシの同期命令が必要です。
値の範囲
0 - 命令の総数
最適化
EFUの命令を使う必要がある場合は、いくつかの命令をまとめて、ショートレイテンシの同期命令を減らします。過度のグループ化は推奨されません。

テクスチャー読み取り命令カウント

  
説明
すべてのテクスチャー読み取り命令の合計数。テクスチャーのフェッチはメモリへのアクセス遅延を引き起こします。これはALU命令で隠す必要があります。レイテンシは、テクスチャーのフェッチ回数とキャッシュの中での位置づけで決まります。
値の範囲
0 - 命令の総数
最適化
キャッシュのスラッシングを避けるため、合体可能なテクスチャーフェッチはグループ化する必要があります。各グループのテクスチャーフェッチ数を15回未満に制限します。
追加情報
一般的に、VkImageVkSamplerの有無に関わらず読み込み可能です。入力添付ファイルの読み込みも含まれています。

フロー制御命令カウント

  
説明
すべてのフロー制御命令の合計数。フロー制御命令が多いほど、シェーダーコードの分岐が多くなり、シェーダー性能に悪影響を及ぼす可能性があります。制御フロー命令はALU命令よりも実行時間がかかります。
値の範囲
0 - 命令の総数
最適化
制御フローブロック内の命令をできるだけ減らし、コンパイラで制御フローを平坦にできるようにします。

バリアとフェンス命令カウント

  
説明
すべてのバリアとフェンス命令の合計数。グローバル同期は波動の並列性を減らし、アプリの実行時間を延ばします。実行時間が長くなれば、その分電力消費量が増大します。
値の範囲
0 - 命令の総数
最適化
頻繁なグローバル同期を避けます。
追加情報
一般的に、シェーダー内のop*Barrier命令です。

ショートレイテンシ同期命令カウント

  
説明
すべてのショートレイテンシ同期命令の合計数。シェーダー命令がこのショートレイテンシ同期命令と近すぎる場合、シェーダー命令の実行を遅延させることができます。このレイテンシを隠すためのほかの波形はありません。
値の範囲
0 - 命令の総数
最適化
def-useディスタンスが長くなり過ぎないよう、EFU命令をまとめます。

ロングレイテンシ同期命令カウント

  
説明
すべてのロングレイテンシ同期命令の合計数。これはメモリアクセスによって起こるもので、レイテンシが長く、レイテンシを隠すのに十分な波形がない場合、シェーダー命令の実行を遅らせることがあります。
値の範囲
0 - 命令の総数
最適化
レイテンシはいくつかの要因で決定されます。メモリ命令の位置を向上させることが有効です。

シェーダーインスタンスあたりの完全精度レジスタフットプリント

  
説明
各シェーダーインスタンスが使う128ビットレジスタの数。各128ビットレジスタはFP32の値を4つ保存することができます。レジスタ数と類似しています。これはシェーダーに必要な完全精度のレジスタです。
値の範囲
0 - ISAが許可する完全精度レジスタの最大数
最適化
レジスタ数に関連する項目に加えて、シェーダーでのレジスタ使用量を抑えるため、精度の低い変数を使います。

シェーダーインスタンスあたりの半精度レジスタフットプリント

  
説明
各シェーダーインスタンスが使う64ビットレジスタの数。各64ビットレジスタはFP16の値を4つ保存することができます。レジスタ数と類似しています。これはシェーダーに必要な半精度のレジスタです。
値の範囲
0 - ISAが許可する半精度レジスタの最大数
最適化
なるべく半精度の変数を使うことが推奨されますが、混合精度の演算が過度になりすぎないようにします。

シェーダーインスタンスあたりの全体レジスタフットプリント

  
説明
各シェーダーインスタンスが使う128ビットレジスタの数。各128ビットレジスタはFP32の値を4つ、またはFP16の値を8つ保存することができます。レジスタを使いすぎると、シェーダー実行におけるアクティブな波形が減少し、場合によってはレジスタ流出を引き起こす可能性があります。アクティブな波形カウントが多ければ、長いメモリレイテンシを隠すことができます。一方、アクティブな波形カウントが少ない場合、レイテンシを隠すことができず、ALUの利用率は低くなります。
値の範囲
0 - ISAが許可するレジスタの最大数
最適化
ダイナミックアクセスで大きなベクトル変数を避けます。配列/ベクトルを宣言して定数値を割り当てるのではなく、可能であれば定数配列/ベクトルを使います。

シェーダーインスタンスあたりのスクラッチメモリ使用率

  
説明
各シェーダーインスタンスが使うスクラッチメモリの128ビットスロットの数。
値の範囲
0 - スクラッチメモリの最大サイズ
最適化
スクラッチメモリの使用を避けます。シェーダーがスクラッチメモリを少しでも使用すると、性能が低下します。

出力コンポーネントカウント

  
説明
すべてのシェーダーステージ出力コンポーネントの合計数。
値の範囲
0 - 128

入力コンポーネントカウント

  
説明
すべてのシェーダーステージ入力コンポーネントの合計数。
値の範囲
0 - 128

シェーダープロセッサー使用率

  
説明
該当するシェーダーのシェーダープロセッサー最大使用率。シェーダープロセッサの使用率が高いということは、シェーダーの実行における並列性が高いことを意味します。ファイバー数が少ないと、メモリアクセスのレイテンシや、ALUやほかのGPUコンポーネントのアイドルタイムが発生することがあります。
値の範囲
0 - 100%
最適化
ファイバー合計数を増やすために、レジスタの使用量を減らしてみるとよいでしょう。この数が低いと、シェーダーのパフォーマンスが低下することがあります。

メモリ読み取り命令カウント

  
説明
すべてのメモリ読み取り命令の合計数。これはテクスチャフェッチに似ていますが、メモリアクセスユニットが異なります。
値の範囲
0 - 命令の総数
最適化
テクスチャーフェッチと同様です。
追加情報
一般的には、ストレージディスクリプタを通した VkImage/VkBufferの読み込みです。

メモリ書き込み命令カウント

  
説明
すべてのメモリ書き込み命令の合計数。
値の範囲
0 - 命令の総数
最適化
可能なときはベクトルに保存します。連続したメモリ位置にメモリストア命令が分散している場合、パフォーマンスを低下させる可能性があります。
追加情報
一般的には、ストレージディスクリプタを通した VkImage/VkBufferの書き込みです。

参考情報

ナビゲーションロゴ
日本語
© 2026 Meta