0Pricing
CUDA Academy · Lekcja

Problem ponownego użycia danych

Zrozumieć, dlaczego naiwne kernele ponownie odczytują pamięć globalną.

Problem ponownego użycia danych 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.

Ukryty koszt

Kernel może działać poprawnie, a mimo to być powolny, ponieważ wielokrotnie pobiera te same dane z wolnej pamięci globalnej. 🐢

Pamięć jest wąskim gardłem

Na GPU obliczenia arytmetyczne są tanie, ale dostęp do pamięci globalnej jest kosztowny. Wiele kerneli znacznie więcej czasu czeka na pamięć, niż wykonuje obliczenia.

Definicja ponownego użycia danych

Ponowne użycie danych oznacza, że jedna wartość załadowana z pamięci globalnej jest wykorzystywana w wielu obliczeniach zamiast odczytywania jej za każdym razem.

Prosty stencil

Wyobraź sobie rozmywanie obrazu. Każdy piksel wynikowy jest średnią ze swoich sąsiadów, więc każdy piksel wejściowy jest odczytywany przez kilka różnych wątków.

out[i] = (in[i-1] + in[i] + in[i+1]) / 3.0f;

Liczenie odczytów

W tym rozmyciu wartość in[i] jest odczytywana przez wątki i-1, i oraz i+1. Ten sam bajt trzykrotnie pokonuje wolną magistralę zasilaną przez PCIe.

Nadmiarowość się sumuje

Przy szerszym oknie lub siatce 2D każdy element może być odczytywany ponownie dziesiątki razy. Ten nadmiarowy ruch dominuje czas wykonania.

Przepustowość jest ograniczona

Pamięć globalna ma stałą szczytową przepustowość. Wielokrotne odczytywanie tych samych danych marnuje ten budżet na bajty, które już były dostępne.

Jednostki obliczeniowe pozostają bezczynne

Gdy warpy zatrzymują się, czekając na powtarzające się odczyty z pamięci globalnej, jednostki obliczeniowe pozostają bezczynne. Płacisz za rdzenie, z których prawie nie korzystasz. 😴

Intensywność arytmetyczna

Intensywność arytmetyczna to stosunek liczby operacji matematycznych do liczby przenoszonych bajtów. Niska intensywność oznacza, że ograniczeniem jest pamięć, a nie obliczenia.

Cel: odczytać raz

Rozwiązaniem jest jednokrotne załadowanie każdej potrzebnej wartości do szybkiej pamięci na układzie, a następnie umożliwienie wielu wątkom ponownego użycia jej w tym miejscu.

Poznaj pamięć współdzieloną

Tą szybką pamięcią na układzie jest pamięć współdzielona. Umieszczanie w niej danych stanowi podstawę wszystkich opisanych dalej optymalizacji kafelkowych.

Szybkie sprawdzenie

Dlaczego prosty kernel stencil często działa powoli?

Podsumowanie

Proste kernele ponownie odczytują współdzielone dane z pamięci globalnej, marnując przepustowość i zatrzymując obliczenia. Kafelkowanie pozwala załadować dane raz i wielokrotnie je wykorzystać. ✅

Często zadawane pytania

Czy lekcja „Problem ponownego użycia danych” jest bezpłatna?

Tak — pełny tekst „Problem ponownego użycia danych” 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 „Problem ponownego użycia danych”?

Zrozumieć, dlaczego naiwne kernele ponownie odczytują pamięć globalną. Ć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 „Problem ponownego użycia danych”?

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