Die Pipeline mit Double-Buffering
Teilen Sie Daten in Blöcke auf, damit die GPU ausgelastet bleibt.
Die Pipeline mit Double-Buffering ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.
Das Problem der untätigen GPU
Kopieren Sie ein riesiges Array, führen Sie anschließend einen Kernel aus und kopieren Sie die Daten dann zurück. Während jeder Kopie ist die GPU untätig, und während der Berechnung sind die Übertragungs-Engines untätig.
Die Arbeit aufteilen
Die Lösung beginnt damit, ein riesiges Array in kleinere Blöcke aufzuteilen. Jeder Block kann unabhängig kopiert und verarbeitet werden, wodurch Überlappung möglich wird.
Zwei Puffer, zwei Bahnen
Double Buffering verwendet zwei Geräte-Puffer und zwei Streams. Während Stream A einen Block berechnet, kopiert Stream B den nächsten hinein.
Kopieren und Berechnen überlappen
Der entscheidende Vorteil ist Nebenläufigkeit: Eine Übertragung und ein Kernel laufen gleichzeitig mit unterschiedlichen Blöcken. Die Übertragungszeit wird durch nützliche Berechnungen verborgen.
Gepinnter Speicher erforderlich
Das funktioniert nur, wenn die Host-Daten in gepinntem Speicher liegen. Auslagerbare Puffer erzwingen blockierende Kopien, und die gesamte Pipeline fällt auf eine serielle Ausführung zurück.
Die Pipeline-Schleife
Sie durchlaufen die Blöcke und starten in jedem Schritt eine asynchrone Hin-Kopie, einen Kernel und eine asynchrone Rück-Kopie, alles im selben Stream.
cudaMemcpyAsync(d_in, h_in + off, csz, H2D, s);
proc<<<g, b, 0, s>>>(d_in, d_out);
cudaMemcpyAsync(h_out + off, d_out, csz, D2H, s);Die Streams abwechseln
Weisen Sie jedem Block einen Stream zu, indem Sie die Streams abwechselnd verwenden. Gerade Blöcke gehen in Stream 0, ungerade in Stream 1, sodass benachbarte Blöcke sauber überlappen.
cudaStream_t s = streams[i % 2];Warum zwei ausreichen
Zwei Streams überlappen Kopieren und Berechnen bereits. Weitere Puffer erhöhen die Pipeline-Tiefe, bringen aber abnehmenden Nutzen und zusätzlichen Speicherbedarf. Beginnen Sie daher mit zwei.
Am Ende alles abarbeiten
Warten Sie nach dem Einreihen aller Blöcke, bis sämtliche Arbeiten abgeschlossen sind, bevor Sie die Ergebnisse lesen. Ein einfaches cudaDeviceSynchronize arbeitet alle Streams gleichzeitig ab.
cudaDeviceSynchronize();Die Beschleunigung
Wenn die Kopie hinter der Berechnung verborgen wird, sinkt die Gesamtdauer auf nahezu die Kosten des längeren der beiden Vorgänge statt auf deren Summe. Das ist der eigentliche Gewinn. 🚀
Wann es am meisten bringt
Double Buffering glänzt, wenn Übertragungs- und Berechnungszeit ungefähr ausgeglichen sind. Wenn eine Seite deutlich dominiert, konzentrieren Sie sich zuerst darauf, diese zu verkürzen.
Kurzer Check
Was ist der wesentliche Vorteil einer Double-Buffering-Pipeline?
Zusammenfassung
Teilen Sie die Daten in Blöcke auf, verwenden Sie zwei gepinnte Puffer und Streams und überlappen Sie Kopieren und Berechnen. Synchronisieren Sie am Ende und beobachten Sie, wie die Übertragungszeit verschwindet. 🎉
Lerne C++ mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „Die Pipeline mit Double-Buffering“ kostenlos?
Ja — der vollständige Text von „Die Pipeline mit Double-Buffering“ 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 „Die Pipeline mit Double-Buffering“?
Teilen Sie Daten in Blöcke auf, damit die GPU ausgelastet bleibt. 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 4 von 4.
Wie lange dauert die Lektion „Die Pipeline mit Double-Buffering“?
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
- Warum pageable Speicher langsam ist
- Gepinnten Speicher mit cudaMallocHost verwenden
- cudaMemcpyAsync in einem Stream
- Die Pipeline mit Double-Buffering