Budowanie mnożenia macierzy krok po kroku
Od naiwnych pętli do rzeczywistego jądra.
Budowanie mnożenia macierzy krok po kroku 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.
Co oblicza Matmul
Mnożenie macierzy, czyli matmul, łączy macierz M × K z macierzą K × N, tworząc wynik M × N. To podstawa obliczeń w AI.
Zasada iloczynu skalarnego
Każda komórka wyniku jest iloczynem skalarnym: przechodzimy wzdłuż jednego wiersza A i jednej kolumny B, po drodze mnożąc i sumując wartości.
Trzy zagnieżdżone pętle
Wersja naiwna używa trzech pętli po i, j i k. Dwie zewnętrzne wybierają komórkę wyniku, a wewnętrzna sumuje iloczyny.
for i in range(M):
for j in range(N):
for k in range(K):
C[i, j] += A[i, k] * B[k, j]Każdą komórkę zaczynaj od zera
Przed rozpoczęciem akumulacji ustaw każdą komórkę wyniku na zero. W przeciwnym razie stare lub przypadkowe wartości zanieczyszczą sumę.
C[i, j] = 0.0Akumuluj sumę
Wewnętrzna pętla k utrzymuje bieżący akumulator. Sumowanie do zmiennej lokalnej jest często szybsze niż odwoływanie się do C przy każdym kroku.
var acc: Float32 = 0.0
for k in range(K):
acc += A[i, k] * B[k, j]
C[i, j] = accUżyj fn dla większej szybkości
Zapisz kernel za pomocą fn i typowanych argumentów. Ścisłe typy pozwalają Mojo kompilować wydajny kod maszynowy bez narzutu dynamicznego.
fn matmul(A: Matrix, B: Matrix, C: Matrix):
passDlaczego wersja naiwna jest wolna
Podstawowa potrójna pętla wykonuje poprawne obliczenia, ale odczytuje B kolumnami, przeskakując po pamięci. Słaba lokalność marnuje pamięć podręczną i czas.
Kolejność pętli ma znaczenie
Zmiana kolejności na i, k, j sprawia, że wewnętrzna pętla przechodzi po pamięci w uporządkowany sposób. Lepsze wzorce dostępu mogą znacznie przyspieszyć matmul.
for i in range(M):
for k in range(K):
for j in range(N):
C[i, j] += A[i, k] * B[k, j]Wewnętrzna pętla jest celem optymalizacji
Niemal cały czas wykonania przypada na najbardziej wewnętrzną pętlę. To właśnie w tej gorącej pętli wewnętrznej wektoryzacja i strojenie przynoszą korzyści.
Najpierw poprawność
Najpierw doprowadź prostą wersję do poprawnego działania i zapisz jej wynik. Stanie się on odniesieniem, z którym porównasz każdy szybszy kernel.
Droga do rzeczywistego kernela
W kolejnych krokach dodasz SIMD, kafelkowanie i równoległość. Każdy krok zachowuje ten sam wynik, ale zwiększa przepustowość, przybliżając ją do maksymalnej szybkości sprzętu.
Szybkie sprawdzenie
Dlaczego podręcznikowe matmul z potrójną pętlą często działa wolno w praktyce?
Podsumowanie
Matmul sumuje iloczyn skalarny dla każdej komórki wyniku za pomocą trzech pętli; zaczynaj komórki od zera, akumuluj lokalnie i zwracaj uwagę na kolejność pętli ze względu na pamięć podręczną. 🔢
Ucz się Mojo dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Budowanie mnożenia macierzy krok po kroku” jest bezpłatna?
Tak — pełny tekst „Budowanie mnożenia macierzy krok po kroku” 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 „Budowanie mnożenia macierzy krok po kroku”?
Od naiwnych pętli do rzeczywistego jądra. Ć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 „Budowanie mnożenia macierzy krok po kroku”?
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
- Modelowanie tensora w Mojo
- Budowanie mnożenia macierzy krok po kroku
- Optymalizacja iloczynu skalarnego
- Weryfikowanie poprawności numerycznej