Paralelismo de datos con rayon
9 pasos en 4 series de Rust.
Rayon convierte una cadena de iteradores secuencial en una paralela cambiando iter por par_iter, y el sistema de tipos verifica que eso sea realmente seguro. Esa es casi toda la idea.
Iteradores paralelos, reducciones, y luego repartir trabajo con join y scope para los casos que no son solo un map sobre una colección. Nueve pasos, y es la recompensa más inmediata de las reglas de propiedad de Rust.
Iteradores paralelos
- Iteradores paralelospar_iter es iter con un pool de hilos con robo de trabajo detrás.
- Filtrar en paralelofilter, map y collect tienen versiones paralelas que conservan el orden.
- Ordenar en paralelopar_sort divide, ordena y fusiona — vale la pena cuando el slice es grande.
Reducciones
- Reduce y foldLa reducción paralela necesita un valor identidad y una operación asociativa.
- Contar en paraleloFusionar mapas por hilo gana a pelear por un solo lock compartido.
Repartir trabajo
- rayon::joinjoin corre dos closures que pueden ir en paralelo — la base de divide y vencerás.
- Chunks en paraleloSi el trabajo por elemento es barato, agrúpalo: una tarea por chunk gana a una por elemento.
- Puentear un iterador en seriepar_bridge paraleliza cualquier iterador, incluso uno que no puede dividirse.
Bis
- par_wordcount.rsFrecuencias de palabras sobre un corpus, en serie y en paralelo, con los tiempos comparados.