0

非常に頻繁に呼び出されるCUDAを使用した畳み込みカーネルがあります(リアルタイムレンダリングに使用されます)。カーネルを呼び出すたびに cudaMalloc と cudaFree を使用する必要がありますか? cudaMalloc の結果へのポインターを格納し、カーネルの実行前に cudaMemcpy を実行しようとしましたが、奇妙な動作が発生しました (カーネルの実行後に空のメモリなど)。

固定メモリを使用することも考えていましたが、毎回割り当てて解放する必要があると、アプリケーションの速度が低下する可能性さえあります。非常に頻繁に呼び出されるカーネルをどのように処理すればよいですか?

4

2 に答える 2

3

いいえ、カーネル呼び出しごとにmalloc/freeする理由はありません。Mallocされたメモリは、解放するまで有効です。cudaMemcpyの有無にかかわらず、割り当てられたメモリで多くのカーネルを実行して、その間の内容を変更するコードがたくさんあります。

あなたの問題は他の場所にあるに違いありません。問題を示す可能な限り最小の例に要約して、コードを投稿してみてください。

于 2012-04-13T00:32:37.810 に答える
2

あなたがしていることがうまくいくように思えます。

カーネルにバグがあるかもしれません。カーネルが起動してデバッグした後、cudaThreadSynchronize呼び出しとcudaGetLastError呼び出しを追加してみてください。

これ以上の情報がなければ、それ以上のアドバイスを提供することはできません。

于 2012-04-13T00:33:29.167 に答える