Zaokrąglanie liczby bloków w górę
(n + threads - 1) / threads zapewnia pełne pokrycie.
Zaokrąglanie liczby bloków w górę to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 3 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.
Ile bloków?
Po ustaleniu liczby wątków w bloku musisz zdecydować, ile bloków uruchomić, aby każdy element tablicy otrzymał własny wątek.
Zwykłe dzielenie gubi dane
Dzielenie całkowitoliczbowe zaokrągla wynik w dół. Przy 1000 elementach i 256 wątkach wyrażenie n / threads daje tylko 3 bloki, obejmujące 768 elementów i pomijające resztę.
Musisz zaokrąglić w górę
Gdy liczba nie dzieli się bez reszty, musisz dodać jeszcze jeden niepełny blok. Celem jest dzielenie z zaokrągleniem w górę, a nie dzielenie z zaokrągleniem w dół.
Sztuczka z zaokrąglaniem w górę
Przed dzieleniem dodaj threads minus jeden. To niewielkie przesunięcie podnosi każdą resztę do kolejnego pełnego bloku bez użycia liczb zmiennoprzecinkowych.
int blocks = (n + threads - 1) / threads;Dlaczego to działa
Jeśli n dzieli się bez reszty, dodatkowe threads minus jeden jest zbyt małe, aby zwiększyć iloraz. Jeśli istnieje reszta, przesuwa wynik do kolejnego bloku.
Przykład obliczeń
Dla 1000 elementów i 256 wątków: 1000 plus 255 to 1255, a 1255 podzielone przez 256 daje 4. Otrzymujesz 4 bloki i pełne pokrycie.
int blocks = (1000 + 256 - 1) / 256; // 4 blocksPrzypadek bez reszty
Dla 512 elementów i 256 wątków: 512 plus 255 to 767, podzielone przez 256 daje 2. Nie ma zmarnowanego dodatkowego bloku, gdy liczba dzieli się bez reszty.
Uruchamianie nieco zbyt wielu wątków
Ostatni blok zwykle jest tylko częściowo zapełniony, więc kilka wątków nie ma przypisanego elementu. To nic złego, ponieważ sprawdzanie zakresu sobie z nimi poradzi.
Umieszczanie tego w konfiguracji uruchomienia
Oblicz liczbę bloków, a następnie przekaż obie liczby w potrójnych nawiasach ostrych, aby rozłożyć pracę na całą siatkę.
int threads = 256;
int blocks = (n + threads - 1) / threads;
add<<<blocks, threads>>>(a, b, out, n);Połączenie z zabezpieczeniem
Zaokrąglanie w górę oraz sprawdzenie if (i < n) działają razem. Jedno gwarantuje objęcie wszystkich elementów, a drugie chroni dodatkowe wątki.
Mały pomocnik wielokrotnego użytku
W wielu projektach umieszcza się tę logikę w małej funkcji, dzięki czemu zaokrąglanie w górę znajduje się w jednym miejscu i nigdy nie zostaje błędnie wpisane. ✨
inline int ceilDiv(int n, int d) { return (n + d - 1) / d; }Szybkie sprawdzenie
Policz potrzebne bloki.
Podsumowanie
Nauczyłeś się określać rozmiar siatki za pomocą (n + threads - 1) / threads. Ta sztuczka z dzieleniem całkowitym zaokrąglanym w górę obejmuje każdy element, nawet gdy liczba elementów nie dzieli się bez reszty. 🎯
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 „Zaokrąglanie liczby bloków w górę” jest bezpłatna?
Tak — pełny tekst „Zaokrąglanie liczby bloków w górę” 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 „Zaokrąglanie liczby bloków w górę”?
(n + threads - 1) / threads zapewnia pełne pokrycie. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Zaokrąglanie liczby bloków w górę”?
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