0Pricing
CUDA Academy · Lekcja

Jeden wskaźnik po obu stronach

Zrozumieć działanie cudaMallocManaged.

Jeden wskaźnik po obu stronach 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.

Problem dwóch wskaźników

Do tej pory trzeba było żonglować dwoma wskaźnikami: jednym dla hosta, a drugim dla urządzenia. Unified Memory usuwa ten problem dzięki jednemu wskaźnikowi, którego mogą używać obie strony. 🙂

Poznaj cudaMallocManaged

Pamięć zarządzaną alokuje się za pomocą cudaMallocManaged. Funkcja zwraca jeden adres, który działa zarówno w kodzie CPU, jak i wewnątrz kernelów.

float *data;
cudaMallocManaged(&data, n * sizeof(float));

Koniec z cudaMemcpy

Największa korzyść jest taka, że zwykle można pominąć ręczne kopiowanie. W przypadku pamięci zarządzanej środowisko uruchomieniowe przenosi dane za Ciebie, więc cudaMemcpy często znika z kodu.

Zapisuj na hoście

Po alokacji możesz wypełnić bufor zwykłym kodem CPU. Otrzymany wskaźnik jest zwykłym adresem, z którego mogą korzystać Twoje pętle.

for (int i = 0; i < n; i++)
    data[i] = i;

Odczytuj na urządzeniu

Przekaż ten sam wskaźnik do kernela, a wątki GPU wyłuskują go bezpośrednio. Jeden adres obsługuje oba środowiska bez etapu tłumaczenia.

kernel<<<blocks, threads>>>(data, n);

Synchronizuj przed odczytem

Po zapisaniu danych zarządzanych przez kernel wywołaj cudaDeviceSynchronize, zanim CPU je odczyta. Gwarantuje to zakończenie pracy GPU i dostępność wyników.

kernel<<<b, t>>>(data, n);
cudaDeviceSynchronize();

Zwalniaj jak każdy bufor

Pamięć zarządzana nadal jest pamięcią urządzenia, więc zwalnia się ją za pomocą cudaFree. Nie trzeba pamiętać o żadnej specjalnej funkcji zwalniającej pamięć zarządzaną.

cudaFree(data);

Mniej kodu, mniej błędów

Ponieważ usuwasz schemat alokacja–kopiowanie–uruchomienie–kopiowanie–zwolnienie, programy stają się krótsze. Mniej kopii oznacza mniej okazji do pomylenia kierunków lub rozmiarów.

Świetna do prototypowania

Unified Memory jest idealna, gdy chcesz szybko uruchomić kernel. Możesz szybko tworzyć prototypy, a później optymalizować transfery tylko tam, gdzie rzeczywiście ma to znaczenie.

To nie jest magia za darmo

Pod spodem dane nadal muszą przejść przez PCIe. Wygoda jest rzeczywista, ale wydajność może być gorsza niż w przypadku ręcznie dostrojonego kopiowania, dopóki nie dodasz później odpowiednich wskazówek.

Kiedy po nią sięgać

Wybierz pamięć zarządzaną, gdy zależy Ci na prostszym kodzie, złożonych strukturach wskaźników lub wykorzystaniu większej ilości pamięci GPU, niż jest dostępna. Sprawdza się, gdy czytelność jest ważniejsza niż maksymalna surowa szybkość.

Szybki test

Sprawdźmy, czym alokacja zarządzana różni się od klasycznego schematu.

Podsumowanie: jeden wskaźnik po obu stronach

Dowiedziałeś się, że cudaMallocManaged udostępnia jeden wskaźnik dla hosta i urządzenia, eliminując większość kopii. Synchronizuj pracę przed odczytem, a pamięć zwalniaj za pomocą cudaFree. Dobra robota! 🎉

Często zadawane pytania

Czy lekcja „Jeden wskaźnik po obu stronach” jest bezpłatna?

Tak — pełny tekst „Jeden wskaźnik po obu stronach” 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 „Jeden wskaźnik po obu stronach”?

Zrozumieć działanie cudaMallocManaged. Ć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 „Jeden wskaźnik po obu stronach”?

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. Jeden wskaźnik po obu stronach
  2. Migracja stron na żądanie
  3. Prefetching za pomocą cudaMemPrefetchAsync
  4. Wskazówki za pomocą cudaMemAdvise
← Powrót do CUDA Academy