2009-09-07 15 views
11

私はStream 2.0ベータ版でATI OpenCLの実装を行ってきました。現在のベータ版のOpenCLは現在のところCPUのみを使用しています。次のバージョンはGPUカーネルをサポートする予定です。私は自分の仕事用マシンにATI GPUを持っているので、Streamをダウンロードしました。ハードウェアでOpenCLを実行する

GPUを使用することで大きな利益を得るソフトウェアを作成します。しかし、このソフトウェアは顧客のマシン上で動作しますが、開発するハードウェアを厳選して最適化するための贅沢はありません。だから私の質問は、もし私がATI OpenCLの実装を自分のアプリケーションに配布すれば、それは決してそれが決して使えないことを意味するでしょう。 NVidiaビデオカード? NVidia OpenCL SDKを使用すると、ATI/AMDリンクを考慮してAMDチップ上で決して最適に動作することはありませんか?

つまり、誰が最終的にOpenCLの実装を担当していますか?ユーザーは、 NVIDIAビデオカード用のOpenCL 'ドライバ'とAMD CPU上で最適なパフォーマンスを提供する「ドライバ」をインストールしますか?

他にも、Khronos掲示板とは別に、OpenCLの良い/アクティブなサポートフォーラムがありますか?私は、ATIにボードがあり、NVidiaにはおそらく独自のものがあることがわかりました.OpenCLのユーザー/開発者コミュニティはどこですか?すでに1つの場所に統合されていますか?

答えて

6

最終的に、OpenCLはOpenGLと同じように動作します。つまり、ハードウェアベンダー(ATI、NVIDIA、Intel)から現在のドライバをインストールします。開発者は、アプリケーションをビルドするときにOpenCLライブラリにリンクするだけです。ユーザーがアプリケーションを実行すると、アプリケーションはドライバによって提供される適切なベンダー固有のライブラリにリダイレクトされます。

これは動作する方法ですが、この方法ではまだ動作しません。

OpenCLを使用してCPU上で実行されるコードがGPU上で実行されるコードとは異なる最適化されたカーネルパラメータを使用するため、ベンダー固有のコードパスを提供する必要があります。同じことは、GPUベンダーの違いにも当てはまります。

+0

OpenGLとの違いは、OpenGLの場合、GPUベンダーがドライバ期間を書き込みます。 OpenGLはビデオカードでのみ動作します。しかし、OpenCLでは、理想的には、CPUベンダーがCPUカーネルのドライバを書き、OpenCLカーネルはCPUスレッドやGPUスレッドで実行できるため、GPUベンダーはGPUカーネルのドライバを書きます。これは将来どのように動作するはずですか? – Roel

+0

OpenGLは、ハードウェアが特定の操作をサポートしていない場合のソフトウェアパスを常にサポートしています。そのため、OSベンダーはソフトウェアOpenGL実装を提供する必要があります(MS Windows OpenGLはOpenGL 1.1で固まっています)。おそらくOpenCLで同様のことが起こります。いずれにしても、AMD/ATIは、CPUとそのGPUの両方をサポートするOpenCLのバージョンをリリースする予定です。同様に、Intelは通常のCPUとLarrabee GPUをサポートするOpenCLをリリースする予定です。私はそれが何をサポートしているかを知るために、AppleのOpenCL実装について十分に知りません。 – Eric

+1

顧客がATIのビデオカードとIntelのCPUを持っていれば、最適なパフォーマンスが得られないと私は結論づけることができますか?つまり、彼らがインストールしたOpenCLドライバ/実装に応じて、CPUまたはGPU上でカーネルを実行しますか?私はそれがマシン上でおそらく実行されることを知っているということです。それは私の心配ではありません。私の心配は、マシン上のすべてのハードウェア、すべてのCPUコア、およびすべてのGPUのコアを使用しているため、高速で実行されるかどうかです。 – Roel

8

私はこれが上記の古い答えの古い質問であることを知っています。私はそれを最新の答えで更新すると思った。

はい、OpenCLカーネルとコードの実装は、プラットフォームとデバイスの列挙コードが正しく記述された今日、さまざまなデバイスで動作します。正しいプラットフォームとデバイスの列挙コードを書くのはかなり簡単ですが、難しい部分はどのプラットフォームやデバイスを選択するかです。おそらく、ユーザーが1つを選択するか、それぞれに対してマイクロベンチマークを実行し、動的に1つを選択してベンチ結果をキャッシュすることができる、アプリケーションに構成オプションを提示する必要があります。

人は複数のプラットフォームを持つことができます。例えば、私のシステムはGTX 580 SLIを持っているので、NVidiaプラットフォームには2つのデバイスがあります。また、Intel OpenCL SDKも搭載されているため、CoreI7 990x Extreme CPUもIntelプラットフォームのデバイスとして登場します。

はいNVidia OpenCL SDKを使用して開発および構築されたバイナリは、ATIまたはIntel OpenCLで動作し、その逆もあります。それ以上心配する必要はありません。

明らかに、エンドユーザにはOpenCLが何もない可能性があるため、opencl.dllとダイナミックリンクを遅延ロードまたはLoadLibraryする必要があります。

Intel OpenCL SDK、NVidia GPU、およびAMD GPUに対してコードをテストすることを強くお勧めします。 1つのプラットフォーム上で問題を引き起こすバグはたぶん見つかるでしょうが、他のプラットフォームでうまく動作します。おそらく、ドライバのバグのために、完全に細かいコードでは、これらのプラットフォームのいずれかで不思議にも正しい結果が得られないことがあります。

+0

そのおかげで、最初の答えから何かが変わったかどうかを知る新しい質問を書いていました... – Mikarnage

関連する問題