0Pricing
CUDA Academy · Lekcja

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

  1. Warunki wyścigu na GPU
  2. atomicAdd i funkcje pokrewne
  3. Budowanie histogramu
  4. Własne operacje atomowe z atomicCAS
← Powrót do CUDA Academy