0Pricing
Mojo Academy · Lekcja

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):
    pass

Pozwó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 vectorize

Domknię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

  1. Poznaj typ SIMD
  2. Arytmetyka SIMD element po elemencie
  3. Dobór szerokości SIMD
  4. Wektoryzowanie pętli
← Powrót do Mojo Academy