1

大量のデータをホストからデバイスに一度にコピーするか、一連のチャンクとして順番にコピーしたいのですが、アルゴリズムに影響します。私の質問は、どちらがより多くのオーバーヘッドを持っているかということです。複数のコピー操作を呼び出すと、他の操作よりもオーバーヘッドが大きくなると思います。しかし、私はこの概念をより詳細に知りたいだけです(思考は一般的に現実と一致しません:))。ある種の文書への参照を示すことができれば、それは本当にありがたいです!

よろしく、イルカー

4

1 に答える 1

1

コピーが同期 (デフォルト) の場合、各コピー関数は GPU がアイドル状態になるまで待機してから戻るため、より多くのオーバーヘッドが発生します。コピーが非同期の場合、オーバーヘッドは数マイクロ秒であり、小さな memcpy でのみ表示されます。

NULL ストリームで非同期 memcpy を指定できることに注意してください。それでも、CPU/GPU 同時実行の利点が得られます。(つまり、GPU が前の memcpy を処理している間に、CPU が次の memcpy を開始できます。)

CUDA ハンドブック (完全な開示のために、私が書いたと言うべきです) では、この問題を第 6 章で取り上げており、ソース コードには、memcpy の呼び出しのオーバーヘッドを隠す memcpy のサイズを測定するアプリが含まれています。リポジトリで breakevenMemcpyHtoD.cu を確認してください。

https://github.com/ArchaeaSoftware/cudahandbook/tree/master/concurrency

于 2013-02-11T15:51:54.160 に答える