CUDA Academy · Lekcja

Zdarzenia do pomiaru czasu i synchronizacji

Używać cudaEvent do mierzenia i porządkowania pracy.

Lekcja 3 z 413 kroki

Zdarzenia do pomiaru czasu i synchronizacji to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 3 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.

Czym jest zdarzenie?

Zdarzenie CUDA to znacznik umieszczany w strumieniu. GPU rejestruje moment dotarcia do tego punktu, co pozwala mierzyć czas i porządkować pracę. ⏱️

Uchwyt zdarzenia

Zdarzenia korzystają z uchwytu cudaEvent_t, podobnie jak strumienie. Tworzysz je, rejestrujesz, sprawdzasz ich stan, a po zakończeniu niszczysz.

cudaEvent_t start, stop;

Tworzenie zdarzeń

Wywołaj cudaEventCreate dla każdego potrzebnego zdarzenia. Do pomiaru czasu zwykle potrzebne są dwa: jedno przed pracą i jedno po niej.

cudaEventCreate(&start);
cudaEventCreate(&stop);

Rejestrowanie zdarzenia

cudaEventRecord umieszcza zdarzenie w strumieniu. GPU oznacza je w chwili zakończenia całej pracy zakolejkowanej przed nim.

cudaEventRecord(start, stream);

Pomiar czasu działania kernela

Zarejestruj początek, uruchom kernel, a następnie zarejestruj koniec — wszystko w tym samym strumieniu. Odstęp między nimi to rzeczywisty czas wykonywania na GPU.

cudaEventRecord(start, s);
kernel<<<g, b, 0, s>>>(d);
cudaEventRecord(stop, s);

Oczekiwanie na zdarzenie

Zdarzenia są asynchroniczne, więc host musi na nie poczekać. cudaEventSynchronize blokuje wykonanie do chwili faktycznego zarejestrowania wskazanego zdarzenia na GPU.

cudaEventSynchronize(stop);

Pomiar czasu, który upłynął

cudaEventElapsedTime zwraca liczbę milisekund między dwoma zarejestrowanymi zdarzeniami. Jest to znacznie dokładniejsze niż zegar procesora po stronie hosta.

float ms;
cudaEventElapsedTime(&ms, start, stop);

Dlaczego nie używać zegara CPU?

Zegary hosta uwzględniają narzut uruchamiania i nie mierzą rzeczywistego czasu pracy GPU. Zdarzenia znajdują się wewnątrz strumienia, więc dokładnie rejestrują pracę urządzenia.

Porządkowanie pracy między strumieniami

Zdarzenia służą również do synchronizowania strumieni. cudaStreamWaitEvent wstrzymuje jeden strumień do chwili wystąpienia zdarzenia zarejestrowanego w innym strumieniu.

cudaStreamWaitEvent(streamB, eventA, 0);

Budowanie zależności

Za pomocą oczekiwania strumienia na zdarzenie wyrażasz zależność: streamB rozpoczyna pracę dopiero po dotarciu streamA do swojego zdarzenia, bez blokowania hosta.

Usuwanie zdarzeń

Zwolnij niepotrzebne zdarzenia za pomocą cudaEventDestroy. Podobnie jak strumienie, są tanie, ale w aplikacjach działających długo nie należy pozostawiać ich bez zwolnienia.

cudaEventDestroy(start);
cudaEventDestroy(stop);

Szybkie sprawdzenie

Jaka funkcja zwraca czas między dwoma zdarzeniami?

Podsumowanie

Zdarzenia pozwalają precyzyjnie mierzyć pracę GPU i ustalać kolejność wykonywania strumieni. Są narzędziem do mierzenia i koordynowania nakładania się pracy. 🎯

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 „Zdarzenia do pomiaru czasu i synchronizacji” jest bezpłatna?

Tak — pełny tekst „Zdarzenia do pomiaru czasu i synchronizacji” 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 „Zdarzenia do pomiaru czasu i synchronizacji”?

Używać cudaEvent do mierzenia i porządkowania pracy. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Zdarzenia do pomiaru czasu i synchronizacji”?

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