CUDA Academy · Lektion

Gepinnten Speicher mit cudaMallocHost verwenden

Seitengesperrte Puffer für schnelles DMA.

Lektion 2 von 413 Schritte

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. 🔒

Kostenlos starten

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

  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