0Pricing
CUDA Academy · Lektion

Arbeit auf mehrere GPUs verteilen

Strategien zur Gebietszerlegung

Arbeit auf mehrere GPUs verteilen 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.

Viele GPUs, eine Aufgabe

Zwei GPUs können eine Aufgabe ungefähr in der halben Zeit erledigen – aber nur, wenn Sie die Arbeit aufteilen. Die Kunst ist die Partitionierung: Sie entscheiden, welche GPU welchen Teil übernimmt.

Gebietszerlegung

Die klassische Strategie besteht darin, die Daten und nicht den Code aufzuteilen. Bei der Gebietszerlegung erhält jede GPU ihren eigenen Abschnitt des Arrays oder Gitters zur Verarbeitung.

Ein Array aufteilen

Bei einem 1D-Array teilen Sie einfach seine Länge auf. Geben Sie GPU 0 den ersten Block von Elementen, GPU 1 den nächsten Block und so weiter.

int chunk = n / count;

Jeden Offset berechnen

Jede GPU benötigt den Anfang ihres Abschnitts. Der Offset für Gerät d ist einfach d multipliziert mit der Blockgröße und markiert, wo seine Daten beginnen.

int offset = d * chunk;

Pro Gerät reservieren

Jede GPU benötigt ihren eigenen Puffer. Legen Sie das Gerät fest und reservieren Sie dann mit cudaMalloc nur für den Abschnitt dieser Karte Speicher statt für das gesamte Array.

cudaSetDevice(d);
cudaMalloc(&dptr[d], chunk * sizeof(float));

Nur den Abschnitt kopieren

Laden Sie auf jede GPU nur den Teil hoch, für den sie zuständig ist. Kopieren Sie von host[offset] in den Puffer dieses Geräts, damit keine Karte Daten hält, auf die sie nicht zugreifen wird.

Auf jedem Gerät starten

Durchlaufen Sie die GPUs, setzen Sie jeweils das aktuelle Gerät und starten Sie den Kernel auf dessen Abschnitt. Die Starts erfolgen asynchron, sodass alle Karten parallel mit der Arbeit beginnen.

Ergebnisse zurücksammeln

Wenn die Kernel fertig sind, kopieren Sie die Ausgabe jedes Geräts mithilfe seines Offsets an die richtige Stelle im Host-Array zurück. So setzen sich die Teile wieder zu einem Ergebnis zusammen.

Den Rest beachten

Wenn n nicht ohne Rest teilbar ist, muss die letzte GPU den Rest verarbeiten. Geben Sie ihr die zusätzlichen Elemente, damit kein Element des Arrays übersprungen wird.

int last = n - offset;

Auf die Grenzen achten

Stencil- und Nachbaroperationen lesen über die Grenzen der Abschnitte hinweg. Diese Halo-Bereiche müssen zwischen den GPUs geteilt werden, sonst sind die Ergebnisse an den Rändern falsch.

Die Last ausbalancieren

Wenn eine GPU schneller ist, verschwendet eine gleichmäßige Aufteilung ihre Leistung. Eine gute Lastverteilung gibt der stärkeren Karte einen größeren Abschnitt, sodass beide gleichzeitig fertig werden.

Schnelltest

Rufen Sie sich die übliche Methode in Erinnerung, um einen großen Datensatz auf mehrere GPUs zu verteilen.

Zusammenfassung

Sie teilen die Daten in Abschnitte auf, reservieren Speicher und kopieren pro Gerät, starten den Kernel auf jedem Gerät und sammeln anschließend die Ergebnisse. Achten Sie auf den Rest und die Halo-Bereiche. Als Nächstes: direkt von GPU zu GPU kopieren. ✨

Häufig gestellte Fragen

Ist die Lektion „Arbeit auf mehrere GPUs verteilen“ kostenlos?

Ja — der vollständige Text von „Arbeit auf mehrere GPUs verteilen“ 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 „Arbeit auf mehrere GPUs verteilen“?

Strategien zur Gebietszerlegung 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 „Arbeit auf mehrere GPUs verteilen“?

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. Geräte aufzählen und auswählen
  2. Arbeit auf mehrere GPUs verteilen
  3. Peer-to-Peer-Speicherzugriff
  4. Multi-GPU mit NCCL
← Zurück zu CUDA Academy