Enumerowanie i wybieranie urządzeń
cudaSetDevice i konteksty dla poszczególnych GPU
Enumerowanie i wybieranie urządzeń to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 1 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.
Więcej niż jeden GPU
Pojedynczy komputer może zawierać kilka GPU. Aby użyć ich wszystkich, program musi najpierw wykryć, ile devices jest dostępnych, zanim wyśle do nich pracę.
Zliczanie urządzeń
Jedno wywołanie informuje, ile GPU widzi środowisko uruchomieniowe. cudaGetDeviceCount zapisuje tę liczbę do przekazanej zmiennej typu int.
int count;
cudaGetDeviceCount(&count);Urządzenia mają numery
Każdy GPU otrzymuje identyfikator całkowity od 0 do liczby urządzeń pomniejszonej o jeden. Ten device id służy do wskazania środowisku uruchomieniowemu konkretnej karty.
Wybór aktywnego urządzenia
GPU, do którego będą kierowane kolejne wywołania, wybiera się za pomocą cudaSetDevice. Od tego momentu alokacje i uruchomienia trafiają do tej karty.
cudaSetDevice(1);Istnieje bieżące urządzenie
W każdej chwili dokładnie jeden GPU jest current device dla wywołującego wątku. Każde cudaMalloc lub uruchomienie kernela trafia do urządzenia, które jest aktualnie wybrane.
Sprawdzanie urządzenia
Przed zaufaniem danemu GPU można odczytać jego specyfikację. cudaGetDeviceProperties wypełnia strukturę zawierającą nazwę, rozmiar pamięci i zdolność obliczeniową.
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);Odczytywanie właściwości
Struktura właściwości zawiera wiele informacji. Pola takie jak name i totalGlobalMem pomagają wybrać najlepszą kartę lub pominąć zbyt małą.
Każde urządzenie ma własną pamięć
Wskaźnik zwrócony przez cudaMalloc należy do GPU, który był wtedy bieżący. Użycie go, gdy bieżące jest inne device, prowadzi do błędu.
Konteksty przypisane do urządzeń
Za każdym GPU znajduje się context, który przechowuje jego alokacje i strumienie. Zmiana bieżącego urządzenia przełącza program do kontekstu tego urządzenia.
Iterowanie po wszystkich GPU
Typowy wzorzec obejmuje pętlę wywołującą cudaSetDevice dla każdego identyfikatora, a następnie wykonującą konfigurację danej karty. W ten sposób rozdziela się pracę między wszystkie device.
for (int d = 0; d < count; d++) {
cudaSetDevice(d);
}Przywróć stan przed wyjściem
Jeśli funkcja pomocnicza zmienia bieżące urządzenie, po zakończeniu należy je przełączyć z powrotem. Pozostawienie zmienionego current device może zaskoczyć resztę kodu.
Szybkie sprawdzenie
Proszę przypomnieć sobie, które wywołanie wybiera GPU używany przez kolejne alokacje i uruchomienia.
Podsumowanie
Zlicza Pan/Pani GPU, wybiera jeden za pomocą cudaSetDevice i sprawdza go przy użyciu właściwości. Każde device ma własną pamięć i kontekst. Następnie: podział pracy między urządzenia. ✨
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 „Enumerowanie i wybieranie urządzeń” jest bezpłatna?
Tak — pełny tekst „Enumerowanie i wybieranie urządzeń” 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 „Enumerowanie i wybieranie urządzeń”?
cudaSetDevice i konteksty dla poszczególnych 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 1 z 4.
Ile czasu zajmuje lekcja „Enumerowanie i wybieranie urządzeń”?
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
- Enumerowanie i wybieranie urządzeń
- Partycjonowanie pracy między GPU
- Dostęp peer-to-peer do pamięci
- Wiele GPU z NCCL