2011-11-22 2 views
1

私は流体の流れをモデル化する粒子法であるSmoothed Particle流体力学を実装するファイルをいくつか持っています。同等のCPU専用機能を置き換えるためのCUDAカーネルの作成

これらの粒子技術において最も時間のかかる構成要素の1つは、シミュレーションの各時間ステップで各粒子について最も近い近傍(K最近傍またはレンジ探索)を見つけることである。

今は、現在のCPUベースのネイバー検索ルーチンを置き換えて、GPUとCUDAを使用してネイバー検索ルーチンを高速化したいだけです。シミュレーションの残りの部分がCPU上で進行する間に、ネイバー検索だけがGPU上で実行されます。

私の質問は、コード全体をコンパイルするにはどうしたらよいですか?具体的には、近隣探索カーネル関数をファイルnsearch.cuに書き込むとします。

それから私は.cuファイルとしてすべての私の以前の.cppファイルの名前を変更する必要がありnvccを使用して(nsearch.cuと一緒に)セット全体を再コンパイルしますか?簡単な例では、少なくともnvcc で拡張子が.cpp、つまりnvcc foo.cuのCUDAコードをコンパイルできませんが、nvcc hello.cppではコンパイルできません。

要するに、このCUDAプラグインの構造はどうなっていますか、それをコンパイルするにはどうすればいいですか?

私はUbuntu Linuxの10.10、CUDA 4.0、NVIDIA GTX 570(計算能力を2.0)とあなたがnsearch.cuファイルを書いて、でそれをコンパイルする必要が私の仕事

答えて

2

ためのgccコンパイラを使用しています"nvcc -c -o nsearch.o"を実行し、nsearch.oをメインアプリケーションにリンクします。実際のカーネルの周りにラッパーをエクスポートするnsearch.hファイルがなければなりません。

in nsearch.h : 
void kern(); 

in nsearch.cu: 
void __global__ kern__() { 
} 
void kern() { 
    kern__<<<...>>>(); 
} 
0

私はあなたに非常によく似た思考プロセスをしてきたので、これは、あなたの質問に広い応答である - CPU上の他のすべてを残しながら、GPUへの私の流体力学コードを移動。私はそれがあなたが始めるべき場所だと思うが、私はまた、あなたの他のコードを全てGPUに移す計画を立てなければならないと思う。私が見つけたのは、GPUが私のシミュレーションに必要な行列分解を行う上で非常に優れていたのに対し、GPUとCPUメモリ間のメモリ境界は非常に遅く、GPUシミュレーション時間の80〜90%がcudaMemcpyDeviceToHost/cudaMemcpyHostToDevice。

関連する問題