Wektoryzowanie pętli
Przekształć pętlę skalarną w operacje wektorowe.
Wektoryzowanie pętli to bezpłatna lekcja Mojo Academy na CoddyKit. To lekcja 4 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.
Pętla skalarna
Zwykła pętla przetwarza jeden element w każdym kroku. Jest przejrzysta, ale pozostawia pasma wektorowe procesora w większości niewykorzystane.
for i in range(n):
out[i] = a[i] + b[i]Idea wektoryzacji
Wektoryzacja oznacza, że każdy krok pętli obsługuje cały pakiet elementów zamiast jednego. W każdej iteracji wykonuje się więcej pracy.
Wczytaj fragment
Zamiast jednej wartości wczytuje się kilka naraz do wektora SIMD. Pojedyncza operacja load pobiera fragment danych.
var chunk = a.load[width=4](i)Oblicz cały fragment
Gdy oba fragmenty mają postać SIMD, dodaj je w jednym kroku element po elemencie. Obliczenie obejmuje każde pasmo jednocześnie.
var sum = a.load[width=4](i) + b.load[width=4](i)Zapisz wynik
Zapisz cały wynik SIMD jednym ruchem za pomocą operacji wektorowej store. Jeden zapis obejmuje wszystkie obliczone pasma.
out.store[width=4](i, sum)Wykonuj kroki o szerokości wektora
Wektoryzowana pętla przesuwa się o szerokość wektora, a nie o jeden element. Każde przejście obejmuje cały pakiet elementów.
for i in range(0, n, 4):
passPozwól Mojo wykonać pracę
Pomocnicza funkcja Mojo vectorize uruchamia domknięcie dla kolejnych fragmentów zakresu i zajmuje się za Ciebie obsługą szczegółów.
from algorithm import vectorizeDomknięcie vectorize
Należy napisać małą parametryzowaną funkcję, która przetwarza jeden fragment. Mojo wywołuje ją z odpowiednią szerokością podczas przechodzenia przez range.
fn work[w: Int](i: Int):
out.store[width=w](i, a.load[width=w](i) + b.load[width=w](i))Uruchom vectorize
Wywołaj vectorize, przekazując funkcję obsługującą fragment, szerokość oraz całkowity rozmiar. Pętla i końcówka zostaną obsłużone automatycznie.
vectorize[work, 4](n)Ten sam wynik, znacznie szybciej
Wektoryzowana pętla zwraca identyczny wynik jak pętla skalarna, ale przetwarza dane dużymi krokami, więc kończy działanie szybciej.
Wykonaj pomiar, aby to potwierdzić
Zawsze zmierz czas obu wersji. Wektoryzacja zwykle daje dużą poprawę, ale dopiero benchmark potwierdzi zysk dla rzeczywistych danych.
Szybkie sprawdzenie
Zastępujesz pętlę przetwarzającą jeden element w każdym kroku operacjami SIMD load i store. O ile powinna przesuwać się pętla?
Podsumowanie
Wektoryzacja wczytuje i zapisuje całe fragmenty, wykonuje kroki o szerokości wektora, a funkcji vectorize pozostawia przechodzenie po zakresie i obsługę końcówki, zapewniając ten sam wynik znacznie szybciej. 🚀
Często zadawane pytania
Czy lekcja „Wektoryzowanie pętli” jest bezpłatna?
Tak — pełny tekst „Wektoryzowanie pętli” 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 „Wektoryzowanie pętli”?
Przekształć pętlę skalarną w operacje wektorowe. Ć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 4 z 4.
Ile czasu zajmuje lekcja „Wektoryzowanie pętli”?
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
- Poznaj typ SIMD
- Arytmetyka SIMD element po elemencie
- Dobór szerokości SIMD
- Wektoryzowanie pętli