0Pricing
CUDA Academy · Lekcja

Odczyty łączone a skokowe

Zrozumieć znaczenie mapowania wątków na adresy.

Odczyty łączone a skokowe 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.

Wszystko zależy od mapowania

Koalescencja zależy od tego, do którego adresu odwołuje się każdy wątek. Mapowanie wątku na adres decyduje o tym, czy cała wiązka korzysta z jednej transakcji.

Wzorzec koalescencji

Gdy sąsiednie wątki odczytują sąsiednie adresy, wiązka obejmuje jeden ciągły zakres. Taki uporządkowany układ to dostęp koalescencyjny.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float v = data[i];

Dlaczego to działa

Wątek 0 trafia w indeks 0, wątek 1 w indeks 1 i tak dalej. Wszystkie 32 adresy mieszczą się w jednej wyrównanej linii, więc GPU potrzebuje tylko jednej transakcji.

Wprowadzenie kroku

Krok to stała odległość między adresami, do których odwołują się kolejne wątki. Gdy ta odległość przekroczy jeden element, koalescencja zaczyna się rozpadać.

float v = data[i * stride];

Odczyty ze skokiem rozpraszają adresy

Przy kroku równym 2 wątek 0 odczytuje 0, wątek 1 odczytuje 2, a wątek 2 odczytuje 4. Wiązka obejmuje teraz dwa razy większy obszar pamięci, więc potrzebuje większej liczby transakcji.

Koszt rośnie

Podwojenie kroku powoduje w przybliżeniu podwojenie liczby użytych linii. Duże kroki mogą sprawić, że wiązka będzie potrzebować wielu transakcji, wykorzystując tylko fragment każdej linii.

Częsta pułapka

Przydzielenie każdemu wątkowi całej kolumny macierzy przechowywanej w porządku wierszowym tworzy ogromny krok. W kodzie wygląda to schludnie, ale po cichu rozprasza każdą wiązkę.

float v = matrix[threadIdx.x * width + row];

Transpozycja mapowania

Często wystarczy zamienić indeks, który zmienia się najszybciej dla wątku. Gdy kolejne wątki przechodzą przez kolejne komórki pamięci, odczyty znów stają się koalescencyjne.

float v = matrix[row * width + threadIdx.x];

Przesunięcia też szkodzą

Nawet koalescencyjny wzorzec traci wydajność, jeśli zaczyna się w środku linii. Nie wyrównane przesunięcie przenosi wiązkę przez granicę, dzieląc jeden odczyt na dwa.

Myśl w kategoriach wiązek

Aby ocenić wzorzec, nie wyobrażaj sobie jednego wątku. Wyobraź sobie wszystkie 32 pasma naraz i sprawdź, ile linii obejmują wspólnie ich adresy. 🔍

Praktyczna zasada

Niech indeks zmieniający się najszybciej podąża za threadIdx.x. Ten jeden nawyk sprawia, że większość odczytów globalnych jest koalescencyjna bez dodatkowego wysiłku.

Szybki test

Wybierz wzorzec dostępu, który najlepiej wykorzystuje koalescencję.

Podsumowanie

Dowiedziałeś się, że koalescencyjne odczyty utrzymują sąsiednie elementy razem, a krok rozprasza je po liniach. Niech threadIdx.x steruje indeksem zmieniającym się najszybciej. 🎉

Często zadawane pytania

Czy lekcja „Odczyty łączone a skokowe” jest bezpłatna?

Tak — pełny tekst „Odczyty łączone a skokowe” 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 „Odczyty łączone a skokowe”?

Zrozumieć znaczenie mapowania wątków na adresy. Ć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 „Odczyty łączone a skokowe”?

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. Czym jest transakcja pamięci
  2. Odczyty łączone a skokowe
  3. Structure of Arrays a Array of Structs
  4. Pomiar efektywnej przepustowości
← Powrót do CUDA Academy