Prefetching za pomocą cudaMemPrefetchAsync
Przenosić strony, zanim będą potrzebne.
Prefetching za pomocą cudaMemPrefetchAsync 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.
Przestań płacić za błędy stron
Zamiast czekać na wolne błędy przy pierwszym dostępie, możesz przenieść strony wcześniej. cudaMemPrefetchAsync wysyła dane zarządzane do urządzenia, zanim kernel ich potrzebuje.
Podstawowe wywołanie
Podaje Pan/Pani wskaźnik, liczbę bajtów i urządzenie docelowe. To pojedyncze wywołanie prefetch z wyprzedzeniem migruje cały zakres w jednym wydajnym transferze.
cudaMemPrefetchAsync(data, n * sizeof(float), 0);Wybór urządzenia docelowego
Trzeci argument to identyfikator device. Należy przekazać numer GPU, aby przygotować dane na tym GPU przed uruchomieniem kernela.
int dev = 0;
cudaMemPrefetchAsync(data, bytes, dev);Prefetch z powrotem do CPU
Specjalnego identyfikatora cudaCpuDeviceId należy użyć, aby przenieść wyniki z powrotem do hosta. Trzeba zrobić to przed odczytaniem ich przez kod CPU, aby uniknąć serii błędów dostępu.
cudaMemPrefetchAsync(data, bytes, cudaCpuDeviceId);Operacja asynchroniczna
Async w nazwie oznacza dokładnie to, co sugeruje: wywołanie natychmiast zwraca sterowanie i wykonuje się w stream. CPU może pracować dalej, gdy strony są migrowane w tle.
Nakładanie na obliczenia
Ponieważ prefetch działa w strumieniu, może nakładać się na działanie innych kerneli. Należy przygotować kolejny fragment, gdy bieżący jest jeszcze przetwarzany.
cudaMemPrefetchAsync(next, bytes, dev, stream);Jeden transfer jest lepszy niż wiele błędów dostępu
Pojedynczy zbiorczy prefetch jest znacznie tańszy niż tysiące drobnych błędów dostępu. Rozproszone narzuty zostają zastąpione jednym ciągłym transferem o dużej przepustowości.
Prefetch właściwego zakresu
Należy przygotowywać tylko te dane, do których kernel rzeczywiście uzyskuje dostęp. Prefetch ogromnego bufora, z którego kernel prawie nie korzysta, jedynie marnuje przepustowość i pamięć GPU.
Schemat dwustronny
Wyłania się prosty rytm: prefetch do GPU, uruchomienie kernela, prefetch wyników z powrotem. Dzięki temu migracja po obu stronach nie znajduje się na ścieżce krytycznej.
Mierzyć, nie zgadywać
Należy dodać prefetch, a następnie sprawdzić w Nsight, czy liczba błędów dostępu się zmniejszyła, a przebiegi czasowe są bardziej zwarte. O skuteczności powinno decydować profilowanie, a nie intuicja.
Wygoda i kontrola
Prefetching zachowuje wygodę pojedynczego wskaźnika pamięci zarządzanej, a jednocześnie przywraca kontrolę nad czasem operacji. Otrzymuje się najlepsze cechy obu podejść.
Szybkie sprawdzenie
Sprawdźmy, jakie korzyści daje prefetching.
Podsumowanie: prefetching
Nauczył się Pan/Nauczyła się Pani przygotowywać strony z wyprzedzeniem za pomocą cudaMemPrefetchAsync, wybierając GPU lub cudaCpuDeviceId. Operacja nakłada się na pracę w strumieniach i jest lepsza niż obsługa błędów dostępu. Świetna praca! ✨
Często zadawane pytania
Czy lekcja „Prefetching za pomocą cudaMemPrefetchAsync” jest bezpłatna?
Tak — pełny tekst „Prefetching za pomocą cudaMemPrefetchAsync” 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 „Prefetching za pomocą cudaMemPrefetchAsync”?
Przenosić strony, zanim będą potrzebne. Ć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 „Prefetching za pomocą cudaMemPrefetchAsync”?
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
- Jeden wskaźnik po obu stronach
- Migracja stron na żądanie
- Prefetching za pomocą cudaMemPrefetchAsync
- Wskazówki za pomocą cudaMemAdvise