18

フラグメント プログラム ユニットにロードするアセンブリ言語命令の最大数はありますか? 私はCPUからGPUに移植するアルゴリズムを持っていますが、どうやらそれはGPUには適合しません。

4

2 に答える 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 に答える