3

複数の GPU でカーネルを並行して実行したいと考えています。この目的のために、使用するデバイスを切り替えてからcudaSetDevice()、対応するデバイスでカーネルを起動します。現在、通常、1 つのストリーム内のすべての呼び出しは順次実行され、並列で実行する場合は異なるストリームを使用する必要があります。これは、異なるデバイスを使用する場合にも当てはまりますか?または、この場合、両方のデバイスのデフォルト ストリームでカーネル呼び出しを実行しても、それらは引き続き並行して実行できますか?

4

1 に答える 1

6

同じホスト プロセスまたはスレッドから複数のデバイスでカーネルを同時に実行するために、デバイスごとにデフォルト以外のストリームを使用する必要はありません。カーネルの起動は非同期でノンブロッキングであるため、別のデバイスでカーネルを起動するタイトなループは、重要なカーネルの実行オーバーラップを生成する必要があります (デバイス コンテキストの切り替えにはレイテンシがあることに注意してください)。

通常、デフォルト ストリームでカーネルと組み合わせて使用​​する他のすべてのホスト API 呼び出しの非同期バージョンを使用する必要があります。これ、それらの多く (たとえば、cudaMemcpy ファミリ) がブロックされるためです。

于 2016-02-14T21:26:22.797 に答える