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
- cuBLAS GEMM jak należy
- Wektory i transformacje Thrust
- Reduce, Scan i Sort w Thrust
- cuDNN na potrzeby deep learningu