Pamięć przypięta za pomocą cudaMallocHost
Używać zablokowanych w pamięci RAM buforów do szybkiego DMA.
Pamięć przypięta za pomocą cudaMallocHost to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 2 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.
Poznaj pamięć przypiętą
Pamięć przypięta to pamięć hosta, której system operacyjny obiecuje nigdy nie przenosić ani nie zamieniać na dysk. Ponieważ jej adres fizyczny jest stały, GPU może odczytywać ją bezpośrednio.
Nazywana także page-locked
Termin page-locked jest używany jako synonim pamięci przypiętej. Oba określenia oznaczają to samo: strony zablokowane w miejscu, tak aby nigdy nie doszło do ich zamiany.
Alokuj ją właściwie
Poproś CUDA o pamięć przypiętą za pomocą cudaMallocHost. Funkcja zwraca zwykły wskaźnik do pamięci hosta, który można odczytywać i zapisywać tak samo jak dowolną tablicę C++.
float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));Używaj jej jak zwykle
Zwrócony wskaźnik zachowuje się jak każdy bufor hosta, więc kod CPU pozostaje bez zmian. Wystarczy wypełniać bufor i odczytywać go dokładnie tak jak wcześniej.
for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;Koniec z kopiowaniem pośrednim
Ponieważ stron nie można przenosić, sterownik pomija ukryte kopiowanie do bufora pośredniego. GPU pobiera dane bezpośrednio z bufora, więc podwójne kopiowanie znika.
Szybsze transfery
Zysk to rzeczywista przepustowość. Transfery z pamięci przypiętej często osiągają niemal szczytową prędkość łącza, czasem są mniej więcej dwa razy szybsze niż transfery z pamięci stronicowanej.
Zwalniaj ją prawidłowo
Pamięć przypięta wymaga odpowiadającej jej funkcji zwalniającej. Używaj cudaFreeHost, a nigdy zwykłego free, ponieważ w przeciwnym razie grożą awaria i wyciek pamięci.
cudaFreeHost(h_data);To nie jest darmowy zasób
Przypiętych stron nie można zamienić na dysk, więc zajmują rzeczywistą pamięć RAM. Jeśli przypniesz jej zbyt dużo, pozbawisz resztę systemu dostępnej pamięci.
Alokacja jest wolniejsza
Blokowanie stron wymaga dodatkowej pracy, dlatego cudaMallocHost alokuje pamięć wolniej niż malloc. Zamiast alokować pamięć ponownie, używaj tego samego przypiętego bufora podczas wielu transferów.
Prawdziwa supermoc
Oprócz szybkości pamięć przypięta jest kluczem do naprawdę asynchronicznego kopiowania. Bez niej cudaMemcpyAsync nie może wykonywać się równolegle z żadną inną pracą.
Kiedy po nią sięgać
Przypinaj bufory, które często przesyłasz lub które zasilają strumienie. Przy jednorazowym kopiowaniu małej tablicy zwykły malloc w zupełności wystarczy. 🙂
Szybki test
Bufor został zaalokowany za pomocą cudaMallocHost. Jak należy go zwolnić?
Podsumowanie
cudaMallocHost przypina strony hosta, dzięki czemu GPU odczytuje je bezpośrednio, zapewniając szybsze kopiowanie i umożliwiając nakładanie operacji asynchronicznych. Zawsze zwalniaj pamięć za pomocą cudaFreeHost. 🔒
Często zadawane pytania
Czy lekcja „Pamięć przypięta za pomocą cudaMallocHost” jest bezpłatna?
Tak — pełny tekst „Pamięć przypięta za pomocą cudaMallocHost” 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 „Pamięć przypięta za pomocą cudaMallocHost”?
Używać zablokowanych w pamięci RAM buforów do szybkiego DMA. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Pamięć przypięta za pomocą cudaMallocHost”?
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
- Dlaczego pamięć stronicowana jest wolna
- Pamięć przypięta za pomocą cudaMallocHost
- cudaMemcpyAsync w strumieniu
- Potok z podwójnym buforowaniem