関数Aが開始した後、私はこのどのようにクーダカーネル機能の間で同期する?
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
のような2つのCUDAカーネルの機能を持って、私が終了するまで待ってから、関数bを開始したいです。 は私はこのようにaとbとの間cudaThreadSynchronize()を挿入し、
a<<<BLK_SIZE,THR_SIZE>>>(params,...);
err=cudaThreadSynchronize();
if(err != cudaSuccess)
printf("cudaThreadSynchronize error: %s\n", cudaGetErrorString(err));
b<<<BLK_SIZE,THR_SIZE>>>(params,...);
しかしcudaThreadSynchronize()はエラーコードを返す:the launch timed out and was terminated cuda error
私はそれを修正できますか?
簡単なコード解説:
mmap(sequence file);
mmap(reference file);
cudaMemcpy(seq_cuda, sequence);
cudaMemcpy(ref_cuda,reference);
kernel<<<>>>(params); //find short sequence in reference
cudaThreadSynchronize();
kernel<<<>>>(params);
cudaMemcpy(result, result_cuda);
report result
とカーネル関数では、比較の回数を減らすためのアルゴリズムをパターンマッチングのためのいくつかの場合には、他を含むループのための大きながあります。
NvidiaのCUDAフォーラム(例:[起動がタイムアウトして終了しました](http://forums.nvidia.com/index.php?showtopic=189042))では、人々は長すぎるカーネルを指していますあなたのビデオディスプレイにも使用されているGPUで動くようにします。解決方法は、カーネルを短くするか、別のGPU(例えば、統合グラフィックス)を使用してディスプレイを駆動することです。 –
あなたはどのオペレーティングシステムを使用していますか? – talonmies
私はubuntuを使っています10.04 – enc