CUDA Academy · Lekcja

Konfigurowanie części hosta

Przydzielać pamięć, kopiować, uruchamiać, kopiować z powrotem i zwalniać.

Lekcja 2 z 413 kroki

Konfigurowanie części hosta 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.

Host też ma zadanie

Kernel wykonuje obliczenia, ale procesor hosta przygotowuje wszystko. Jego zadania to alokacja, przesłanie danych, uruchomienie kernela, pobranie wyników i zwolnienie pamięci. 🧩

Dwa zestawy wskaźników

Dla tablic CPU przechowuje się wskaźniki hosta, a dla buforów GPU — oddzielne wskaźniki urządzenia. Często nadaje się im nazwy h_A i d_A.

float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;

Wypełnij dane wejściowe na CPU

Najpierw należy przygotować dane w zwykłej pamięci hosta. W tym przykładzie wystarczy zainicjalizować h_A i h_B wartościami, które GPU później doda.

for (int i = 0; i < n; i++) {
    h_A[i] = i; h_B[i] = 2 * i;
}

Alokuj pamięć na urządzeniu

GPU potrzebuje własnych buforów, dlatego należy wywołać cudaMalloc dla każdej tablicy. Rozmiar podaje się w bajtach i oblicza jako iloczyn liczby elementów oraz sizeof(float).

size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);

Prześlij dane wejściowe

Tablice wejściowe należy przenieść do GPU za pomocą cudaMemcpy i kierunku HostToDevice. Kernel widzi tylko dane znajdujące się na urządzeniu.

cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);

Ustal konfigurację uruchomienia

Należy wybrać liczbę wątków w bloku, a następnie obliczyć, ile bloków obejmie wszystkie elementy. Zaokrąglenie w górę gwarantuje, że każdy element otrzyma wątek.

int threads = 256;
int blocks = (n + threads - 1) / threads;

Uruchom kernel

Teraz należy uruchomić kernel za pomocą składni potrójnych nawiasów kątowych, przekazując wskaźniki urządzenia. To wywołanie natychmiast zwraca sterowanie, podczas gdy GPU pracuje.

vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);

Pobierz wynik

Gdy kernel zakończy działanie, należy sprowadzić C z powrotem za pomocą cudaMemcpyDeviceToHost. To kopiowanie również czeka na zakończenie uruchomienia kernela.

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

Zwolnij pamięć urządzenia

Pamięć GPU nie jest automatycznie zwalniana, dlatego każdy bufor należy zwolnić za pomocą cudaFree. Pominięcie tego kroku powoduje wyciek pamięci trwający do zakończenia procesu.

cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);

Kolejność jest święta

Zawsze należy zachować tę samą kolejność: alokacja, przesłanie danych, uruchomienie, pobranie wyników, zwolnienie pamięci. Zmiana kolejności sprawi, że kernel odczyta nieaktualne lub nieprawidłowe dane.

Kod hosta to zwykły C++

Warto zauważyć, że kod po stronie hosta to zwykły C++ oraz kilka wywołań cuda. Poza uruchomieniem kernela nie ma tu żadnej specjalnej magii kompilatora.

Szybkie sprawdzenie

Co musi się wydarzyć, zanim będzie można uruchomić kernel vecAdd?

Podsumowanie

Połączył Pan/Pani całą stronę hosta: dwa zestawy wskaźników, cudaMalloc, kopiowanie do urządzenia, uruchomienie, kopiowanie z powrotem i cudaFree. To standardowy kod obsługujący każde jądro. ✅

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Konfigurowanie części hosta” jest bezpłatna?

Tak — pełny tekst „Konfigurowanie części hosta” 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 „Konfigurowanie części hosta”?

Przydzielać pamięć, kopiować, uruchamiać, kopiować z powrotem i zwalniać. Ć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 „Konfigurowanie części hosta”?

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. Kernel dodawania wektorów
  2. Konfigurowanie części hosta
  3. Weryfikowanie wyniku na CPU
  4. Pomiar pierwszego przyspieszenia
← Powrót do CUDA Academy