0Pricing
CUDA Academy · Lekcja

Partycjonowanie pracy między GPU

Strategie dekompozycji dziedziny

Partycjonowanie pracy między GPU 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.

Wiele GPU, jedno zadanie

Dwa GPU mogą ukończyć zadanie mniej więcej dwa razy szybciej, ale tylko wtedy, gdy praca zostanie podzielona. Sztuka polega na partitioning: określeniu, który GPU obsłuży daną część.

Dekompozycja dziedziny

Klasyczna strategia polega na podzieleniu danych, a nie kodu. W ramach domain decomposition każdy GPU otrzymuje własny fragment tablicy lub siatki do przetworzenia.

Dzielenie tablicy na fragmenty

W przypadku tablicy jednowymiarowej wystarczy podzielić jej długość. Pierwszy chunk elementów należy przydzielić GPU 0, następny GPU 1 i tak dalej.

int chunk = n / count;

Obliczanie przesunięcia

Każdy GPU potrzebuje początku swojego fragmentu. offset dla urządzenia d to po prostu d pomnożone przez rozmiar fragmentu — wskazuje, gdzie zaczynają się jego dane.

int offset = d * chunk;

Alokuj pamięć dla każdego urządzenia

Każdy GPU potrzebuje własnego bufora. Należy ustawić urządzenie, a następnie wywołać cudaMalloc dla miejsca przeznaczonego tylko na jego slice, zamiast na całą tablicę.

cudaSetDevice(d);
cudaMalloc(&dptr[d], chunk * sizeof(float));

Kopiuj tylko fragment

Na każdy GPU należy przesłać tylko należącą do niego część. Dane należy kopiować z host[offset] do bufora tego urządzenia, aby żadna karta nie przechowywała danych, których nie użyje.

Uruchom na każdym urządzeniu

Należy przejść w pętli po GPU, ustawić każde bieżące urządzenie i uruchomić kernel na jego fragmencie. Uruchomienia są asynchronous, więc wszystkie karty zaczynają pracę równolegle.

Zbierz wyniki

Po zakończeniu pracy kerneli należy skopiować wynik z każdego urządzenia do właściwego miejsca tablicy hosta, używając jego offset. Fragmenty ponownie utworzą jeden wynik.

Uwzględnij pozostałe elementy

Jeśli n nie dzieli się równo, ostatni GPU musi obsłużyć remainder. Należy przydzielić mu dodatkowe elementy, aby żaden element tablicy nie został pominięty.

int last = n - offset;

Uważaj na granice

Operacje stencil i operacje na sąsiadach odczytują dane po obu stronach granic fragmentów. Regiony halo muszą być współdzielone między GPU, w przeciwnym razie wyniki na brzegach będą niepoprawne.

Zrównoważ obciążenie

Jeśli jeden GPU jest szybszy, równy podział marnuje jego możliwości. Dobry load balancing przydziela wydajniejszej karcie większy fragment, aby obie zakończyły pracę w tym samym czasie.

Szybkie sprawdzenie

Proszę przypomnieć sobie standardowy sposób rozdzielania jednego dużego zbioru danych między kilka GPU.

Podsumowanie

Dane są dzielone na fragmenty, pamięć jest alokowana i dane kopiowane dla każdego urządzenia, następnie kernel jest uruchamiany na każdym z nich, a wyniki zbierane. Należy uwzględnić remainder i regiony halo. Następnie: bezpośrednie kopiowanie między GPU. ✨

Często zadawane pytania

Czy lekcja „Partycjonowanie pracy między GPU” jest bezpłatna?

Tak — pełny tekst „Partycjonowanie pracy między GPU” 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 „Partycjonowanie pracy między GPU”?

Strategie dekompozycji dziedziny Ć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 „Partycjonowanie pracy między GPU”?

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. Enumerowanie i wybieranie urządzeń
  2. Partycjonowanie pracy między GPU
  3. Dostęp peer-to-peer do pamięci
  4. Wiele GPU z NCCL
← Powrót do CUDA Academy