Własne operacje atomowe z atomicCAS
Stosować porównanie i zamianę do dowolnej aktualizacji.
Własne operacje atomowe z atomicCAS to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej CUDA Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CUDA Academy zawiera 4 lekcji w sumie.
Gdy zabraknie funkcji wbudowanych
Wbudowane operacje atomowe obejmują dodawanie, maksimum, zamianę i inne operacje. Co jednak zrobić, gdy potrzebujesz atomowej aktualizacji, której nie zapewniają? Poznaj atomicCAS. 🔁
Compare-And-Swap
atomicCAS oznacza compare-and-swap. Zapisuje nową wartość tylko wtedy, gdy bieżąca wartość odpowiada oczekiwanej — wszystko w jednym atomowym kroku.
atomicCAS(addr, expected, desired);Co zwraca
atomicCAS zwraca wartość, która była faktycznie przechowywana. Jeśli odpowiada ona wartości expected, zamiana się powiodła; w przeciwnym razie ktoś inny zmienił ją wcześniej.
Pętla ponawiania
Podstawowy wzorzec to pętla: odczytaj bieżącą wartość, oblicz nową, spróbuj zamiany i powtarzaj, aż atomicCAS potwierdzi powodzenie.
Pętla CAS w kodzie
Ta pętla ponawia próbę, dopóki żadny inny wątek nie wstawi się między odczyt a zapis. Na tym polega własna operacja atomowa.
do {
old = *addr;
newv = f(old);
} while (atomicCAS(addr, old, newv) != old);Zbuduj dowolną operację
Wstaw dowolną funkcję w miejsce f, a otrzymasz jej atomową wersję. CAS pozwala tworzyć operacje aktualizacji, których sprzęt nigdy nie udostępnił bezpośrednio.
Atomowe operacje na liczbach zmiennoprzecinkowych na starszym sprzęcie
Zanim pojawiły się natywne atomowe operacje na liczbach zmiennoprzecinkowych, emulowano atomicAdd dla takich liczb za pomocą atomicCAS na wzorcu bitowym, wykorzystując sztuczki z __int_as_float.
Dlaczego pętla może wykonywać kolejne próby
Przy dużej rywalizacji zamiana często się nie udaje i jest ponawiana. Każda porażka oznacza, że wygrał inny wątek, dlatego gorące adresy sprawiają, że pętle CAS wykonują więcej iteracji.
Postęp jest gwarantowany
Nawet przy ponawianiu prób algorytm jest lock-free: za każdym razem, gdy zamiana się nie powiedzie, inny wątek na pewno wykonał postęp. System nigdy się nie zatrzymuje.
Dopasuj szerokość
atomicCAS działa dla określonych szerokości, takich jak 32 i 64 bity. Rzutuj dane na pasujący typ całkowity, aby porównanie odbywało się na surowych bitach.
Najpierw wybieraj funkcje wbudowane
Sięgaj po wbudowaną operację atomową, gdy jest dostępna — jest szybsza i prostsza. Używaj atomicCAS tylko do własnych operacji aktualizacji, których nie obsługuje nic innego.
Szybkie sprawdzenie
Sprawdź, czy rozumiesz zasadę compare-and-swap.
Podsumowanie: własne operacje atomowe
Dowiedziałeś się, że połączenie atomicCAS z pętlą ponawiającą próbę pozwala zbudować dowolną atomową operację aktualizacji i zachowuje właściwość lock-free, ale przy rywalizacji może wykonywać wiele iteracji. ✅
Często zadawane pytania
Czy lekcja „Własne operacje atomowe z atomicCAS” jest bezpłatna?
Tak — pełny tekst „Własne operacje atomowe z atomicCAS” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu CUDA Academy, przejdź na CoddyKit PRO. Kurs CUDA Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Własne operacje atomowe z atomicCAS”?
Stosować porównanie i zamianę do dowolnej aktualizacji. Ćwiczysz CUDA Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć CUDA Academy?
Nie wymagamy żadnego doświadczenia. CUDA Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Własne operacje atomowe z atomicCAS”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji CUDA Academy?
Tak. Każda lekcja CUDA Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Warunki wyścigu na GPU
- atomicAdd i funkcje pokrewne
- Budowanie histogramu
- Własne operacje atomowe z atomicCAS