Mojo Academy · Lezione

Dividere il lavoro in blocchi

Divida un intervallo per bilanciare il carico.

Lezione 2 di 413 passaggi

Dividere il lavoro in blocchi è una lezione Mojo Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Perché suddividere il lavoro

Avviare un thread per ogni elemento è inefficiente. Suddivida invece l'intervallo in pochi chunk più grandi, uno per worker.

Un chunk è una porzione

Ogni chunk è semplicemente una porzione contigua di indici, ad esempio da 0 a 99 o da 100 a 199. Ogni worker gestisce una porzione.

Scelga il numero di chunk

Una scelta comune è usare un chunk per core. Può ottenere questo numero dalla macchina con num_physical_cores.

var workers = num_physical_cores()

Calcoli la dimensione del chunk

Divida la lunghezza totale per il numero di worker per ottenere quanti elementi ciascun worker dovrebbe gestire.

var chunk = (n + workers - 1) // workers

Trovi l'inizio di un chunk

All'interno della funzione di lavoro, l'indice del chunk indica da dove iniziare. Lo moltiplichi per la dimensione del chunk.

var start = c * chunk

Limiti la fine

L'ultimo chunk potrebbe oltrepassare i dati, quindi limiti la sua fine alla lunghezza totale con min per restare nei limiti.

var end = min(start + chunk, n)

Esegua un ciclo all'interno del chunk

Ogni worker esegue un normale ciclo solo sul proprio intervallo. All'interno del chunk è sufficiente del semplice codice ordinario.

for i in range(start, end):
    out[i] = heavy(i)

Applichi parallelize ai chunk

Ora chiami parallelize con il numero di chunk, non con il numero di elementi. Ogni chiamata elabora un intero chunk.

parallelize[do_chunk](workers)

Bilanci il carico

Chunk della stessa dimensione mantengono tutti i core occupati allo stesso modo. Se un chunk è molto più grande, il relativo worker terminerà in ritardo.

Più chunk che core

Quando alcuni elementi costano più di altri, usare più chunk piccoli consente ai worker più veloci di prendere altro lavoro e restare occupati.

Regoli in base alle misurazioni

Il numero migliore di chunk dipende dai dati e dalla macchina. Provi alcune dimensioni e conservi quella preferita dal benchmark.

Verifica rapida

Suddivide un array di lunghezza n in un chunk per worker.

Riepilogo

Suddivida l'intervallo in chunk bilanciati, limiti ogni estremità con min, esegua il ciclo all'interno di un chunk e chiami parallelize sul numero di chunk per distribuire equamente il carico. 🚀

Gratis per iniziare

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 «Dividere il lavoro in blocchi» è gratuita?

Sì — il testo completo di «Dividere il lavoro in blocchi» è 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 «Dividere il lavoro in blocchi»?

Divida un intervallo per bilanciare il carico. 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 2 di 4.

Quanto tempo richiede la lezione «Dividere il lavoro in blocchi»?

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

  1. La funzione parallelize
  2. Dividere il lavoro in blocchi
  3. Combinare parallelismo e vettori
  4. Evitare le race condition
← Torna a Mojo Academy