Optimiser le produit scalaire
Vectorisez et déroulez le produit scalaire.
Optimiser le produit scalaire est une leçon Mojo Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Mojo Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Mojo Academy comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
The Dot Product Core
The inner product multiplies two sequences element by element and adds the results. Speeding it up speeds your whole matmul.
var acc: Float32 = 0.0
for k in range(K):
acc += a[k] * b[k]One Lane at a Time Is Slow
A plain loop handles a single pair per step. Modern CPUs can do many at once, so scalar code leaves lanes idle.
Enter SIMD
A SIMD value packs several numbers and applies one operation to all of them together, doing real work in parallel per instruction.
var v = SIMD[DType.float32, 4](1, 2, 3, 4)Load a Chunk at Once
Instead of one float, load a whole SIMD-width slice of each array in a single move, ready for vector math.
var va = a.load[width=4](k)
var vb = b.load[width=4](k)Multiply Whole Vectors
Multiplying two SIMD values yields a vector of products in one step. The element-wise work happens across all lanes together.
var prod = va * vb # 4 products at onceAccumulate Into a Vector
Keep a SIMD accumulator and add each product vector into it. You delay the final sum until the loop is done.
var acc = SIMD[DType.float32, 4](0)
acc += va * vbStep by the Width
The loop now advances by the SIMD width, not by one. Four lanes wide means a quarter as many iterations.
for k in range(0, K, 4):
acc += a.load[width=4](k) * b.load[width=4](k)Reduce at the End
After the loop, collapse the lane accumulator into one number with a horizontal reduce, giving the final dot product.
var total = acc.reduce_add()Unrolling the Loop
Unrolling processes several widths per iteration, cutting loop overhead and exposing more independent work to the CPU.
Handle the Remainder
If K is not a multiple of the width, a few elements are left over. A small tail loop finishes them one at a time.
for k in range(K - K % 4, K):
total += a[k] * b[k]Let Mojo Help
Mojo offers the vectorize helper to apply a width-parameterized body across a range, handling stepping and the tail for you.
Quick Check
After a SIMD-width dot product loop, why do you call reduce_add at the end?
Recap
Vectorize the inner product by loading SIMD chunks, multiplying lanes together, accumulating, then reduce; unroll and clean up the tail. ⚡
Questions Fréquemment Posées
La leçon « Optimiser le produit scalaire » est-elle gratuite ?
Oui — le texte complet de « Optimiser le produit scalaire » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Mojo Academy, passe à CoddyKit PRO. Le cours Mojo Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Optimiser le produit scalaire » ?
Vectorisez et déroulez le produit scalaire. Tu pratiques Mojo Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Mojo Academy ?
Aucune expérience préalable n'est requise. Mojo Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Optimiser le produit scalaire » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Mojo Academy ?
Oui. Chaque leçon Mojo Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modéliser un tenseur dans Mojo
- Construire une multiplication matricielle pas à pas
- Optimiser le produit scalaire
- Vérifier la justesse numérique