Klasyczny wzór indeksu
blockIdx.x * blockDim.x + threadIdx.x.
Klasyczny wzór indeksu to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 1 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 wątek, jeden element
Cały sens kernela CUDA polega na tym, że każdy wątek obsługuje jeden fragment danych. Aby to osiągnąć, każdy wątek potrzebuje unikalnego indeksu globalnego.
Dlaczego identyfikatory lokalne nie wystarczą
Wewnątrz bloku threadIdx.x przyjmuje tylko wartości od 0 do blockDim minus jeden. Wiele bloków używa ponownie tych samych małych liczb, więc nie mogą one być indeksem końcowym.
Bloki leżą obok siebie
Wyobraź sobie siatkę jako bloki ułożone jeden za drugim. Każdy blok odpowiada za spójny fragment tablicy, a blockIdx.x wskazuje, w którym fragmencie się znajdujesz.
Jak szeroki jest blok?
blockDim.x to liczba wątków w bloku. Określa szerokość każdego fragmentu, więc skaluje przesunięcie bloku do właściwej pozycji.
Klasyczny wzór
Połącz te trzy elementy: pomiń wcześniejsze bloki, a następnie dodaj swoją pozycję w bieżącym bloku. Ta jedna linia nadaje każdemu wątkowi unikalny indeks.
int i = blockIdx.x * blockDim.x + threadIdx.x;Prześledźmy to
Przy 4 wątkach na blok blok 0 obejmuje zakres od 0 do 3, blok 1 — od 4 do 7, a blok 2 — od 8 do 11. Przesunięcia nigdy się nie nakładają.
Konkretny przykład
Wątek 2 w bloku 3 przy blockDim równym 256 trafia na pozycję 3 razy 256 plus 2, czyli 770. To jego globalna pozycja w danych.
// blockIdx.x=3, blockDim.x=256, threadIdx.x=2
int i = 3 * 256 + 2; // i == 770Używanie indeksu
Gdy masz już i, traktujesz je jako indeks tablicy. Każdy wątek odczytuje i zapisuje wyłącznie własny element, bez nakładania się operacji.
out[i] = a[i] + b[i];Odwzorowanie jeden do jednego
Uruchom n wątków, a wzór wygeneruje każdą wartość od 0 do n minus 1 dokładnie raz. To idealne odwzorowanie jeden do jednego całej tablicy.
Kolejność ma znaczenie
Zawsze najpierw wykonuj mnożenie, a dopiero potem dodawanie. blockIdx.x * blockDim.x to początek Twojego fragmentu, a threadIdx.x określa pozycję w jego obrębie.
Poza jednym wymiarem
Ta sama idea rozszerza się na 2D i 3D z użyciem składowych .y i .z, ale w przypadku płaskich tablic wystarczy Ci wzór z .x. 🚀
Szybkie sprawdzenie
Oblicz globalny indeks jednego wątku.
Podsumowanie
Poznałeś wzór używany przez każdy kernel: blockIdx.x * blockDim.x + threadIdx.x. Przydziela on każdemu wątkowi jedno unikalne miejsce w tablicy. 🎉
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 „Klasyczny wzór indeksu” jest bezpłatna?
Tak — pełny tekst „Klasyczny wzór indeksu” 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 „Klasyczny wzór indeksu”?
blockIdx.x * blockDim.x + threadIdx.x. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Klasyczny wzór indeksu”?
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
- Klasyczny wzór indeksu
- Ochrona przed wyjściem poza zakres
- Zaokrąglanie liczby bloków w górę
- Pętle z krokiem siatki