2013-04-07 27 views
49

私はOpenCLのは、GPUのメモリアーキテクチャの制御を与えるので、より良い最適化を可能にする、しかし、脇にこれを残し、我々は計算シェーダはベクトル演算(加算、乗算、反転など)のために使用することができます知っていますか?別の視点のためのOpenCLとOpenGLの計算シェーダの違いは何ですか?

答えて

47

。カスタマイズ可能なワークグループサイズ、共有メモリ、グループ内同期、およびCUDAとOpenCLで知られているすべてのものを提供します。

主な違いは、基本的には、以下のとおりです。

  • それは、これらのプログラミング言語bewteen、このような大きな違いがありませんが、あなたはしかし、すべてのグラフィックス関連GLSL機能をない使用することができますOpenCLのC.の代わりにGLSLを使用していますOpenCLのに利用できる、高度なテクスチャの種類(例えば、キュ​​ーブマップアレイ)、高度なフィルタリングのような(例えばミップマッピング、うまく[OK]を、あなたはおそらくミップレベルを自分で計算する必要があります)、および4x4の行列や幾何学的な機能のような小さな便利なもの。
  • これは、任意の他のGLSLシェーダのようなOpenGLのシェーダプログラムです。これは、OpenGLとOpenCL/CUDAとの間のインターフェースが面倒な作業を可能にする一方で、(バッファ、テクスチャ、画像のような)OpenGLデータへのアクセスが簡単であることを意味します。同じ方法で既存のOpenGLワークフローに統合することも簡単ですが、OpenCLを設定することは、既存のグラフィックスパイプラインとの統合については言及していません。いつものを示すもののそれでは、これはに降りてくることで、そのコンピュートシェーダは実際に、既存のOpenGLアプリケーション内での使用を目的としてい

(OpenCLの/ CUDAのような)グラフィックスとは対照的に、GPUプログラミングへのアプローチを計算しますOpenCL/CUDAの計算柔軟性を持たない他のシェーダステージへのアプローチ(もちろん他の利点もあります)。したがって、一般的なコンピューティングには向いていない他のシェーダステージに絞り込んだり、同期する必要がある追加のコンピューティングフレームワークを導入するよりも、計算タスクをより柔軟に、直接的に簡単に行うことができます。

計算シェーダは、ハードウェアリソースと同様の柔軟性と制御性を持ち、同じプログラミング手法で、OpenCLで達成可能なほとんどすべてを実行できるはずです。ですから、実行したいタスクに適したGPUに適したアルゴリズム(CUDAやOpenCLでうまくいくでしょう)を持っていれば、計算シェーダでもそれを行うことができます。しかし、OpenGLを使うことはそれほど意味がありません。コンピューティング・シェイダーのために、OpenGLを使うのはそれほど意味がありません。このためには、OpenCLまたはCUDAを使用できます。計算シェーダの本当の強みは、グラフィックスとコンピューティング機能を混在させるときです。

+9

OpenCLがGLSLに明示的に* not *を与えていることの精度保証を忘れないでください。 –

+0

@NicolBolas算術演算と関数の意味ですか? –

+1

はい。浮動小数点精度は2つの場合で非常に異なります。 –

2

ルックhere。 は要約:

はい、OpenCLのは、すでに存在していたが、それはヘビー級のアプリケーションをターゲットと(ETC CFD、FEMを、と思う)、そしてそれははるかに普遍のOpenGLよりです(> IntelのXeonプロセッサピピアーキテクチャをサポートしています...のGPUを超えて考えます50のx86コア)。

はまた、OpenGLの/ CUDAやOpenCLの間のバッファを共有することは楽しいではありません。他のOpenGLシェーダタイプ、計算シェーダを直接コンピュータグラフィックスに関連し、CUDAとOpenCLのと同様、基礎となるハードウェアのはるかに直接抽象化を提供していないとは対照的に

+0

実際には、ハイエンドGPUは、ハイエンドCPUよりも40分の1の時間で、マトリックスコンピューティングの並列化可能な問題をより具体的に解決することができます。私は今のところCPU能力については本当に気にしません。私の質問に戻るには、計算のシェーダーでMatrix Inversionと言うことができますか? OpenCLと比較してどれくらいの作業が必要ですか? – Maiss

+0

AFAIK、並列アルゴリズムは、*疎行列を反転するためだけに存在し、これらはC99(OpenCLのカーネル言語)で記述したいと考えるほど複雑です。 –

+1

OpenCLの計算シェーダでは、OpenCLのC99方言と比較して、OpenGLがカーネル言語として_GLSL_(OpenGLシェーディング言語)を使用するという大きな違いがあります。行列演算を行うことに制限はなく(たとえば、疎行列でのみ動作するなど)、特定の場合には、GLSLの固有の行列演算の一部を利用するブロックベースの行列アルゴリズムを使用することができます。 – radical7

関連する問題