6

こんにちは、CUDA でのプログラミングについて疑問があります。次のコードがあります。

int main () {

    for (;;) {
        kernel_1 (x1, x2, ....);
        kernel_2 (x1, x2 ...);
        kernel_3_Reduction (x1);

    // code manipulation host_x1
    // Copy the pointer device to host
        cpy (host_x1, x1, DeviceToHost)
        cpu_code_x1_manipulation;
        kernel_ (x1, x2, ....);
    }

}

では、コピーがいつ作成され、kernel_1、kernel_2、kernel_3 がタスクを完了したことを確認するにはどうすればよいでしょうか?

4

2 に答える 2

11

同じストリームで開始されたすべての操作が同期されます。上記のコードでは、すべてのカーネルが次々と実行されます。kernel_1 と kernel_2 を並行して実行する必要がある場合は、ストリームを明示的に指定する必要があります。

于 2012-09-27T20:01:23.117 に答える
4

cudaDeviceSynchronize();すべてのカーネルが完了していることを確認したい場所でのみ使用してください。このコマンドの後、すべてのカーネルとすべての保留中のデバイス関数呼び出しが完了したと見なすことができます。

于 2012-09-27T20:27:27.487 に答える