2011-11-27 9 views

答えて

2

CUDAストリームを使用すると、PCI Express転送をカーネル処理と同時に実行できます。 Amdahlの法則により、データ転送とカーネル処理を等しく実行するワークロードだけがCUDAストリームの恩恵を受けます。ワークロードが利益をもたらすかどうかを判断するには、アプリケーションにタイミングコードを追加するかプロファイルを作成するか、理論的な最大パフォーマンスのメリットを確認します。

CUDAストリームからパフォーマンスを向上させるには、ダウンロード、カーネルの起動、アップロードを「ソフトウェアパイプライン」する必要があります。

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
} 
foreach stream { 
    LaunchKernel<<<...stream>>>(...); 
    // you can launch multiple kernels in stream, if desired. 
} 
foreach stream { 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 

ないこの:

foreach stream { 
    cudaMemcpyAsync(device[stream], host[stream], ... stream); 
    LaunchKernel<<<...stream>>>(...); 
    cudaMemcpyAsync(host[stream], device[stream], ... stream); 
} 
1

はい、計算時間が重要であり、すべてのデータが相互に依存していない問題でこれを行います。それで、すでに高価なメモリ転送で高価な計算時間を隠すことができます。

CUDAはメモリコピーとカーネルの実行を同時に実行できるため、一方のストリームがメモリコピーを実行している間にもう一方は計算を実行できます。

関連する問題