Combinando paralelismo e vetorização
Adicione threads sobre o SIMD.
Combinando paralelismo e vetorização é uma aula grátis de Mojo Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Mojo Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Mojo Academy inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
Two Kinds of Speed
SIMD packs many values into one core's instruction. Threads spread work across cores. Stacking both gives you the most. ⚡
Outer Layer: Threads
Use parallelize on the outer level so each core owns a chunk of the data. That is the coarse split across cores.
parallelize[do_chunk](workers)Inner Layer: Vectors
Inside each chunk, use vectorize so one core chews through its slice in SIMD packs. That is the fine split per core.
from algorithm import vectorizeImport Both Helpers
Both tools live in the algorithm module, so you can bring them in together and combine them in one function.
from algorithm import parallelize, vectorizeThe Chunk Worker
Each chunk worker computes its start and end, then hands its own slice to vectorize for the SIMD sweep.
fn do_chunk(c: Int):
var start = c * chunkVectorize the Inner Range
Within the worker, call vectorize on just this chunk's length. The SIMD width sets how many lanes run at once.
vectorize[step, width](end - start)Offset Into the Data
The inner step gets a local index, so add the chunk start to reach the right spot in the full array.
fn step[w: Int](i: Int):
out.store[width=w](start + i, ...)Pick the SIMD Width
Match the vector width to your hardware lanes with simdwidthof so each core uses its registers fully.
alias width = simdwidthof[DType.float32]()Cores Times Lanes
The win multiplies: many cores, each doing many lanes per step. That product is why combined code is so fast.
Keep Chunks Independent
This stacking only works because chunks never touch each other's data. Independence keeps the two layers safe.
Measure the Combined Gain
Benchmark scalar, vector-only, and combined versions. The numbers reveal how much each layer contributes.
Quick Check
You combine threads and SIMD on the same workload.
Recap
You wrap parallelize over chunks and call vectorize inside each, offsetting by the chunk start, so cores times lanes multiply your throughput. 🚀
Perguntas Frequentes
A aula “Combinando paralelismo e vetorização” é grátis?
Sim — o texto completo de “Combinando paralelismo e vetorização” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Mojo Academy, atualize para CoddyKit PRO. O curso de Mojo Academy inclui 4 aulas no total.
O que vou aprender em “Combinando paralelismo e vetorização”?
Adicione threads sobre o SIMD. Você pratica Mojo Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Mojo Academy?
Nenhuma experiência prévia é necessária. Mojo Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Combinando paralelismo e vetorização”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Mojo Academy?
Sim. Cada aula de Mojo Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- A função parallelize
- Dividindo o trabalho em blocos
- Combinando paralelismo e vetorização
- Evitando condições de corrida