Funkcja parallelize
Wykonuj iteracje pętli w wielu wątkach.
Funkcja parallelize to bezpłatna lekcja Mojo Academy na CoddyKit. To lekcja 1 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.
Jeden rdzeń to za mało
Zwykła pętla działa na jednym rdzeniu, podczas gdy pozostałe pozostają bezczynne. Przy dużym obciążeniu marnuje to większość zasobów CPU.
for i in range(n):
out[i] = heavy(i)Rozdziel pracę
Równoległość oznacza przekazanie różnych iteracji pętli różnym rdzeniom, aby wszystkie pracowały w tym samym czasie. 🧵
Poznaj parallelize
Pomocnicza funkcja Mojo parallelize uruchamia ciało pętli w wielu wątkach, więc nie trzeba ręcznie konfigurować wątków.
from algorithm import parallelizeFunkcja robocza
Należy napisać małą funkcję wykonującą pracę dla jednego indeksu. Mojo wywołuje ją wiele razy, po jednym razie na każdą iterację.
fn work(i: Int):
out[i] = heavy(i)Przekaż funkcję jako parametr
Funkcja trafia do nawiasów kwadratowych jako kompilacyjny parametr, a nie jako zwykły argument wywołania. Mojo wykonuje na jej podstawie specjalizację.
parallelize[work](n)Liczba jest ustalana w czasie działania
Liczba w nawiasach określa, ile elementów pracy należy uruchomić. Jest to zwykła wartość runtime.
parallelize[work](num_items)Pobierz liczbę rdzeni z komputera
Użyj num_physical_cores z modułu sys, aby sprawdzić, ile rzeczywistych rdzeni można wykorzystać do rozdzielenia pracy.
from sys import num_physical_coresOgranicz liczbę pracowników
Opcjonalny drugi argument określa, ilu pracowników działa jednocześnie. Najczęściej najlepiej dopasować tę liczbę do liczby rdzeni.
parallelize[work](n, num_physical_cores())Każde wywołanie jest niezależne
parallelize zakłada, że elementy pracy nie zależą od swojej kolejności. Każde wywołanie powinno działać samodzielnie.
Najlepsze do ciężkich pętli
Równoległość sprawdza się, gdy każdy element wymaga rzeczywistej pracy. W przypadku małych pętli narzut wątków może kosztować więcej, niż oszczędza.
Zmierz przyspieszenie
Zmierz czas działania pętli przed uruchomieniem równoległym i po nim. Rzeczywisty benchmark pokaże, czy dodatkowe wątki faktycznie pomogły.
Szybkie sprawdzenie
Chcesz uruchomić ciało pętli na kilku rdzeniach CPU w Mojo.
Podsumowanie
Importujesz parallelize, przekazujesz funkcję dla pojedynczego elementu jako parametr w nawiasach kwadratowych, a liczbę elementów w nawiasach, po czym dopasowujesz liczbę pracowników do liczby rdzeni, aby uzyskać rzeczywiste przyspieszenie. 🚀
Często zadawane pytania
Czy lekcja „Funkcja parallelize” jest bezpłatna?
Tak — pełny tekst „Funkcja parallelize” 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 „Funkcja parallelize”?
Wykonuj iteracje pętli w wielu wątkach. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Funkcja parallelize”?
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