OpenCLがGPUのメモリアーキテクチャを制御し、より良い最適化を可能にすることを知っていますが、これを除けば、ベクトル演算(加算、乗算、反転など)にコンピュートシェーダーを使用できますか?
他のOpenGLシェーダータイプとは対照的に、計算シェーダーはコンピューターグラフィックスに直接関連せず、CUDAやOpenCLと同様に、基盤となるハードウェアのはるかに直接的な抽象化を提供します。カスタマイズ可能なワークグループサイズ、共有メモリ、グループ内同期、およびCUDAとOpenCLで知られ、愛されているすべてのものを提供します。
主な違いは基本的に次のとおりです。
つまり、計算シェーダーは、他のシェーダーのグラフィックス手法とは対照的に、GPUプログラミングに対する通常の(OpenCL/CUDAのような)計算手法を示しながら、実際に既存のOpenGLアプリケーション内での使用を意図したものです。 OpenCL/CUDAの計算の柔軟性を持たないステージ(もちろん、他の利点も提供します)。そのため、計算タスクの実行は、一般的なコンピューティングを目的としない他のシェーダーステージにタスクを絞り込んだり、同期する必要のある追加のコンピューティングフレームワークを導入するよりも、柔軟で直接的かつ簡単です。
コンピュートシェーダーは、OpenCLで達成できるほぼすべてのことを、ハードウェアリソースに対する同じ柔軟性と制御、同じプログラミングアプローチで実行できる必要があります。そのため、実行したいタスクに適したGPUに適したアルゴリズム(CUDAまたはOpenCLでうまく機能する)があれば、はい、計算シェーダーでも実行できます。しかし、計算シェーダーのためだけにOpenGLを使用することはあまり意味がありません(これは現在でも、おそらく最初からリアルタイムコンピューターグラフィックスのフレームワークです)。このために、OpenCLまたはCUDAを使用できます。コンピューティングシェーダーの真の強みは、グラフィックスとコンピューティング機能を混在させるときに役立ちます。
こちら を見てください。要約:
はい、OpenCLはすでに存在しますが、ヘビー級のアプリケーション(CFD、FEMなど)を対象としており、OpenGLよりもはるかに普遍的なです(GPUを超えて考えてください... IntelのXeon Phiアーキテクチャは50以上のx86コアをサポートします) )。
また、OpenGL/CUDAとOpenCLの間でバッファーを共有するのは面白くありません。