GPU と GPU プログラミングをより深く理解するために、シェーダーとそれが GPU 上でどのように実装されているかについて、よりよく理解したいと思います。シェーダー プログラムと GPU コアの間には 1 対 1 の関係があるのでしょうか。頂点シェーダー プログラムは 1 つのコアで実行され、フラグメント シェーダーは別のコアで実行されるのでしょうか。その場合、データは頂点シェーダー コアからフラグメント シェーダー コアに渡されるのでしょうか。それとも、GPU 上の各コアがすべてのシェーダーとグラフィックス パイプライン全体を担当しているのでしょうか。つまり、1 つの GPU コアには頂点シェーダー、テッセレーション シェーダー、ジオメトリ シェーダーなどが含まれており、各コアが最終的なピクセルを出力するということです。私の理解を深めるのに役立つ情報があれば、ぜひ教えてください。
答え1
正確な関係はカードとドライバーによって異なります。シェーダー プログラムは、汎用形式 (OpenGL や DirectX など) からカードが直接実行できる形式に変換されます。これは、バイトコードを使用する Java などの言語のジャストインタイム コンパイルに似ています。
したがって、関係はプログラムとカードの性質によって異なります。プログラムが大きく複雑な場合は、カードに複数のコアを割り当てる必要がある場合がありますが、1 つのコアが複数のストリーム プロセッサでシェーダーの多くのインスタンスを実行する可能性が高くなります。
最新のカードは作業を動的に割り当てるため、1:1 の関係になることはほとんどありません。各コアには複数のストリーム プロセッサがあるため、複雑すぎない場合は複数のシェーダーを同時に処理できます。