2011-11-12 8 views
2

私はC++とCUDAを使用してGPGPUを利用する研究アプリケーションを作成しています。私はアプリケーションのユーザーがGPU上で実行されるカーネルコードを書くことによってプログラムを調整できるようにしたいと考えています。C++でユーザ定義のCUDAコード

ユーザーコードを.cuファイルに出力してから、プラットフォームコンパイラを呼び出してダイナミックライブラリを作成し、実行時にホストアプリケーションによって読み込むことができると私は思っていました。これは実行可能ですか?たとえそれがあっても、私のプログラムが不安定になり、クロスプラットフォームを作るのが悪夢になることを心配しています。

いずれかの考え/代替案やコメントをいただければ幸いです。

答えて

1

理論的に可能です。代わりにCudaの代わりにOpenCLをお勧めします。 NvidiaプラットフォームではCudaほど最適化されていませんが、実行時コンパイルをサポートするように設計されています(すべてのOpenClランタイムドライバには、カーネルを実行する最初のステップとしてコンパイルが含まれます)。

OpenCLはATI(GPUとCPU)とインテルでも動作するため、OpenCLはCudaより移植性が高いという利点もあります。

1

実行可能ですが、IMOでは、ユーザーがCUDAカーネルを編集できるようにするための本当の理由が必要です。私はあなたがユーザーインターフェースのために念頭に置いていることと、ユーザーがCUDAカーネルで実行するコードが外部世界とどのようにインターフェースするのかは分かりませんが、これは手間がかかります。 CUDAカーネルのセットをあらかじめ実装しておき、ユーザーに各カーネルの既知のパラメータセットを許可する方が良いかもしれません。

あなたはpycudaを見ましたか?これは基本的にPythonユーザがPythonアプリケーションの中にC++ CUDAカーネルを書くことを可能にする同様の考え方を実装しています。 Pycudaは、ユーザーがPythonコードを書き込むカーネルと統合できるようにする機能を備えているため、Pythonスクリプトを実行すると、カーネルがコンパイルされてその一部として実行されます。 私はpycudaの内部の動作を見ていないが、私はその中心にあなたが達成しようとしているものに似た何かをやっていると仮定します。 pycudaを見ると、独自の実装を書くために何が必要かを知ることができます。

関連する問題