CUDA Academy · Lekcja

Wyjaśnienie cudaDeviceSynchronize

Zrozumieć, dlaczego CPU musi czekać na GPU.

Lekcja 4 z 413 kroki

Wyjaśnienie cudaDeviceSynchronize 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.

CPU nie czeka

Po uruchomieniu CPU działa dalej, podczas gdy GPU wciąż pracuje. Aby zatrzymać wykonanie i zaczekać, należy wywołać cudaDeviceSynchronize. ⏳

myKernel<<<g, b>>>(p);
cudaDeviceSynchronize();

Co oznacza synchronizacja

cudaDeviceSynchronize blokuje hosta do czasu zakończenia wszystkich zadań GPU znajdujących się w kolejce. Dopiero wtedy wykonywana jest następna instrukcja CPU.

Dlaczego jest potrzebna

Bez synchronizacji można odczytać wyniki, których GPU jeszcze nie zapisało. Synchronizacja gwarantuje, że kernel rzeczywiście jest gotowy.

Opróżnianie danych wyjściowych printf

Synchronizacja opróżnia również urządzeniowy printf. Jeśli kernel drukuje, ale nic się nie pojawia, przyczyną zwykle jest brak synchronizacji.

hi<<<1, 4>>>();
cudaDeviceSynchronize(); // now you see it

Zwraca kod błędu

Wywołanie zwraca wartość typu cudaError_t. Błąd w tym miejscu często ujawnia awarię, która wystąpiła wewnątrz kernela.

cudaError_t e = cudaDeviceSynchronize();

Wykrywanie ukrytych awarii kernela

Kernely mogą kończyć się niepowodzeniem bez wyraźnego komunikatu, dlatego sprawdzanie kodu błędu z synchronizacji pozwala wykryć dostęp poza zakresem lub błędne uruchomienie.

if (e != cudaSuccess) printf("kernel failed\n");

cudaMemcpy również synchronizuje

Zwykłe cudaMemcpy z powrotem do hosta również czeka na GPU. W tym typowym przypadku osobna synchronizacja może nie być potrzebna.

cudaMemcpy(host, dev, n, cudaMemcpyDeviceToHost);

Nie synchronizuj zbyt często

Wywoływanie synchronizacji po każdym kroku eliminuje nakładanie się pracy i spowalnia program. Należy synchronizować tylko wtedy, gdy naprawdę trzeba odczytać wyniki lub zmierzyć czas.

Synchronizacja podczas pomiaru czasu

Aby uczciwie zmierzyć czas działania kernela, należy zsynchronizować wykonanie przed uruchomieniem i po nim. W przeciwnym razie stoper mierzy jedynie szybkość umieszczenia zadania w kolejce przez CPU.

cudaDeviceSynchronize();
// start timer ... kernel ... sync ... stop

Synchronizacja strumienia jest węższa

Aby uzyskać większą kontrolę, można użyć cudaStreamSynchronize, które czeka na jeden strumień zamiast na całe urządzenie. Jest to przydatne, gdy praca wykonywana jest nakładane.

cudaStreamSynchronize(stream);

Bezpieczny pierwszy nawyk

Podczas nauki należy synchronizować wykonanie po każdym uruchomieniu i sprawdzać wynik. Gdy kod będzie stabilny, można usunąć dodatkowe synchronizacje, aby zwiększyć szybkość.

Szybkie sprawdzenie

Sprawdźmy, czy rozumieją Państwo synchronizację.

Podsumowanie: synchronizacja

cudaDeviceSynchronize sprawia, że CPU czeka na GPU, opróżnia printf i ujawnia ukryte awarie. Należy używać go rozsądnie, a nie wszędzie. 🎉

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 „Wyjaśnienie cudaDeviceSynchronize” jest bezpłatna?

Tak — pełny tekst „Wyjaśnienie cudaDeviceSynchronize” 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 „Wyjaśnienie cudaDeviceSynchronize”?

Zrozumieć, dlaczego CPU musi czekać na GPU. Ć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 „Wyjaśnienie cudaDeviceSynchronize”?

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. Anatomia kernela
  2. Uruchamianie z potrójnym nawiasem trójkątnym
  3. printf wewnątrz kernela
  4. Wyjaśnienie cudaDeviceSynchronize
← Powrót do CUDA Academy