Ottimizzare il prodotto scalare
Vettorializzi e srotoli il prodotto scalare.
Ottimizzare il prodotto scalare è una lezione Mojo Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Mojo Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Mojo Academy include 4 lezioni in totale.
Il nucleo del prodotto scalare
Il prodotto interno moltiplica due sequenze elemento per elemento e somma i risultati. Accelerarlo significa accelerare l'intero matmul.
var acc: Float32 = 0.0
for k in range(K):
acc += a[k] * b[k]Una lane alla volta è lento
Un ciclo semplice gestisce una sola coppia a ogni passaggio. Le CPU moderne possono elaborarne molte contemporaneamente, quindi il codice scalare lascia le lane inattive.
Ecco SIMD
Un valore SIMD contiene diversi numeri e applica un'unica operazione a tutti contemporaneamente, eseguendo lavoro reale in parallelo a ogni istruzione.
var v = SIMD[DType.float32, 4](1, 2, 3, 4)Caricate un blocco alla volta
Invece di un singolo float, caricate in un'unica operazione una porzione di ogni array ampia quanto SIMD, pronta per i calcoli vettoriali.
var va = a.load[width=4](k)
var vb = b.load[width=4](k)Moltiplicate vettori interi
Moltiplicare due valori SIMD produce in un solo passaggio un vettore di prodotti. Il calcolo element-wise avviene contemporaneamente su tutte le lane.
var prod = va * vb # 4 products at onceAccumulo in un vettore
Mantenete un accumulatore SIMD e aggiungetevi ogni vettore di prodotti. La somma finale viene rimandata alla fine del ciclo.
var acc = SIMD[DType.float32, 4](0)
acc += va * vbAvanzate della larghezza
Ora il ciclo avanza della larghezza SIMD, non di uno. Con quattro lane, le iterazioni sono quattro volte meno numerose.
for k in range(0, K, 4):
acc += a.load[width=4](k) * b.load[width=4](k)Riducete alla fine
Dopo il ciclo, comprimete l'accumulatore delle lane in un unico numero con una reduce orizzontale, ottenendo il prodotto scalare finale.
var total = acc.reduce_add()Srotolamento del ciclo
Lo srotolamento elabora diverse larghezze a ogni iterazione, riducendo l'overhead del ciclo ed esponendo più lavoro indipendente alla CPU.
Gestite il resto
Se K non è un multiplo della larghezza, rimangono alcuni elementi. Un piccolo ciclo di coda li completa uno alla volta.
for k in range(K - K % 4, K):
total += a[k] * b[k]Lasciate che Mojo vi aiuti
Mojo offre l'helper vectorize per applicare un corpo parametrizzato sulla larghezza a un intervallo, gestendo al posto vostro l'avanzamento e la coda.
Controllo rapido
Dopo un ciclo di prodotto scalare con larghezza SIMD, perché chiamate reduce_add alla fine?
Riepilogo
Vettorizzate il prodotto interno caricando blocchi SIMD, moltiplicando le lane, accumulando e infine riducendo; srotolate il ciclo e gestite la coda. ⚡
Impara Mojo con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Ottimizzare il prodotto scalare» è gratuita?
Sì — il testo completo di «Ottimizzare il prodotto scalare» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Mojo Academy, passa a CoddyKit PRO. Il corso Mojo Academy include 4 lezioni in totale.
Cosa imparerò in «Ottimizzare il prodotto scalare»?
Vettorializzi e srotoli il prodotto scalare. Eserciti Mojo Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Mojo Academy?
Non è richiesta alcuna esperienza precedente. Mojo Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Ottimizzare il prodotto scalare»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Mojo Academy?
Sì. Ogni lezione Mojo Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Modellare un tensore in Mojo
- Costruire una matmul passo dopo passo
- Ottimizzare il prodotto scalare
- Verificare la correttezza numerica