Mojo Academy · Lekcja

Budowanie mnożenia macierzy krok po kroku

Od naiwnych pętli do rzeczywistego jądra.

Lekcja 2 z 413 kroki

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.0

Akumuluj 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] = acc

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

Dlaczego 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ą. 🔢

Bezpłatny start

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

  1. Modelowanie tensora w Mojo
  2. Budowanie mnożenia macierzy krok po kroku
  3. Optymalizacja iloczynu skalarnego
  4. Weryfikowanie poprawności numerycznej
← Powrót do Mojo Academy