GPGPU は、GPU でさまざまなプロセスを実行する個別のプラットフォームのセット全体ですか、それとも同じことを達成するために OpenGL ライブラリを使用していますか? つまり、GPGPU には独自のライブラリ セットがあり、それはハードウェアに依存していますか? または、ハードウェアが OpenGL をサポートしている限り、どのハードウェアでも実行できますか? GPGPU が OpenGL とどのように違うのかよくわかりません。OpenGL の副産物として、かなりの並列計算が行われることを私は知っています。そのため、そのグラフィック機能だけを実際に使用する必要はありません。しかし、GPGPU はどうですか?
4 に答える
OpenCL GPGPU はハードウェアに依存しません (むしろ、Nvidia と AMD の間)。CUDA は Nvidia 専用の GPGPU 言語です。
GPGPU は、OpenGL API の範囲外の任意の操作を実行できるという点で OpenGL とは異なります。並列プロセスを介して疎行列の乗算を行いたいですか? OpenCL または CUDA を使用してください。OpenGL はこれをビルドする機能を提供しません (可能であれば、はるかに困難になります)。
GPGPU は、OpenGL および DirecX とは別のものです。
GPGU は概念であり、単に絵を描くのではなく、GPU を使用して任意の計算を行う機能を指します。
現在、GPGPU を実行するためのメカニズムは 2 つあります。最も簡単な方法は、GPGPU 用に設計された API を使用することです。OpenCL はクロスプラットフォーム方式です。CUDA は、NVIDIA のエコシステムに限定したい人のために存在します。これらの API は、GPU でコードを実行するための C/C++ API と特別な言語を定義し、GPU メモリとのインターフェイス (処理するデータを送信して結果を読み取る) にも使用します。
もう 1 つの方法は、通常のレンダリング API を使用して単純に「画像」を描画し、結果を読み取ることです。これを使用するには、入力データと出力データをフォーマットして、レンダリング システムが実行したい内容と一致するようにする必要があります。
後者の方法は、通常、2 つの例外を除いて回避されます。問題のハードウェアが OpenCL/CUDA/etc をサポートできない場合、明らかにレンダリング API を使用するしかありません。または 2 つ (GPGPU 操作を使用してレンダリング操作をフィードする場合)。インスタンスのフラスタム カリング、パーティクル システムの計算などのように考えます。実行していることを後のレンダリング操作で直接使用するだけの場合は、レンダリング API 自体を使用することをお勧めします。OpenCL/CUDA と OpenGL などのレンダリング API との間の相互運用に関連して、パフォーマンスが低下する可能性があります。
ストレートな OpenGL を使用して (カスタム シェーダーを作成し、テクスチャを使用してデータを渡すことにより) GPGPU を実行することもできますが、通常は、nVidia の CUDA などの特殊なライブラリを使用して GPGPU を実行する方が一般的です。
OpenGL は、3D アクセラレーション ハードウェアを使用するためのクロスプラットフォームの標準 API です。もしそうなら、「グラフィックカードと話すための普遍的な言語」。
GPGPU 自体は標準ではありません。これは、 GPUで汎用コンピューティングを実行するための多数の手法を指す包括的な用語です(したがって、GPGPU という名前が付けられています)。
石器時代 (CUDA/OpenCL の前) では、単純なことを行うためにフープをジャンプする必要があり、わずかに複雑なことでさえ、GPU の専門家に任せるのが最善でした。例: 2 つの配列をテクスチャに格納して追加し、(テクスチャの追加を実行するように OpenGL を設定して) マルチテクスチャリングを実行し、続いてレンダリングされたテクスチャを画面に合わせたクワッドから読み戻すことができます。
CUDA と OpenCL の出現により、GPU ハードウェアの並列処理を活用するためのいくつかの変更はあるものの、汎用コード (例: 行列乗算) を記述し、精巧な OpenGL トリックに頼ることなく GPU で実行できるようになりました (マルチテクスチャ追加のように)。
物事が少し明確になることを願っています。