CUDA Academy · Lekcja

Wzorzec wczytaj–zsynchronizuj–oblicz

Umieszczać kafelki w pamięci przed wykonywaniem na nich obliczeń.

Lekcja 2 z 413 kroki

Wzorzec wczytaj–zsynchronizuj–oblicz 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.

Trzy proste fazy

Kafelkowanie ma w każdym kernelu ten sam schemat: załaduj kafelek do pamięci współdzielonej, zsynchronizuj wątki, a następnie wykonuj obliczenia na szybkiej kopii.

Faza pierwsza: ładowanie

W fazie ładowania każdy wątek odczytuje jeden element z pamięci globalnej i zapisuje go w kafelku pamięci współdzielonej widocznym dla całego bloku.

tile[threadIdx.x] = in[globalIndex];

Wspólny wysiłek

Ładowanie to zadanie zespołowe. Każdy wątek pobiera swoją część, dzięki czemu cały blok wspólnie umieszcza pełny kafelek w pamięci za pomocą jednego współalescencyjnego przebiegu.

Faza druga: synchronizacja

Zanim ktokolwiek odczyta wartość sąsiada, wszystkie wątki muszą zakończyć ładowanie. __syncthreads to bariera gwarantująca, że kafelek jest gotowy.

__syncthreads();

Dlaczego synchronizacja jest konieczna

Pominięcie bariery może sprawić, że wątek odczyta miejsce w kafelku, którego sąsiad nie zdążył jeszcze zapisać. To wyścig i prowadzi do błędnych wyników. 💥

Faza trzecia: obliczenia

Teraz każda wartość znajduje się na układzie. W fazie obliczeń wątki mogą swobodnie odczytywać elementy kafelka, ponieważ pamięć współdzielona jest o rzędy wielkości szybsza od globalnej.

Szybkie ponowne użycie się opłaca

Ponieważ kafelek znajduje się w pamięci współdzielonej, wartość załadowana raz jest ponownie używana przez wiele wątków przy niemal zerowym dodatkowym koszcie. Na tym polega cała korzyść.

Czasami potrzebna jest ponowna synchronizacja

Jeśli faza obliczeń zapisuje dane z powrotem do tego samego kafelka na potrzeby kolejnego kroku, przed ponownym użyciem tych miejsc dodaj drugie __syncthreads.

Wszystkie wątki albo żaden

Każdy wątek w bloku musi dotrzeć do __syncthreads. Jeśli część wątków pominie je wewnątrz odgałęzienia, kernel zakleszczy się lub zacznie działać nieprawidłowo.

Schemat do ponownego użycia

Ładowanie, synchronizacja i obliczenia to szablon, który będzie używany w splotach, mnożeniu macierzy i redukcjach w całej tej kategorii.

Zwróć uwagę na rozmiar kafelka

Kafelek pamięci współdzielonej musi zmieścić się w bloku. Szerokość kafelka zwykle odpowiada blockDim, więc każdy wątek ma dokładnie jedno miejsce do załadowania i ponownego użycia.

Szybkie sprawdzenie

Dlaczego między ładowaniem a obliczeniami potrzebne jest __syncthreads?

Podsumowanie

Kafelkowanie to ładowanie, synchronizacja, obliczenia: wspólnie umieść kafelek w pamięci, użyj bariery, aby mieć pewność, że jest kompletny, a następnie szybko używaj go na układzie. ✅

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 „Wzorzec wczytaj–zsynchronizuj–oblicz” jest bezpłatna?

Tak — pełny tekst „Wzorzec wczytaj–zsynchronizuj–oblicz” 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 „Wzorzec wczytaj–zsynchronizuj–oblicz”?

Umieszczać kafelki w pamięci przed wykonywaniem na nich obliczeń. Ć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 „Wzorzec wczytaj–zsynchronizuj–oblicz”?

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