Mojo Academy · Les

Het inwendig product optimaliseren

Vectoriseer en rol het inwendig product uit

Les 3 van 413 stappen

Het inwendig product optimaliseren is een gratis Mojo Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Mojo Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Mojo Academy bevat in totaal 4 lessen.

De kern van het inwendige product

Het inwendige product vermenigvuldigt twee reeksen element voor element en telt de resultaten op. Als je dit versnelt, versnel je de hele matrixvermenigvuldiging.

var acc: Float32 = 0.0
for k in range(K):
    acc += a[k] * b[k]

Eén baan tegelijk is traag

Een gewone lus verwerkt per stap één paar. Moderne CPU's kunnen er veel tegelijk verwerken, waardoor scalaire code banen ongebruikt laat.

SIMD doet zijn intrede

Een SIMD-waarde verpakt meerdere getallen en voert één bewerking op alle getallen tegelijk uit, zodat elke instructie echt parallel werk doet.

var v = SIMD[DType.float32, 4](1, 2, 3, 4)

Laad in één keer een blok

Laad in plaats van één float een volledige doorsnede met SIMD-breedte uit elke array in één beweging, klaar voor vectorberekeningen.

var va = a.load[width=4](k)
var vb = b.load[width=4](k)

Vermenigvuldig volledige vectoren

Het vermenigvuldigen van twee SIMD-waarden levert in één stap een vector met producten op. Het elementgewijze werk gebeurt tegelijk over alle banen.

var prod = va * vb  # 4 products at once

Tel op in een vector

Houd een SIMD-accumulator bij en tel elke productvector erbij op. Je stelt de uiteindelijke som uit tot de lus klaar is.

var acc = SIMD[DType.float32, 4](0)
acc += va * vb

Stap met de breedte

De lus gaat nu vooruit met de SIMD-breedte, niet met één. Een breedte van vier banen betekent een kwart zoveel iteraties.

for k in range(0, K, 4):
    acc += a.load[width=4](k) * b.load[width=4](k)

Reduceer aan het einde

Vouw na de lus de baan-accumulator met een horizontale reductie samen tot één getal: het uiteindelijke inwendige product.

var total = acc.reduce_add()

De lus uitrollen

Uitrollen verwerkt meerdere breedtes per iteratie, vermindert de overhead van de lus en maakt meer onafhankelijk werk zichtbaar voor de CPU.

Verwerk de rest

Als K geen veelvoud van de breedte is, blijven enkele elementen over. Een kleine restlus verwerkt ze één voor één.

for k in range(K - K % 4, K):
    total += a[k] * b[k]

Laat Mojo helpen

Mojo biedt de helper vectorize om een body met een parameter voor de breedte over een bereik toe te passen en het stappen en de rest voor je af te handelen.

Korte controle

Waarom roep je aan het einde reduce_add aan na een lus voor een inwendig product met SIMD-breedte?

Samenvatting

Vectoriseer het inwendige product door SIMD-blokken te laden, banen met elkaar te vermenigvuldigen, op te tellen en daarna te reduceren; rol de lus uit en verwerk de rest. ⚡

Gratis beginnen

Leer Mojo met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “Het inwendig product optimaliseren” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Mojo Academy, waaronder “Het inwendig product optimaliseren”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Mojo Academy bevat in totaal 4 lessen.

Wat leer ik in “Het inwendig product optimaliseren”?

Vectoriseer en rol het inwendig product uit Je oefent met Mojo Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Mojo Academy te beginnen?

Ervaring vooraf is niet nodig. Mojo Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Het inwendig product optimaliseren”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Mojo Academy?

Ja. Elke les over Mojo Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Een tensor modelleren in Mojo
  2. Een matmul stap voor stap bouwen
  3. Het inwendig product optimaliseren
  4. Numerieke correctheid verifiëren
← Terug naar Mojo Academy