Nvida CUDA Cプログラミングガイド4.0のセクション3.2.5.5.4では、デバイス間のメモリコピーが発行された場合、異なるストリームからの2つのコマンドを同時に実行することはできませんそれらの間にある。私はそれが正確に何を意味するのか分かりません。誰かが私の混乱を明確にすることを望みます。同時のカーネルの "暗黙の同期"の理解方法
私のプログラムは、ストリーム0とストリーム1の2つのストリームを持っているとしましょう。以下は、これらのストリームに起動されるカーネルの順序です。
カーネル0.0(ストリーム0;実行時間が10ミリ秒であると仮定する();実行時間が1ミリ秒であると仮定ストリーム1)
カーネル1.1(ストリーム1、
カーネル1.0の実行時間をとります3 MS)
カーネル1.2(ストリーム1であり、実行時間が6であると仮定し、このカーネルは、デバイス間のメモリコピーを引き起こすが、実行時間を仮定すると、1ミリ秒)
カーネル1.3(ストリーム1でありますms)
プログラムに他のオーバーヘッドがなく、GPUにこれらのカーネルを同時に実行するのに十分なSMがあるとします。私の質問は、カーネル0.0がカーネル1.2とカーネル1.3と同時に実行できるかどうかです。プログラム全体の実行時間はどのくらいですか?
カーネル1.2では、デバイス間のメモリコピーを「引き起こす」ことができますか?これを行うには、cudaMemcpyのようなホストAPIコールを使用する必要があります。 – talonmies
クイック返信をありがとう。それは私が混乱したところです。私のカーネル1.2では、いくつかのメモリ位置から別のメモリ位置にいくつかのデータをコピーするいくつかの命令があります。それは私が「カーネル1.2はデバイス間のメモリコピーを引き起こす」という意味です。私はストリーム0のカーネルとストリーム1のカーネルが並行して実行できると言うでしょうか? – xhe8
おそらくあなたのすべてがグローバルメモリを読み書きします。そうでなければ、あなたはそれらを実行しますか?それはデバイスからデバイスへのメモリコピーではありません。 – talonmies