0Pricing
CUDA Academy · Lektion

cudaMemcpyAsync in einem Stream

Nicht blockierende Transfers, die sich überlappen.

cudaMemcpyAsync in einem Stream ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des CUDA Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Standardmäßig blockierend

Das gewöhnliche cudaMemcpy hält Ihre CPU an, bis die Kopie abgeschlossen ist. Ihr Host-Thread wartet einfach und erledigt nichts Sinnvolles, während die Bytes übertragen werden.

Der asynchrone Verwandte

Lernen Sie cudaMemcpyAsync kennen. Die Funktion reiht die Kopie ein und kehrt sofort zu Ihrer CPU zurück, sodass der Host weiterarbeiten kann, während die Übertragung stattfindet.

Ein Stream ist erforderlich

Die asynchrone Kopie benötigt ein zusätzliches Argument: einen Stream. Der Stream ist die geordnete Warteschlange, in der die Übertragung wartet, bis sie an der Reihe ist.

cudaMemcpyAsync(d_data, h_data, bytes, cudaMemcpyHostToDevice, stream);

Gepinnt oder blockierend

Der entscheidende Punkt ist: Asynchrone Kopien laufen nur mit gepinntem Host-Speicher wirklich nicht blockierend. Übergeben Sie einen auslagerbaren Puffer, fällt CUDA stillschweigend auf eine blockierende Kopie zurück.

Kehrt zurück, ist aber nicht fertig

Wenn der Aufruf zurückkehrt, wurde die Kopie erst eingeplant, aber noch nicht abgeschlossen. Die Daten können noch übertragen werden, lesen Sie sie daher noch nicht.

Reihenfolge innerhalb eines Streams

Arbeiten in einem Stream werden in der richtigen Reihenfolge ausgeführt, ein Element nach dem anderen. Daher wird eine Kopie, die in demselben Stream vor einem Kernel gestartet wurde, garantiert zuerst fertig.

Warten, wenn es nötig ist

Bevor Sie die Ergebnisse auf der CPU verwenden, stellen Sie sicher, dass die Warteschlange abgearbeitet wurde. Rufen Sie cudaStreamSynchronize auf, um zu blockieren, bis die Arbeit dieses Streams abgeschlossen ist.

cudaStreamSynchronize(stream);

Der eigentliche Zweck: Überlappung

Asynchrone Kopien ermöglichen, dass eine Übertragung in einem Stream läuft, während ein Kernel in einem anderen Stream Berechnungen ausführt. Durch diese Nebenläufigkeit können Sie die Übertragungszeit verbergen.

Vorsicht beim Standard-Stream

Wenn Sie Stream 0, den alten Standard-Stream, übergeben, kann er alles andere serialisieren. Verwenden Sie eigene erstellte Streams, um tatsächlich Überlappung zu erreichen.

Den Puffer am Leben halten

Da die Kopie erst später abgeschlossen wird, muss der Host-Puffer bis dahin gültig bleiben. Geben Sie ihn zu früh frei, liest die laufende Übertragung fehlerhafte Daten.

Ein typisches Muster

Der klassische Ablauf besteht aus einer asynchronen Hin-Kopie, dem Start des Kernels und anschließend einer asynchronen Rück-Kopie, alles in einem Stream. Synchronisieren Sie erst ganz am Ende.

cudaMemcpyAsync(d_in, h_in, bytes, cudaMemcpyHostToDevice, stream);
kernel<<<grid, block, 0, stream>>>(d_in, d_out);

Kurzer Check

Was muss cudaMemcpyAsync erfüllen, damit der Aufruf wirklich nicht blockierend ist?

Zusammenfassung

cudaMemcpyAsync reiht eine Kopie in einem Stream ein und kehrt sofort zurück, benötigt für Überlappung aber gepinten Speicher. Synchronisieren Sie den Stream, bevor Sie die Ergebnisse lesen. ⚡

Häufig gestellte Fragen

Ist die Lektion „cudaMemcpyAsync in einem Stream“ kostenlos?

Ja — der vollständige Text von „cudaMemcpyAsync in einem Stream“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des CUDA Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der CUDA Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „cudaMemcpyAsync in einem Stream“?

Nicht blockierende Transfers, die sich überlappen. Du übst CUDA Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um CUDA Academy zu starten?

Keine Vorkenntnisse erforderlich. CUDA Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „cudaMemcpyAsync in einem Stream“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser CUDA Academy-Lektion Code schreiben und ausführen?

Ja. Jede CUDA Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Warum pageable Speicher langsam ist
  2. Gepinnten Speicher mit cudaMallocHost verwenden
  3. cudaMemcpyAsync in einem Stream
  4. Die Pipeline mit Double-Buffering
← Zurück zu CUDA Academy