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


説明 | すべての命令の合計数。命令数が多い複雑なシェーダーは実行時間が長くなることがあります。指示が増えれば増えるほど、シェーダーの実行時間は長くなる傾向にあります。命令数が命令キャッシュサイズより大きいとミスが発生し、 I$シェーダー性能に悪影響を及ぼします。 |
値の範囲 | 正の整数 |
最適化 | 冗長な操作を避けます。 |
説明 | 全32ビットALU命令の合計数。ALU命令の数が増えた場合、パフォーマンスには影響がないかもしれませんが消費電力は増加します。 |
値の範囲 | 0 - 命令の総数 |
最適化 | 余計な計算を削除します。 |
説明 | 全16ビットALU命令の合計数。16ビットALU命令は32ビット命令よりもパフォーマンスが高く、使うレジスタ容量は少なくなります。これは完全精度ALU命令に似ています。完全精度ALU命令を半精度ALU命令に変換することで、ALUにより制約を受けるシェーダーでの性能を向上させることができます。 |
値の範囲 | 0 - 命令の総数 |
最適化 | なるべく低精度のものを使います。 |
説明 | すべての複雑命令の合計数(sin、cosなど)。EFU命令はALU命令よりも長い時間を必要とします。EFUとその使用命令との依存関係のために、ショートレイテンシの同期命令が必要です。 |
値の範囲 | 0 - 命令の総数 |
最適化 | EFUの命令を使う必要がある場合は、いくつかの命令をまとめて、ショートレイテンシの同期命令を減らします。過度のグループ化は推奨されません。 |
説明 | すべてのテクスチャー読み取り命令の合計数。テクスチャーのフェッチはメモリへのアクセス遅延を引き起こします。これはALU命令で隠す必要があります。レイテンシは、テクスチャーのフェッチ回数とキャッシュの中での位置づけで決まります。 |
値の範囲 | 0 - 命令の総数 |
最適化 | キャッシュのスラッシングを避けるため、合体可能なテクスチャーフェッチはグループ化する必要があります。各グループのテクスチャーフェッチ数を15回未満に制限します。 |
追加情報 | 一般的に、 VkImageはVkSamplerの有無に関わらず読み込み可能です。入力添付ファイルの読み込みも含まれています。 |
説明 | すべてのフロー制御命令の合計数。フロー制御命令が多いほど、シェーダーコードの分岐が多くなり、シェーダー性能に悪影響を及ぼす可能性があります。制御フロー命令は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の書き込みです。 |