フラグメント プログラム ユニットにロードするアセンブリ言語命令の最大数はありますか? 私はCPUからGPUに移植するアルゴリズムを持っていますが、どうやらそれはGPUには適合しません。
質問する
7232 次
2 に答える
42
いくつかのハード制限とソフト制限があり、そのうちのいくつかはすぐにはわかりません。
- 命令スロット: ハードウェアがローカル メモリに収容できる命令の総数。
- 実行された命令: 実行される命令の最大数 (ループ内で複数回実行される命令を含む)
- 1 つの GLSL 命令を 12 以上の命令にマップできます
- オプティマイザーの品質に応じて、複数の GLSL 命令を 1 つの命令にマップできます (例: 乗加算、ドット、lerp)。
- 制限された一時レジスタ (32 個のみ) は、SM4 以前のハードウェアでは必要以上の命令を必要とする場合があります (4096 ではそのような問題はありません)。
- スウィズリングは通常、最近では追加の命令を必要としませんが、一部の古いハードウェアでは実行され、一部のハードウェアでは状況によっては実行される場合があります (特に gl_FragColor がそのような候補です)。
- 実際の命令に関係なく、OpenGL 2.0 互換のハードウェアは 8 つの依存テクスチャ フェッチに制限されています (OpenGL 2.1 以上を実行できるハードウェアでは制限されません)。
これらの保証された最小値があります (ほとんどのカードにはそれ以上あります):
- OpenGL 2.x (SM3) 対応ハードウェア上の頂点およびピクセル シェーダー用の 512 の命令スロット
- 65536 実行命令
- 3.x (SM4) ハードウェア上の 4096 頂点および 65536 ピクセル シェーダー命令スロット
- 65536 の実行された頂点シェーダー命令、無制限のピクセル シェーダー命令
- 2.x (SM3) ハードウェアでは少なくとも 24 の動的分岐が可能
- SM4 ハードウェアでの完全に動的な分岐 (制限なし)
- SM2.x では条件付きの移動のみが利用可能です。それ以外はすべて、コードの複製とループの展開によって対応するか、失敗する必要があります。
于 2011-04-08T23:51:04.390 に答える
2
シェーダーが持つことができる命令の最大量には制限があります。私の知る限り、GPU ごとに異なります。シェーダーが大きすぎると、コンパイルでエラーが発生します。
于 2010-04-18T19:05:02.307 に答える