Gepinnten Speicher mit cudaMallocHost verwenden
Seitengesperrte Puffer für schnelles DMA.
Gepinnten Speicher mit cudaMallocHost verwenden ist eine kostenlose CUDA Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Gepinnten Speicher kennenlernen
Gepinter Speicher ist Hauptspeicher, bei dem das Betriebssystem garantiert, dass er weder verschoben noch ausgelagert wird. Da seine physische Adresse feststeht, kann die GPU ihn direkt lesen.
Auch als Page-Locked bezeichnet
Sie werden den Begriff page-locked als Synonym für „gepinnt“ sehen. Beide bedeuten dasselbe: Seiten, die an ihrem Platz festgehalten werden, sodass keine Auslagerung stattfinden kann.
Richtig reservieren
Fordern Sie mit cudaMallocHost gepinnten Speicher von CUDA an. Die Funktion gibt einen gewöhnlichen Host-Zeiger zurück, den Sie wie jedes C++-Array lesen und beschreiben können.
float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));Wie gewohnt verwenden
Der zurückgegebene Zeiger verhält sich wie jeder Host-Puffer, sodass Ihr CPU-Code unverändert bleibt. Sie füllen ihn und lesen ihn einfach genau wie zuvor.
for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;Keine Zwischenspeicherung mehr
Da die Seiten nicht verschoben werden können, überspringt der Treiber seine versteckte Zwischenkopie. Die GPU liest direkt aus Ihrem Puffer, sodass die doppelte Kopie entfällt.
Schnellere Übertragungen
Der Vorteil ist eine echte hohe Bandbreite. Übertragungen aus gepinntem Speicher erreichen oft nahezu die Spitzengeschwindigkeit der Verbindung und sind manchmal ungefähr doppelt so schnell wie mit auslagerbarem Speicher.
Richtig freigeben
Gepinter Speicher benötigt eine passende eigene Freigabefunktion. Verwenden Sie cudaFreeHost, niemals das gewöhnliche free, sonst riskieren Sie einen Absturz und ein Speicherleck.
cudaFreeHost(h_data);Kein kostenloser Speicherplatz
Gepinnte Seiten können nicht ausgelagert werden und belegen daher echten RAM. Wenn Sie zu viel Speicher pinnen, entziehen Sie dem restlichen System nutzbaren Speicher.
Die Reservierung ist langsamer
Das Sperren von Seiten verursacht Aufwand, daher ist cudaMallocHost beim Reservieren langsamer als malloc. Verwenden Sie einen gepinnten Puffer für viele Übertragungen wieder, statt ihn jedes Mal neu zu reservieren.
Die eigentliche Superkraft
Neben der Geschwindigkeit ist gepinter Speicher der Schlüssel zu wirklich asynchronen Kopien. Ohne ihn kann cudaMemcpyAsync sich mit nichts überlappen.
Wann Sie ihn einsetzen sollten
Pinnen Sie Puffer, die Sie häufig übertragen oder die Streams versorgen. Für eine einmalige Kopie eines kleinen Arrays ist gewöhnliches malloc völlig ausreichend. 🙂
Kurzer Check
Sie haben einen Puffer mit cudaMallocHost reserviert. Wie sollten Sie ihn freigeben?
Zusammenfassung
cudaMallocHost pinnt Host-Seiten, sodass die GPU sie direkt lesen kann. Dadurch werden Kopien schneller und asynchrone Überlappung wird möglich. Geben Sie den Speicher immer mit cudaFreeHost frei. 🔒
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 „Gepinnten Speicher mit cudaMallocHost verwenden“ kostenlos?
Ja — der vollständige Text von „Gepinnten Speicher mit cudaMallocHost verwenden“ 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 „Gepinnten Speicher mit cudaMallocHost verwenden“?
Seitengesperrte Puffer für schnelles DMA. 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 2 von 4.
Wie lange dauert die Lektion „Gepinnten Speicher mit cudaMallocHost verwenden“?
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