Deklarowanie tablic __shared__
Szybka pamięć robocza dostępna dla każdego bloku.
Deklarowanie tablic __shared__ 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.
Bufor roboczy dla każdego bloku
Każdy blok otrzymuje małą, szybką pulę pamięci umieszczonej w układzie, nazywaną pamięcią współdzieloną. Możesz myśleć o niej jak o buforze roboczym, do którego cały blok może wspólnie zapisywać i z którego może odczytywać dane.
Dlaczego jest tak szybka
Pamięć współdzielona znajduje się bezpośrednio w multiprocesorze strumieniowym, więc jest około 100 razy szybsza niż pamięć globalna. Używaj jej, aby uniknąć ciągłego obciążania wolnej pamięci DRAM poza układem. 🚀
Słowo kluczowe __shared__
Deklarujesz ją za pomocą kwalifikatora __shared__ wewnątrz jądra. Ta jedna tablica jest następnie współdzielona przez każdy wątek w bloku.
__global__ void kern() {
__shared__ float tile[256];
}Stały rozmiar w czasie kompilacji
Gdy podajesz rozmiar w nawiasach, jest to statyczna pamięć współdzielona. Kompilator musi znać rozmiar, więc musi on być stałą, a nie wartością ustalaną w czasie działania.
__shared__ int counts[128];Jedna kopia, nie jedna na wątek
To najważniejsza kwestia: tablica __shared__ jest tworzona raz na blok, a nie raz na wątek. Wszystkie wątki widzą dokładnie tę samą tablicę.
Wątki współpracują za jej pośrednictwem
Ponieważ każdy wątek widzi te same dane, pamięć współdzielona pozwala wątkom współpracować. Jeden wątek może odłożyć wartość, a sąsiedni może ją pobrać.
Zakres bloku i nic więcej
Jej czas życia odpowiada czasowi życia bloku. Tablica powstaje wraz z rozpoczęciem bloku i znika po jego zakończeniu, więc ma wyłącznie zakres bloku. 🧱
Każdy wątek ma własny element
Typowym wzorcem jest jeden element na wątek, indeksowany przez threadIdx.x. Każdy wątek równolegle ładuje swój element do pamięci współdzielonej.
__shared__ float s[256];
s[threadIdx.x] = input[i];Mały, ale cenny zasób
Pamięć współdzielona jest niewielka — często to zaledwie 48–100 KB na SM. Zażądanie zbyt dużej ilości pamięci na blok zmniejsza liczbę bloków, które mogą działać jednocześnie.
Klasyczne zastosowanie: kafelkowanie
Najczęściej służy do umieszczania kafelka danych globalnych w pamięci, aby blok mógł wielokrotnie go wykorzystywać bez ponownego odwoływania się do wolnej pamięci DRAM.
Niewidoczna dla innych bloków
Pamiętaj o tej granicy: pamięć współdzielona jest prywatna dla bloku. Dwa różne bloki otrzymują własne, oddzielne kopie i nie mogą zaglądać do swoich danych.
Szybki test
Sprawdźmy zakres pamięci współdzielonej.
Podsumowanie
Dowiedziałeś się, że __shared__ zapewnia każdemu blokowi szybki bufor roboczy w układzie, tworzony raz na blok i idealny do przechowywania wielokrotnie używanych danych. Dalej: synchronizacja wątków. 🎯
Często zadawane pytania
Czy lekcja „Deklarowanie tablic __shared__” jest bezpłatna?
Tak — pełny tekst „Deklarowanie tablic __shared__” 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 „Deklarowanie tablic __shared__”?
Szybka pamięć robocza dostępna dla każdego bloku. Ć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 „Deklarowanie tablic __shared__”?
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
- Deklarowanie tablic __shared__
- Synchronizowanie za pomocą __syncthreads
- Unikanie konfliktów banków pamięci
- Dynamiczna pamięć współdzielona