Warum pageable Speicher langsam ist
Puffern Sie Daten hinter gewöhnlichem malloc.
Warum pageable Speicher langsam ist ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.
Wo Ihre Daten liegen
Normale C++-Puffer von malloc liegen im auslagerbaren Host-Speicher. Das wirkt kostenlos, aber die GPU kann daraus nicht direkt kopieren, und dieses kleine Detail kostet Geschwindigkeit.
Was auslagerbar bedeutet
Speicher ist auslagerbar, wenn das Betriebssystem seine Seiten jederzeit verschieben oder auf die Festplatte auslagern kann. Das ist flexibel, aber problematisch für Hardware, die feste Adressen benötigt.
Die GPU spricht DMA
Die GPU liest Daten über DMA, eine direkte Hardwareübertragung, die eine physische Adresse benötigt, die sich nicht ändert. Auslagerbare Seiten können das nicht garantieren und daher nicht direkt verwendet werden.
Der versteckte Zwischenspeicherschritt
Um dieses Problem zu umgehen, kopiert der Treiber Ihren auslagerbaren Puffer zunächst in einen verborgenen Staging-Puffer und sendet diesen dann an die GPU. Sie bezahlen für eine zusätzliche Kopie, die Sie nie geschrieben haben. 😮
Zwei Kopien statt einer
Eine einzelne cudaMemcpy aus auslagerbarem Speicher besteht also tatsächlich aus zwei Kopien: vom Host zum Staging-Puffer und anschließend vom Staging-Puffer zum Gerät. Genau diese doppelte Arbeit macht Übertragungen aus auslagerbarem Speicher so langsam.
Ein gewöhnliches malloc
Hier ist der Puffer, zu dem zunächst jeder greift. Er funktioniert, aber jede Übertragung von h_data führt unbemerkt über diesen Umweg durch den Staging-Puffer.
float* h_data = (float*)malloc(N * sizeof(float));
cudaMemcpy(d_data, h_data, bytes, cudaMemcpyHostToDevice);Warum das Betriebssystem darauf achtet
Das Betriebssystem hält Speicher auslagerbar, damit es den Arbeitsspeicher überbuchen und viele Programme gleichzeitig bedienen kann. Diese Bequemlichkeit verhindert, dass die GPU Ihre Seiten direkt liest.
Verlorene Bandbreite
Übertragungen aus auslagerbarem Speicher erreichen oft nur die Hälfte der maximalen Bandbreite Ihrer Verbindung. Die Staging-Kopie verbraucht CPU-Zyklen und Speicherverkehr, die echte Übertragungen nutzen könnten.
Auch die Überlappung wird verhindert
Da die Staging-Kopie synchron erfolgt, können Übertragungen aus auslagerbarem Speicher nicht wirklich mit Kernels überlappen. Sie verlieren die asynchronen Möglichkeiten, die Streams lohnenswert machen.
Wann es weiterhin problematisch ist
Bei einer einzigen kleinen Kopie bemerkt es niemand. In einer Schleife, die bei jeder Iteration Daten überträgt, summiert sich die Staging-Last jedoch auf und dominiert unbemerkt Ihre Laufzeit.
Die Lösung kommt
Die Lösung besteht darin, CUDA um einen nicht auslagerbaren Puffer zu bitten, den sogenannten gepinten Speicher. Die GPU liest ihn direkt, ohne Zwischenspeicherung und ohne doppelte Kopie.
Kurzer Check
Warum ist eine Übertragung aus gewöhnlichem auslagerbarem Speicher langsamer als nötig?
Zusammenfassung
Auslagerbare Puffer können verschoben werden, daher kann die GPU sie nicht direkt per DMA lesen. Der Treiber kopiert sie zunächst in einen Zwischenpuffer, wodurch sich die Kopiermenge verdoppelt. Die kommende Lösung ist gepinter Speicher. 🚀
Häufig gestellte Fragen
Ist die Lektion „Warum pageable Speicher langsam ist“ kostenlos?
Ja — der vollständige Text von „Warum pageable Speicher langsam ist“ 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 „Warum pageable Speicher langsam ist“?
Puffern Sie Daten hinter gewöhnlichem malloc. 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 1 von 4.
Wie lange dauert die Lektion „Warum pageable Speicher langsam ist“?
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