Łączenie równoległości i wektorów
Dodaj wielowątkowość do SIMD.
Łączenie równoległości i wektorów to bezpłatna lekcja Mojo 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 Mojo Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Mojo Academy zawiera 4 lekcji w sumie.
Dwa rodzaje szybkości
SIMD pakuje wiele wartości w jedną instrukcję rdzenia. Wątki rozdzielają pracę między rdzenie. Połączenie obu metod daje najwięcej. ⚡
Warstwa zewnętrzna: wątki
Użyj parallelize na poziomie zewnętrznym, aby każdy rdzeń otrzymał fragment danych. To zgrubny podział między rdzeniami.
parallelize[do_chunk](workers)Warstwa wewnętrzna: wektory
Wewnątrz każdego fragmentu użyj vectorize, aby jeden rdzeń przetwarzał swój wycinek w pakietach SIMD. To dokładny podział pracy na rdzeń.
from algorithm import vectorizeZaimportuj oba narzędzia
Oba narzędzia znajdują się w module algorithm, więc można zaimportować je razem i połączyć w jednej funkcji.
from algorithm import parallelize, vectorizePracownik fragmentu
Każdy pracownik fragmentu oblicza swój początek i koniec, a następnie przekazuje własny wycinek do vectorize w celu wykonania przebiegu SIMD.
fn do_chunk(c: Int):
var start = c * chunkWektoryzuj wewnętrzny zakres
W pracowniku wywołaj vectorize tylko dla długości tego fragmentu. Szerokość SIMD określa, ile pasm działa jednocześnie.
vectorize[step, width](end - start)Przesunięcie w danych
Wewnętrzny krok otrzymuje lokalny indeks, więc dodaj początek fragmentu, aby dotrzeć do właściwego miejsca w pełnej tablicy.
fn step[w: Int](i: Int):
out.store[width=w](start + i, ...)Wybierz szerokość SIMD
Dopasuj szerokość wektora do pasm sprzętowych za pomocą simdwidthof, aby każdy rdzeń w pełni wykorzystywał swoje rejestry.
alias width = simdwidthof[DType.float32]()Rdzenie razy pasma
Zysk się mnoży: wiele rdzeni, z których każdy wykonuje wiele pasm w jednym kroku. Ten iloczyn wyjaśnia, dlaczego połączony kod jest tak szybki.
Zachowaj niezależność fragmentów
To połączenie działa tylko dlatego, że fragmenty nigdy nie dotykają danych należących do siebie nawzajem. Niezależność zapewnia bezpieczeństwo obu warstw.
Zmierz łączny zysk
Wykonaj benchmark wersji skalarnej, tylko wektorowej i połączonej. Wyniki pokażą, ile wnosi każda warstwa.
Szybkie sprawdzenie
Łączysz wątki i SIMD dla tego samego obciążenia.
Podsumowanie
Owijasz parallelize wokół fragmentów i wywołujesz vectorize wewnątrz każdego z nich, dodając początek fragmentu jako przesunięcie, dzięki czemu iloczyn liczby rdzeni i pasm zwiększa przepustowość. 🚀
Często zadawane pytania
Czy lekcja „Łączenie równoległości i wektorów” jest bezpłatna?
Tak — pełny tekst „Łączenie równoległości i wektorów” 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 Mojo Academy, przejdź na CoddyKit PRO. Kurs Mojo Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Łączenie równoległości i wektorów”?
Dodaj wielowątkowość do SIMD. Ćwiczysz Mojo 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ąć Mojo Academy?
Nie wymagamy żadnego doświadczenia. Mojo 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 „Łączenie równoległości i wektorów”?
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 Mojo Academy?
Tak. Każda lekcja Mojo 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
- Funkcja parallelize
- Dzielenie pracy na fragmenty
- Łączenie równoległości i wektorów
- Unikanie wyścigów danych