Benutzerdefinierte Atomics mit atomicCAS
Compare-and-Swap für beliebige Aktualisierungen.
Benutzerdefinierte Atomics mit atomicCAS 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.
Wenn integrierte Funktionen nicht ausreichen
Die integrierten Atomics decken Addition, Maximum, Austausch und mehr ab. Aber was tun Sie, wenn Sie eine atomare Aktualisierung benötigen, die nicht angeboten wird? Lernen Sie atomicCAS kennen. 🔁
Compare-and-Swap
atomicCAS steht für Compare-and-Swap. Ein neuer Wert wird nur dann geschrieben, wenn der aktuelle Wert dem erwarteten Wert entspricht – und zwar in einem einzigen atomaren Schritt.
atomicCAS(addr, expected, desired);Was zurückgegeben wird
atomicCAS gibt den Wert zurück, der tatsächlich gespeichert war. Entspricht er Ihrem expected-Wert, war der Austausch erfolgreich; andernfalls hat ihn jemand anderes zuvor geändert.
Die Wiederholungsschleife
Das grundlegende Muster ist eine Schleife: aktuellen Wert lesen, neuen Wert berechnen, den Austausch versuchen und wiederholen, bis atomicCAS den Erfolg bestätigt.
Eine CAS-Schleife im Code
Diese Schleife versucht es so lange erneut, bis kein anderer Thread mehr zwischen Ihrem Lesen und Schreiben dazwischenkommt. Das ist der Kern eines benutzerdefinierten Atomics.
do {
old = *addr;
newv = f(old);
} while (atomicCAS(addr, old, newv) != old);Jede Operation erstellen
Setzen Sie anstelle von f eine beliebige Funktion ein, und Sie erhalten eine atomare Version davon. Mit CAS können Sie Aktualisierungen erstellen, die die Hardware nie direkt bereitgestellt hat.
Atomare Gleitkommazahlen auf alter Hardware
Vor nativen atomaren Gleitkommaoperationen emulierte man atomicAdd für Gleitkommazahlen mit atomicCAS auf dem Bitmuster mithilfe von __int_as_float-Tricks.
Warum die Schleife rotieren kann
Bei hoher Konkurrenz schlägt der Austausch häufig fehl und wird erneut versucht. Jeder Fehlschlag bedeutet, dass ein anderer Thread gewonnen hat. Daher lassen heiße Adressen CAS-Schleifen länger rotieren.
Fortschritt ist garantiert
Trotz der Wiederholungsversuche ist der Algorithmus lock-free: Wenn ein Austausch fehlschlägt, hat definitiv ein anderer Thread Fortschritte gemacht. Das System kommt nie zum Stillstand.
Die Breite muss übereinstimmen
atomicCAS arbeitet mit bestimmten Breiten wie 32 und 64 Bit. Konvertieren Sie Ihre Daten in den passenden Ganzzahltyp, damit der Vergleich auf den unveränderten Bits arbeitet.
Zuerst integrierte Funktionen verwenden
Verwenden Sie eine integrierte atomare Funktion, wenn es eine gibt; sie ist schneller und einfacher. Verwenden Sie atomicCAS nur für benutzerdefinierte Aktualisierungen, die von nichts anderem abgedeckt werden.
Kurzer Test
Überprüfen Sie Ihr Verständnis von Compare-and-Swap.
Zusammenfassung: Benutzerdefinierte Atomics
Sie haben gelernt, dass atomicCAS zusammen mit einer Wiederholungsschleife jede atomare Aktualisierung ermöglicht, lock-free bleibt, unter Konkurrenz jedoch rotieren kann. ✅
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 „Benutzerdefinierte Atomics mit atomicCAS“ kostenlos?
Ja — der vollständige Text von „Benutzerdefinierte Atomics mit atomicCAS“ 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 „Benutzerdefinierte Atomics mit atomicCAS“?
Compare-and-Swap für beliebige Aktualisierungen. 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 „Benutzerdefinierte Atomics mit atomicCAS“?
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
- Race Conditions auf der GPU
- atomicAdd und weitere Funktionen
- Ein Histogramm erstellen
- Benutzerdefinierte Atomics mit atomicCAS