0Pricing
CUDA Academy · Lekcja

Reduce, Scan i Sort w Thrust

Wysokopoziomowe prymitywy w jednym wywołaniu

Reduce, Scan i Sort w Thrust 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.

Trudne algorytmy w jednej linii

Redukcje, skany i sortowanie trudno napisać ręcznie tak, aby działały szybko. Thrust udostępnia zoptymalizowane wersje w postaci pojedynczego wywołania funkcji. 🎁

Redukcja sprowadza dane do jednej wartości

thrust::reduce łączy wszystkie elementy w jeden wynik, na przykład sumując tablicę, a całość wykonuje równolegle wewnątrz biblioteki.

int total = thrust::reduce(d.begin(), d.end());

Niestandardowe operatory redukcji

Domyślnie reduce wykonuje dodawanie, ale można przekazać wartość początkową i operator binarny, aby obliczyć iloczyn, maksimum lub dowolną inną operację łączną.

int m = thrust::reduce(d.begin(), d.end(),
  0, thrust::maximum<int>());

Skan zachowuje sumę narastającą

Skan, czyli suma prefiksowa, zwraca sumę narastającą dla każdej pozycji. Jest podstawą kompaktowania, sortowania i alokacji strumieni.

Wariant inkluzywny a ekskluzywny

inclusive_scan uwzględnia bieżący element w sumie, a exclusive_scan nie. Wybór właściwego wariantu pozwala uniknąć błędu o jeden element.

thrust::inclusive_scan(d.begin(), d.end(),
  out.begin());

Równoległość skanu nie jest oczywista

Suma prefiksowa wygląda na operację sekwencyjną, jednak Thrust wykonuje ją równolegle za pomocą sprytnego algorytmu drzewiastego, którego nie trzeba pisać samodzielnie.

Sortowanie w miejscu

thrust::sort sortuje device_vector w miejscu, korzystając z szybkiego sortowania pozycyjnego lub przez scalanie na GPU — przy dużych zbiorach danych znacznie szybciej niż sortowanie na CPU.

thrust::sort(d.begin(), d.end());

Sortowanie według klucza

sort_by_key sortuje jedną tablicę i odpowiednio przestawia drugą tablicę wartości, dzięki czemu rekordy pozostają powiązane ze swoimi kluczami.

thrust::sort_by_key(keys.begin(),
  keys.end(), values.begin());

Łączenie prymitywów

Rzeczywiste potoki łączą te operacje: transform, a następnie reduce albo sortowanie, a następnie skan. Każdy krok to jedno zoptymalizowane wywołanie, więc możesz skupić się na logice.

Połączone transform_reduce

transform_reduce odwzorowuje elementy i sumuje je w jednym przebiegu, obliczając na przykład iloczyn skalarny lub sumę kwadratów bez tymczasowej tablicy.

float ss = thrust::transform_reduce(
  d.begin(), d.end(), sq, 0.0f, thrust::plus<float>());

Pozwól bibliotece wykonać pracę

Te prymitywy są mocno zoptymalizowane przez NVIDIA. Sięgnięcie po nie w pierwszej kolejności zwykle daje lepszy wynik niż własny kernel i oszczędza wiele godzin pracy.

Szybkie sprawdzenie

Przypomnij sobie, co zwraca suma prefiksowa.

Podsumowanie

Połączyłeś dane za pomocą reduce, zbudowałeś sumy narastające za pomocą skanu, uporządkowałeś tablice za pomocą sort i połączyłeś kroki za pomocą transform_reduce. 🏁

Często zadawane pytania

Czy lekcja „Reduce, Scan i Sort w Thrust” jest bezpłatna?

Tak — pełny tekst „Reduce, Scan i Sort w Thrust” 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 „Reduce, Scan i Sort w Thrust”?

Wysokopoziomowe prymitywy w jednym wywołaniu Ć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 „Reduce, Scan i Sort w Thrust”?

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. cuBLAS GEMM jak należy
  2. Wektory i transformacje Thrust
  3. Reduce, Scan i Sort w Thrust
  4. cuDNN na potrzeby deep learningu
← Powrót do CUDA Academy