CUDA Academy · Lekcja

atomicAdd i funkcje pokrewne

Sprzętowe operacje odczyt–modyfikacja–zapis.

Lekcja 2 z 413 kroki

atomicAdd i funkcje pokrewne to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 2 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.

Jeden niepodzielny krok

Operacja atomowa odczytuje, modyfikuje i zapisuje wartość jako jeden krok, którego nie może przerwać żaden inny wątek. To eliminuje wyścig. ⚛️

Poznaj atomicAdd

atomicAdd przyjmuje wskaźnik i wartość, bezpiecznie dodaje tę wartość oraz zwraca poprzednią wartość. Wiele wątków może odwoływać się do tego samego adresu bez utraconych aktualizacji.

atomicAdd(total, 1);

Naprawianie licznika z wyścigiem

Zastąp zwykłe zwiększenie wywołaniem atomicAdd, a licznik za każdym razem będzie poprawny, niezależnie od liczby wykonywanych wątków.

__global__ void count(int* total) {
    atomicAdd(total, 1);
}

Wartość zwracana jest przydatna

atomicAdd zwraca wartość przechowywaną przed dodaniem. Ta poprzednia wartość jest unikatowym miejscem, którego można użyć jako indeksu lub numeru biletu.

int slot = atomicAdd(counter, 1);

Cała rodzina

atomicAdd ma wielu przyjaciół: atomicSub, atomicMax, atomicMin, atomicExch, atomicAnd, atomicOr i atomicXor działają w ten sam atomowy sposób.

Zamiana wartości

atomicExch zapisuje nową wartość i w jednym kroku zwraca starą. Przydaje się do bezpiecznego przejmowania flag lub pobierania poprzedniego stanu.

int prev = atomicExch(flag, 1);

Atomowe maksimum i minimum

atomicMax aktualizuje cel tylko wtedy, gdy Twoja wartość jest większa. Doskonale nadaje się do znajdowania globalnego maksimum wśród wszystkich wątków bez wyścigów.

atomicMax(best, myValue);

Obsługiwane typy

Operacje atomowe obsługują typy int i unsigned, a na nowszym sprzęcie także float i double. Zawsze sprawdzaj, czy wybrany typ i architektura obsługują potrzebne wywołanie.

Operacje atomowe mają swoją cenę

Operacje atomowe wykonują szeregowo wątki kierujące operacje pod ten sam adres. Duża rywalizacja o jedno miejsce staje się wąskim gardłem, dlatego należy używać ich tylko tam, gdzie są potrzebne.

Rozłóż obciążenie

Zmniejsz rywalizację, każąc wątkom aktualizować różne adresy, a następnie połącz wyniki. Mniej kolizji oznacza szybsze operacje atomowe.

Operacje atomowe a redukcje

Przy sumowaniu ogromnych tablic redukcja drzewiasta często przewyższa lawinę operacji atomowych. Sięgaj po operacje atomowe, gdy aktualizacje są rzadkie lub nieregularne.

Szybkie sprawdzenie

Sprawdź, jak dobrze rozumiesz działanie atomicAdd.

Podsumowanie: atomicAdd i przyjaciele

Poznałeś rodzinę operacji atomowych, naprawiłeś licznik z wyścigiem i dowiedziałeś się, że operacje atomowe zwracają starą wartość, ale przy rywalizacji kosztują czas. ✅

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „atomicAdd i funkcje pokrewne” jest bezpłatna?

Tak — pełny tekst „atomicAdd i funkcje pokrewne” 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 „atomicAdd i funkcje pokrewne”?

Sprzętowe operacje odczyt–modyfikacja–zapis. Ć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 2 z 4.

Ile czasu zajmuje lekcja „atomicAdd i funkcje pokrewne”?

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