CUDA-Kernel-Synchronisierung

Hallo ich habe eine Frage zur Programmierung in CUDA.
Ich habe den folgenden code:

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, ....);
    }

}

So, wenn die Kopien gemacht und wie kann ich sicherstellen, dass kernel_1, kernel_2 kernel_3 und Ihre Aufgaben beendet?

  • es sei denn, Sie verwenden, streams und einige andere Konstrukte, die alle Ihre cuda-Anrufe (Kernel, cudamemCpy, etc.) ausgestellt werden in der Standard-stream und Sie werden blockiert (wird erst beginnen, wenn vorhergehende cuda Aufrufe). Solange du nicht switch-streams, cudaMemcpy wird nicht wieder die Kontrolle an den CPU thread, bis es abgeschlossen ist. Ebenso die cudaMemcpy wird nicht beginnen, bis alle vorherigen cuda-Aufrufe abgeschlossen sind.
InformationsquelleAutor user1704397 | 2012-09-27
Schreibe einen Kommentar