2012-03-09 13 views
4

誰もがCPUとGPUの両方に対して単一のコードベースを維持する経験はありますか? 可能であれば、いくつかの長期間の計算にGPUを使用するアプリケーションを作成したいのですが、互換性のあるGPUがターゲットマシンに存在しない場合は、通常のCPUバージョンを使用します。 CPUバージョンとGPUバージョンの両方にコンパイルされる条件付きコンパイル指令を使用してコードの一部を書くことができれば本当に役に立ちます。もちろん、CPUとGPUで異なる部分がいくつかありますが、アルゴリズムの本質を1か所にとどめたいと思います。それはすべて可能ですか?CPUとGPUの同じコードベース

+0

オペレーティングシステムを指定していませんが、これはオペレーティングシステム固有のものと思われます。 – dandan78

+0

CPUとGPUの両方に完全に同じコード構造を使用することはお勧めできません。両方の場合に最適ではないためです。 –

+2

これは抽象的な意味で可能です。何らかの組織が必要ですが、確かに実行可能です。たとえば、[Thrust](http://code.google.com/p/thrust/)(これは現在CUDAにバンドルされています)をご覧ください。実際の計算にはいくつかのバックエンドがあります。 – Bart

答えて

1

OpenCLは、Cベースの言語です。 GPL(NVidiaおよびAMD)とCPU(IntelおよびAMD)で動作するOpenCLプラットフォームが存在します。

GPLとCPUの両方で同じOpenCLコードを実行することは可能ですが、実際にはターゲットデバイス用に最適化する必要があります。最良の性能を得るには、異なるGPUとCPUに対して異なるコードを記述する必要があります。しかし、CPU OpenCLプラットフォームは、GPUに最適化されたコードでさえ、低性能フォールバックとして機能することができます。

ターゲットデバイス(CPUまたはGPU)に応じて実行する条件付きディレクティブを作成することができれば、複数のデバイスでOpenCLコードのパフォーマンスを向上させることができます。

+0

私が知る限り、CUDAはC/C++言語の亜種を使用しています。また、ATIとNVidia GPUの両方をサポートするはずの新しいVisual Studio 11があります。ですから、私はOpenGLだけに制限されていないと思いますか?別のポイントは、私はいくつかのCPU/GPU固有のコードを書くことに同意している、私はちょうどアルゴリズムの主要なロジックの2つのバージョンを保ちたいとは思わない。 – Max

関連する問題