CUDA ストリームを使用して、非同期データ転送を有効にし、メモリ コピーのレイテンシを隠しています。2 つの CPU スレッドと 2 つの CUDA ストリームがあります。1 つは、最初の CPU スレッドによって開始された一連の cudaMemcpyAsync 呼び出しである「データ」ストリームであり、もう 1 つは、計算カーネルを実行する「計算」ストリームです。データ ストリームはコンピューティング ストリームのバッチを準備しているため、ストリームが処理するバッチが完全にメモリに読み込まれるようにすることがコンピューティング ストリームにとって重要です。
そのような同期またはその他のメカニズムに CUDA イベントを使用する必要がありますか?
更新:各ストリームでデータのコピー/計算を使用して個別のストリームを使用できない理由を明確にさせてください。問題は、バッチを順番に処理する必要があることです。つまり、バッチを並行して実行することはできません (もちろん、複数のストリームで実行することは可能でした)。ただし、各バッチを処理するときに、次のバッチのデータを事前にロードして、データ転送を隠すことができます。ロバートの例を使用するには:
cudaMemcpyAsync( <data for batch1>, dataStream);
cudaMemcpyAsync( <data for batch2>, dataStream);
kernelForBatch1<<<..., opsStream>>>(...);
kernelForBatch2<<<..., opsStream>>>(...);