0

コピーとカーネルの同時操作を実行する
場合:dataCopy操作の2倍の長さのカーネルrunTimeがある場合、カーネルの実行ごとに2つのコピーを取得しますか?
私が見ているストリームの例は、1:1の関係を示しています。(コピー時間=カーネル実行時間)何か違うものがあるとどうなるのかしら。カーネルの起動ごとに常に1つのコピー操作(最大)がありますか?または、コピー操作はカーネルの起動とは無関係に実行されますか?つまり、実行時間とコピー時間がそのように機能すれば、カーネルの起動ごとに5つのコピー操作を完了することができます。
(カーネルを起動する前にキューに入れるコピー操作の数を把握しようとしています。)

1対1:(コピーする時間=カーネル実行時間)
<-stream1Copy-><-stream2Cop​​y->
......................。 ....... <-stream1Kernel->

2対1:(コピーまでの時間=カーネル実行時間の1/2)
<-stream1Copy-> <-stream2Cop​​y-> <-stream3Copy->
................... ......... <---------- stream1Kernel ------------>

4

1 に答える 1

1

カーネルの起動ごとに複数のコピーを持つことができます。特定のGPUに対して特定の時間に実行できるコピーは(デュアルコピーエンジンを備えたデバイスでは方向ごとに)1つだけですが、そのコピーが完了すると、すぐに別のコピーを開始できます。問題のカーネル起動ストリーム以外のストリームで発行された非同期コピーは、nietherストリームがストリーム0であると仮定して、そのカーネル起動とは完全に非同期で実行されます(これは、固定メモリ、つまりcudaHostAllocを使用して関連するホスト側バッファーを作成していることも前提としています)。

ベストプラクティスガイドの関連セクションを読むことをお勧めします。

計算とコピーの1:1分析が頻繁に見られる理由は、コピーされたデータがカーネル呼び出しによって消費される(または生成される)と想定されるためです。したがって、論理的には、データのブロックをこのように考えることができます。ただし、コードを一連のコピーとして構造化する方が簡単な場合は、問題はありません。当然、すべてのデータを1つのcudaMemcpy呼び出しにまとめることができれば、同じデータを転送する一連のコピーよりもわずかに効率的です。

ビジュアルプロファイラーは、データコピー操作とカーネル操作をタイムラインで比較して何が起こっているかを正確に確認するのに役立ちます。

于 2012-11-28T19:37:07.627 に答える