2016-07-20 3 views
0

私は、最適化のためにコア上でOpenCLを使用し、すべてがうまく動作していて、他のマシンにインストールするようにこのソフトウェアをパッケージ化しているソフトウェアがあります。OpenCLソフトウェアの配布

例えば、ソフトウェアがビルドされたマシンでは、CPUと2つのGPUがあり、ソフトウェアがOpenCLの初期化によって返されたすべてのデバイスを検出しているので混乱しています... so ...私はすべての異なるベンダーのOpenCL Dllとライブラリを配布する必要がありますか?

誰でも、システムの種類を使用するソフトウェアを配布する最良の方法は何ですか?

ご協力いただければ幸いです。

親切にしてください。

答えて

0

あなたのコードは、ターゲットマシン上でコンパイルされます。利用可能なデバイスでのみカーネルをディスパッチするように注意する必要があります。したがって、実行時にカーネルはOpenCLをサポートするデバイスでのみ実行されます。もちろん、それは、OpenCL対応デバイスを搭載したマシンだけがあなたの最適化を利用することを意味します。

+0

しかし、このソフトウェアはゲームですか?ソフトウェアは、カーネルとデバイスを動的に正しくマップしますが、私のユーザーの一人がNVIDIAを使用し、他のユーザーがAMDのみを使用している場合は、私は、ユーザーのマシン上でコンパイルするオプションがありません...だから私は、ユーザーが自分のシステムのドライバをインストールする必要がありますか? –

+0

HWがOpenCLをサポートしている限り、あなたは大丈夫です。それはあなた(またはユーザー)が緩んでいない場合。インテルでコンパイルされたコードをARM上で実行する予定はありませんか? –

1

OpenCLベンダーライブラリは、各GPUベンダーのグラフィックスドライバパッケージに含まれています。 OpenCLまたはそのベンダーライブラリを配布する必要がないように、グラフィックドライバをインストールするときに共通のOpenCL.dllをインストールして登録します。

これはAMD/ATI、nVidia、Intel GPUで動作します。しかし、他のGPUベンダーとは連携しないかもしれません。残念ながら、これは合理的に新しいGPUと最近のドライバにのみ適用されます。最後の12〜18か月を言いましょう。次のシナリオを検討する必要があります。

  1. Windowsがあり
  2. をドライバは何年で時代遅れされ、新しいドライバがインストールされていない
  3. 汎用ドライバでGPUを実行することができるし、何のベンダ固有のドライバがインストールされていません新しいドライバ
  4. は、GPUがOpenCLの

をサポートしていないすべての場合において、ユーザは、最新のGPUドライバをインストールするために持っていない、または使用できない場合は、その後、通常のOpenCLは、とにかく利用できません。これは、インストーラロジック/インタラクションによって実行されるシナリオです。

2つの問題が残ります。まず、OpenCLプラットフォームとしてSIMD(SSE2/AVX)を搭載したCPUを使用する場合は、インテルCPU(C言語)を使用したOpenCLパッケージを手動でインストールする必要があります。このタスクは、GPUドライバのインストールに似ていますが、このシナリオでは、インストーラロジックによっても処理する必要があります。私は、ベンダーのDLLをインテルから配布するのをやめ、インテルのOpenCL CPUパッケージの適切なインストーラーを提案します。

2番目の問題は、ベンダーまたはドライバパッケージによってOpenCLがインストールされていない場合、通常はOpenCL.dllも存在しないことです。ほとんどの場合、このライブラリはオンデマンドではなくダイナミックにリンクされているので(GetProcAddress)、OpenCLを使用するアプリケーションはロードされず、DLLが見つかりませんというメッセージボックスで停止します。アプリケーションが報告やヘルプを提供するための変更はありません。このための最善の解決策は、ロード遅延(単にOpenCL.libをリンカー設定のロード遅延として指定する)を使用して、アプリケーションで最初にOpenCL APIが使用される前にシステムにインストールされた汎用DLLを実行することですと呼ばれる。そして、合理的なユーザインタラクションとサポートを提供します。

さらに、3市長のベンダーはすべて、エンドユーザーのOpenCL配布パッケージを持っています。私はまだ最新のドライバをインストールすることをお勧めします。