11

Stream 2.0 ベータ版の ATI OpenCL 実装で遊んでいます。現在のベータ版の OpenCL は、現時点では CPU のみを使用しており、次のバージョンでは GPU カーネルをサポートする予定です。仕事用マシンに ATI GPU があるため、Stream をダウンロードしました。

私は、GPU を使用することで得られる利益から大きな恩恵を受けるソフトウェアを作成しています。ただし、このソフトウェアは顧客のマシンで実行されますが、開発するハードウェアを正確に選択して最適化する余裕はありません (多くの科学計算環境のように)。私の質問は、私のアプリケーションで ATI OpenCL 実装を配布した場合、NVidia ビデオ カードなどを使用できなくなるということですか? また、NVidia OpenCL SDK を使用すると、AMD チップ上で最適に実行されることはありません (ATI/AMD リンクを考慮すると)。

言い換えれば、最終的に OpenCL の実装を提供する責任は誰にあるのでしょうか? ユーザーは、AMD CPU で最適なパフォーマンスを提供する「ドライバー」と一緒に、NVidia ビデオ カード用の OpenCL「ドライバー」をインストールできますか?

余談ですが、Khronos メッセージ ボード以外に、OpenCL の優れた/アクティブなサポート フォーラムはありますか? ATI にはボードがあり、NVidia にもボードがあると思われますが、OpenCL ユーザー/開発者コミュニティはどこでたむろしていますか? すでに一か所に統合​​されていますか?

4

2 に答える 2

9

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

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

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

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

明らかに、エンドユーザーはOpenCLをまったく持っていない可能性があるため、遅延ロードまたはLoadLibraryopencl.dllとダイナミックリンクが必要になる場合があります。

Intel OpenCL SDK、NVidia GPU、およびAMDGPUに対してコードをテストすることをお勧めします。あるプラットフォームでは問題を引き起こすバグが見つかる可能性がありますが、他のプラットフォームでは正常に機能します。また、ドライバーのバグが原因で、これらのプラットフォームの1つで、完全に細かいコードが不思議なことに正しい結果をもたらさないことにも気付くでしょう。

于 2012-03-10T05:56:31.243 に答える
6

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

これは機能する方法ですが、まだこの方法では機能していません。

心に留めておくべきもう 1 つの重要な点は、OpenCL を使用して CPU で実行されているコードは、おそらく GPU で実行されているコードとは異なる最適化されたカーネル パラメーターを使用するため、ベンダー固有のコード パスを提供する必要があるということです。GPU ベンダー間の違いについても、おそらく同じことが当てはまります。

于 2009-09-07T09:35:25.343 に答える