これらは同じ一般的な目的を果たしますが、実際の違いは、計算シェーダーが OpenGL や Direct3D などのグラフィックス API の拡張であることです。コンピューティング シェーダーを使用すると、通常のプログラム可能なグラフィックス パイプライン (頂点 -> テッセレーション -> ジオメトリ -> フラグメントなど) をバイパスし、前述のパイプラインのどこかにアルゴリズムを押し込むことなく、ホスト GPU の基礎となる計算能力にアクセスできます。コンピューティング シェーダーのワークグループ内の呼び出し間に共有メモリ/同期が絶対に存在します。
また、この「ピクセル」という概念がどこから来ているのかもわかりません。コンピューティング シェーダーを作成する目的は、実際のグラフィックス パイプライン (頂点、フラグメント/ピクセルなど) にのみ適用される構成要素から開発の負担を取り除き、すべてを汎用目的 (したがってGPGPUという用語) のコンピューティング/メモリ機能に落とし込むことでした。確かに、OpenCL や CUDA などの専用 API ではなく D3D/OpenGL コンピューティング シェーダーを使用する場合、レンダリングに関連する何かを達成する必要があることがよくありますが、これは決して要件ではありません。
これらすべてをより正式なコンテキストに入れるために、GLSL 仕様が計算プロセッサをどのように導入するかを考えてみましょう。ここから取り除かなければならない重要な点は、それらが新しいタイプのシェーダーであるということですが、グラフィックス パイプラインの新しい段階ではなく、独自に存在するということです。
計算プロセッサ
計算プロセッサは、他のシェーダ プロセッサから独立して動作するプログラム可能なユニットです。
[...]
計算シェーダーは、テクスチャ、バッファー、画像変数、アトミック カウンターなど、フラグメントやその他のシェーダー プロセッサと同じリソースの多くにアクセスできます。定義済みの入力も固定機能の出力もありません。これはグラフィックス パイプラインの一部ではなく、目に見える副作用は、画像、ストレージ バッファー、およびアトミック カウンターへの変更によるものです。
計算シェーダーは、ワーク グループと呼ばれるワーク アイテムのグループで動作します。ワーク グループは、同じコードを並列で実行するシェーダー呼び出しのコレクションです。ワーク グループ内の呼び出しは、共有変数を介して同じワーク グループの他のメンバーとデータを共有し、同じワーク グループの他のメンバーと同期するためにメモリと制御バリアを発行する場合があります。