Het inwendig product optimaliseren
Vectoriseer en rol het inwendig product uit
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 onceTel 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 * vbStap 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. ⚡
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
- Een tensor modelleren in Mojo
- Een matmul stap voor stap bouwen
- Het inwendig product optimaliseren
- Numerieke correctheid verifiëren