Nakładanie kopiowania i obliczeń
Ukrywać transfery za wykonującymi się kernelami.
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. 🚀
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
- Pułapka strumienia domyślnego
- Tworzenie i używanie strumieni
- Zdarzenia do pomiaru czasu i synchronizacji
- Nakładanie kopiowania i obliczeń