0Pricing
Mojo Academy · Lekcja

Przepisywanie ścieżki krytycznej w Mojo

Przenieś wąskie gardło za pomocą fn i SIMD.

Przepisywanie ścieżki krytycznej w Mojo to bezpłatna lekcja Mojo Academy na CoddyKit. To lekcja 2 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.

Przenieś gorącą ścieżkę

Teraz proszę wziąć powolną pętlę języka Python i odtworzyć ją w Mojo. Logika pozostaje taka sama, ale typowany, kompilowany kod zapewnia rzeczywistą wydajność. 🔧

Sięgnij po fn

Proszę zapisać jądro jako funkcję fn, a nie def. Wymagane typy pozwalają kompilatorowi wygenerować zwarty kod maszynowy dla gorącej pętli.

fn sum_squares(data: List[Float64]) -> Float64:
    var total: Float64 = 0.0
    return total

Określ typ każdej wartości

Proszę nadać każdej wartości konkretny typ. Gdy nie ma już potrzeby dynamicznego zgadywania, Mojo może optymalizować działania arytmetyczne tak jak C.

var total: Float64 = 0.0
var n: Int = len(data)

Przenieś ciało pętli

Proszę kopiować obliczenia wewnętrzne krok po kroku. Należy zachować te same operacje, aby wyniki dokładnie odpowiadały wynikom Pythona, zanim rozpocznie się optymalizację.

for i in range(len(data)):
    total += data[i] * data[i]

Najpierw sprawdź poprawność

Proszę uruchomić wersję w Mojo na tych samych danych wejściowych i porównać wyniki. Poprawność jest ważniejsza od szybkości, ponieważ szybki, lecz błędny wynik nikomu nie pomoże.

Wprowadź SIMD

Po potwierdzeniu poprawności proszę przeprowadzić wektoryzację. Wartość SIMD zawiera kilka liczb, dzięki czemu jedna instrukcja przetwarza jednocześnie wiele elementów.

alias width = 4
var acc = SIMD[DType.float64, width](0)

Przetwarzaj dane w porcjach wektorowych

Proszę przechodzić przez dane w grupach równych szerokości SIMD. Każdy przebieg obsługuje całą porcję zamiast pojedynczego elementu.

for i in range(0, n, width):
    var chunk = data.load[width](i)
    acc += chunk * chunk

Zredukuj wektor

Po zakończeniu pętli proszę za pomocą operacji reduce złożyć akumulator SIMD do jednej liczby. Operacja ta łączy wszystkie lane’y w jedną sumę.

var total = acc.reduce_add()

Obsłuż końcówkę

Jeśli długość danych nie jest wielokrotnością szerokości, pozostanie kilka elementów. Niewielka pętla końcowa doda je, dzięki czemu nic nie zostanie pominięte.

for i in range(n - (n % width), n):
    total += data[i] * data[i]

Ponownie sprawdź wynik

Proszę ponownie porównać wynik zwektoryzowanego kodu z punktem odniesienia z Pythona. Zgodne wyniki potwierdzają, że przepisanie z użyciem SIMD zachowało poprawność obliczeń.

Zmierz nowe jądro

Proszę zmierzyć jądro Mojo na tych samych danych. Nawet jednowątkowe, typowane i zwektoryzowane jądro zwykle znacznie przewyższa pętlę Pythona.

Szybkie sprawdzenie

Proszę wybrać właściwą kolejność przepisywania gorącej ścieżki w Mojo.

Podsumowanie

Przeniesiono pętlę do typowanej funkcji fn, sprawdzono poprawność, a następnie wykonano wektoryzację z użyciem SIMD i obsłużono końcówkę. Gorąca ścieżka działa teraz szybko w Mojo. 🎯

Często zadawane pytania

Czy lekcja „Przepisywanie ścieżki krytycznej w Mojo” jest bezpłatna?

Tak — pełny tekst „Przepisywanie ścieżki krytycznej w Mojo” 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 „Przepisywanie ścieżki krytycznej w Mojo”?

Przenieś wąskie gardło za pomocą fn i 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 2 z 4.

Ile czasu zajmuje lekcja „Przepisywanie ścieżki krytycznej w Mojo”?

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. Profilowanie bazowej wersji w Pythonie
  2. Przepisywanie ścieżki krytycznej w Mojo
  3. Równoleglenie i dostrajanie rdzenia
  4. Dostarczanie przyspieszonego projektu
← Powrót do Mojo Academy