CUDA Academy · Lekcja

Nakładanie kopiowania i obliczeń

Ukrywać transfery za wykonującymi się kernelami.

Lekcja 4 z 413 kroki

Nakładanie kopiowania i obliczeń to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 4 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.

Najważniejsza idea

Rzeczywiste przyspieszenie wynika z wykonywania dwóch rzeczy jednocześnie: kopiowania jednego fragmentu danych, gdy GPU oblicza inny. 🔀

Oddzielne jednostki sprzętowe

GPU ma osobne jednostki kopiujące i jednostki obliczeniowe. Nakładanie pracy jest możliwe, ponieważ mogą one działać naprawdę równolegle, a nie tylko na zmianę.

Wymagana pamięć przypięta

Kopie asynchroniczne wymagają przypiętej pamięci hosta przydzielonej przez cudaMallocHost. Zwykły stronicowany malloc wymusza blokujące kopiowanie, które nie może nakładać się na obliczenia.

cudaMallocHost(&h_data, bytes);

Kopie asynchroniczne

Użyj cudaMemcpyAsync ze strumieniem, aby transfer natychmiast zwracał sterowanie i trafiał do kolejki tego strumienia obok kerneli.

cudaMemcpyAsync(d_in, h_in, bytes, cudaMemcpyHostToDevice, s);

Podziel pracę na fragmenty

Podziel tablicę na fragmenty i przypisz każdemu własny strumień. Gdy stream 0 wykonuje obliczenia, stream 1 może już kopiować dane.

Kopiowanie, obliczenia, kopiowanie z powrotem

Każdy fragment wykonuje w swoim strumieniu te same trzy kroki: przesłanie danych wejściowych, uruchomienie kernela i pobranie danych wyjściowych — wszystko bez blokowania hosta.

cudaMemcpyAsync(d, h, n, H2D, s);
k<<<g, b, 0, s>>>(d);
cudaMemcpyAsync(h, d, n, D2H, s);

Jak powstaje nakładanie pracy

Ponieważ fragmenty znajdują się w różnych strumieniach, GPU może kopiować fragment drugi, jednocześnie obliczając fragment pierwszy. Oś czasu się wypełnia. 📊

Ukrywanie kosztu PCIe

Transfery nie wydłużają już całkowitego czasu — chowają się za obliczeniami. W idealnym przypadku czas wykonania skraca się do mniej więcej dłuższego z czasów kopiowania i działania kernela.

Uważaj na strumień domyślny

Jedno przypadkowe wywołanie w strumieniu domyślnym w środku pętli może ponownie wykonać wszystko szeregowo. Powiąż każdą operację asynchroniczną z rzeczywistym, niedomyślnym strumieniem.

Zweryfikuj działanie w profilerze

Otwórz Nsight Systems i poszukaj torów kopiowania oraz obliczeń, które nakładają się w czasie. Zajęte, ułożone jeden nad drugim tory oznaczają, że współbieżność jest rzeczywista.

Synchronizuj na końcu

Po zleceniu wszystkich fragmentów wywołaj jednokrotnie cudaDeviceSynchronize, aby każdy strumień zakończył pracę, zanim odczytasz końcowe wyniki na hoście.

cudaDeviceSynchronize();

Szybkie sprawdzenie

Czego wymaga transfer asynchroniczny, aby nakładał się na obliczenia?

Podsumowanie

Dzieląc pracę na fragmenty wykonywane w strumieniach, używając przypiętej pamięci i kopii asynchronicznych, ukrywasz transfery za obliczeniami i utrzymujesz rzeczywiste obciążenie GPU. 🚀

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 „Nakładanie kopiowania i obliczeń” jest bezpłatna?

Tak — pełny tekst „Nakładanie kopiowania i obliczeń” 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 „Nakładanie kopiowania i obliczeń”?

Ukrywać transfery za wykonującymi się kernelami. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Nakładanie kopiowania i obliczeń”?

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. Pułapka strumienia domyślnego
  2. Tworzenie i używanie strumieni
  3. Zdarzenia do pomiaru czasu i synchronizacji
  4. Nakładanie kopiowania i obliczeń
← Powrót do CUDA Academy