0Pricing
CUDA Academy · Lekcja

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 address

Zwyczaj 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

  1. cudaMalloc i cudaFree
  2. Wskaźniki do pamięci GPU
  3. cudaMemset do inicjalizacji
  4. Unikanie wycieków i podwójnego zwalniania
← Powrót do CUDA Academy