Wskaźniki do pamięci GPU
Wskaźniki urządzenia przechowywać w zmiennych hosta.
Wskaźniki do pamięci GPU 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.
Wskaźnik żyjący na CPU
cudaMalloc przekazuje Ci zwykłą zmienną wskaźnikową C++. Znajduje się ona w pamięci hosta, ale przechowywany w niej adres wskazuje pamięć GPU. 🔗
Adres wskazuje urządzenie
Wskaźnik urządzenia przechowuje liczbę, która jest poprawna wyłącznie w przestrzeni adresowej GPU. Dla CPU jest to tylko liczba całkowita, a nie rzeczywista pamięć RAM.
float* d_data; // host variable, device addressZwyczaj nadawania nazw d_
Programiści poprzedzają wskaźniki urządzenia prefiksem d_, a wskaźniki hosta prefiksem h_. Sama nazwa przypomina, po której stronie znajduje się dany wskaźnik.
float* h_data;
float* d_data;Nie wyłuskuj go na hoście
Zapisanie *d_data w kodzie CPU to pułapka. Host nie może bezpośrednio dotykać pamięci GPU, więc taki kod powoduje awarię albo odczytuje bezsensowne dane.
Jądra mogą go swobodnie wyłuskiwać
W jądrze ten sam wskaźnik urządzenia jest całkowicie poprawny. W tym miejscu d_data[i] odczytuje rzeczywistą pamięć GPU i zapisuje do niej zgodnie z oczekiwaniami.
__global__ void k(float* d) {
d[0] = 1.0f;
}Przekazanie go do jądra
Przekazujesz wskaźnik urządzenia do jądra jako argument. GPU używa następnie tego adresu, aby znaleźć Twoje dane.
myKernel<<<grid, block>>>(d_data);Dwa wskaźniki, dwie przestrzenie
Trzymaj wskaźniki hosta i urządzenia ściśle rozdzielone. Wskaźnik hosta nie ma znaczenia na GPU, a wskaźnik urządzenia nie ma znaczenia na CPU.
cudaMemcpy łączy obie przestrzenie
Aby przesłać dane między nimi, należy je skopiować. cudaMemcpy przyjmuje oba wskaźniki i przenosi za Ciebie bajty przez tę granicę.
Arytmetyka wskaźników nadal działa
Na hoście możesz przesunąć wskaźnik urządzenia, na przykład za pomocą d_data + n, aby wskazywał fragment danych. Nie wolno Ci jednak odczytywać danych za jego pośrednictwem w tym miejscu.
float* d_tail = d_data + 100;Pomylenie ich bywa podstępne
Kompilator nie powstrzyma Cię przed pomyleniem tych dwóch rodzajów wskaźników. Wiele błędów CUDA to po prostu przekazanie wskaźnika hosta tam, gdzie powinien znaleźć się wskaźnik urządzenia.
Dyscyplina lepsza niż debugowanie
Jasne nazewnictwo i stała konwencja oszczędzają wiele godzin. Ustal schemat d_ i h_ na początku i nigdy go nie łam. 🧹
Szybkie sprawdzenie
Sprawdźmy, gdzie można bezpiecznie wyłuskać wskaźnik urządzenia.
Podsumowanie
Nauczyłeś się, że wskaźnik urządzenia znajduje się w zmiennej hosta, ale wskazuje pamięć GPU: można go używać wewnątrz jąder, lecz nie wolno uzyskiwać za jego pomocą bezpośredniego dostępu z hosta. 🎉
Często zadawane pytania
Czy lekcja „Wskaźniki do pamięci GPU” jest bezpłatna?
Tak — pełny tekst „Wskaźniki do pamięci GPU” 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 „Wskaźniki do pamięci GPU”?
Wskaźniki urządzenia przechowywać w zmiennych hosta. Ć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 „Wskaźniki do pamięci GPU”?
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
- cudaMalloc i cudaFree
- Wskaźniki do pamięci GPU
- cudaMemset do inicjalizacji
- Unikanie wycieków i podwójnego zwalniania