atomicAdd i funkcje pokrewne
Sprzętowe operacje odczyt–modyfikacja–zapis.
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. ✅
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
- Warunki wyścigu na GPU
- atomicAdd i funkcje pokrewne
- Budowanie histogramu
- Własne operacje atomowe z atomicCAS