CUDA Academy · Lekcja

Obsługa kafelków brzegowych

Obsługiwać zakresy i dopełnianie na brzegach tablicy.

Lekcja 4 z 413 kroki

Obsługa kafelków brzegowych 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.

Problem granic

Rzeczywiste tablice rzadko dzielą się równo na kafelki. Ostatni kafelek przy każdej krawędzi może wykraczać poza koniec danych.

Odczyty poza zakresem

Wątek, którego indeks globalny przekracza rozmiar tablicy, odczyta śmieci lub spowoduje awarię. Kafelki brzegowe muszą zabezpieczać każdy dostęp.

Sprawdzanie zakresu

Najprostsze rozwiązanie to zabezpieczenie if (gid < n), dzięki któremu wątki znajdujące się za końcem pomijają ładowanie i nie wykonują szkodliwych operacji.

if (gid < n) tile[local] = in[gid];

Halo poza krawędzią

Na początku tablicy lewe halo wskazuje przed indeks zero. Nie ma tam rzeczywistego sąsiada, więc trzeba zdecydować, co załadować.

Strategia: dopełnianie zerami

Jednym z typowych rozwiązań jest dopełnianie zerami: brakujących sąsiadów traktuje się jako 0. Jest to proste i dobrze działa w przypadku sum oraz wielu filtrów.

tile[local] = (gid < n) ? in[gid] : 0.0f;

Strategia: ograniczenie do krawędzi

Inną możliwością jest ograniczenie indeksu do najbliższej prawidłowej komórki, co powoduje powtórzenie wartości brzegowej. Zapobiega to powstawaniu ciemnych obwódek na obrazach.

Wybór zależny od algorytmu

Właściwa reguła obsługi granic zależy od obliczeń. Wybierz zero, ograniczenie lub zawijanie, aby wynik na krawędzi odpowiadał wymaganiom problemu.

Zabezpiecz także zapis wyniku

Nawet po wykonaniu obliczeń wątek musi sprawdzić warunek przed zapisem, aby nigdy nie zapisać wyniku za końcem tablicy wyjściowej.

if (gid < n) out[gid] = result;

Zachowaj jednolitą barierę

Wątki znajdujące się poza danymi nadal muszą dotrzeć do __syncthreads. Umieść sprawdzanie zakresu wokół ładowania, a nie wokół samej bariery.

Najpierw testuj krawędzie

Większość błędów kafelkowania ukrywa się na granicach. Zawsze testuj rozmiary, które nie są wielokrotnościami rozmiaru kafelka, na przykład n równe 1000 przy kafelku 256.

Najpierw poprawność, potem szybkość

Obsługa krawędzi dodaje trochę kodu, ale zapewnia poprawne wyniki dla każdego rozmiaru danych wejściowych. Najpierw zadbaj o poprawność, a dopiero potem optymalizuj wydajność.

Szybkie sprawdzenie

Jak wątek powinien obsłużyć globalny indeks wykraczający poza koniec tablicy?

Podsumowanie

Kafelki brzegowe potrzebują sprawdzania zakresu oraz reguły granicznej (zero, ograniczenie lub zawijanie), aby zachować poprawność dla każdego rozmiaru tablicy. Testuj krawędzie. ✅

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 „Obsługa kafelków brzegowych” jest bezpłatna?

Tak — pełny tekst „Obsługa kafelków brzegowych” 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 „Obsługa kafelków brzegowych”?

Obsługiwać zakresy i dopełnianie na brzegach tablicy. Ć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 „Obsługa kafelków brzegowych”?

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. Problem ponownego użycia danych
  2. Wzorzec wczytaj–zsynchronizuj–oblicz
  3. Stencil i przesuwane okna
  4. Obsługa kafelków brzegowych
← Powrót do CUDA Academy