CUDA初心者はこちら。CUDA:カーネルに引数を渡すとカーネルの起動が遅くなるのですか?
私のコードでは、私は現在、ホストコードのループで多くの時間カーネルを起動しています。 (私はブロック間の同期が必要なので)。だから私はカーネルの立ち上げを最適化できるかどうか疑問に思った。
私のカーネルが起動したら、このような何かを見て:だから、いくつかの信号は明らかにCPUからGPUに行かなければならないが、引数の受け渡しは、このプロセスを作る場合、私は思ったんだけど、カーネルを起動するために
MyKernel<<<blocks,threadsperblock>>>(double_ptr, double_ptr, int N, double x);
を著しく遅い。
カーネルへの引数は毎回同じなので、おそらく私は、一度それらをコピーすることで時間を節約
__device__ int N;
<and somehow (how?) copy the value to this name N on the GPU once>
によって定義された名前で、カーネルでそれらにアクセスして、単純にしてカーネルを起動することができそのような引数はありません
MyKernel<<<blocks,threadsperblock>>>();
私のプログラムはこれより速くなりますか? これを行う最善の方法は何ですか? AFAIK引数はいくつかの定数グローバルメモリに格納されます。手動で転送された値が高速または高速のメモリに格納されていることを確認するにはどうすればよいですか?
ご協力いただきありがとうございます。
極端な場合、非常に "タイト"なカーネルを使用している場合、実際には問題になるかもしれませんが、その間に他の高遅延操作が行われていない場合にのみ当てはまります。 – pszilard
非常にタイトなカーネルでも。 1バイトまたは10KBをGPUに送信することは重要ではありません。待ち時間とスループットではないため、同じ時間がかかります。メガバイトのデータを送信すると、スループットが向上する可能性があります... – CygnusX1