Compilación más rápida de Rust con un frontend paralelo en la versión nightly
(blog.rust-lang.org)Compilación más rápida de Rust con el frontend paralelo del compilador de Rust
- El frontend del compilador de Rust puede reducir significativamente los tiempos de compilación al usar ejecución en paralelo.
- El frontend paralelo es una función experimental y se puede probar en el compilador nightly con la opción
-Z threads=8. - Está previsto que llegue al compilador estable en 2024.
Tiempo de compilación y paralelismo
- El tiempo de compilación en Rust ha sido una preocupación constante, y el grupo de trabajo de rendimiento del compilador ha mejorado su desempeño de forma continua durante varios años.
- En los primeros 10 meses de 2023, el tiempo de compilación se redujo en promedio 13%, el uso de memoria 15% y el tamaño de los binarios 7%.
- El compilador ya está muy optimizado, por lo que se ha vuelto más difícil encontrar nuevas mejoras, y el paralelismo sigue siendo una mejora importante pero compleja.
Paralelismo existente entre procesos
- Al compilar un programa de Rust, Cargo ejecuta en paralelo varios procesos de rustc para compilar múltiples crates.
- La ejecución en paralelo funciona bien cuando hay pocas dependencias entre crates, pero disminuye a medida que aumentan las dependencias.
Paralelismo existente dentro del proceso: backend
- El compilador se divide en frontend y backend; el backend se encarga de la generación de código y LLVM la procesa en paralelo.
- El frontend realiza tareas como parsing y verificación de tipos, pero hasta esta semana no podía usar ejecución en paralelo.
Nuevo paralelismo dentro del proceso: frontend
- El frontend ahora puede realizar tareas de compilación con paralelismo de grano fino usando Rayon.
- Cuando se activa el frontend paralelo y se configura para usar 8 hilos, se puede ver una reducción importante en el tiempo de ejecución del frontend.
Integración general
- La compilación de Rust ya se beneficiaba desde hace tiempo del paralelismo entre procesos mediante Cargo y del paralelismo dentro del proceso en el backend, y ahora también puede aprovechar el paralelismo dentro del proceso en el frontend.
- El compilador usa el protocolo jobserver para limitar la cantidad de hilos creados y no superar el número de núcleos disponibles.
Cómo usarlo
- El compilador nightly se lanzó con el frontend paralelo activado, pero por defecto se ejecuta en modo de un solo hilo.
- Los usuarios pueden cambiar al modo multihilo con la opción
-Z threads.
Impacto en el rendimiento
- Ejecutar el frontend paralelo en modo de un solo hilo puede hacer que el tiempo de compilación sea entre 0% y 2% más lento que antes.
- En modo multihilo, el tiempo de compilación puede reducirse hasta en 50%, aunque el efecto varía según las características del código y la configuración de compilación.
Corrección
- En modo de un solo hilo, se espera una alta confiabilidad.
- En modo multihilo puede haber bugs conocidos y deadlocks, y los binarios generados por el compilador deben ser iguales sin importar qué frontend se use.
Retroalimentación
- Si hay problemas con el frontend paralelo, se pueden revisar los issues con la etiqueta "WG-compiler-parallel" y enviar nuevos reportes.
Trabajo futuro
- Se sigue trabajando en mejorar el rendimiento del frontend paralelo y en corregir los bugs del modo multihilo.
- El plan es estabilizar la opción
-Z threadspara que en 2024 la versión estable se ejecute por defecto en modo multihilo.
Opinión de GN⁺
Lo más importante de este artículo es que el frontend del compilador de Rust ahora admite ejecución en paralelo, lo que puede reducir significativamente los tiempos de compilación. Esto representa una gran ventaja para los desarrolladores de Rust al mejorar la velocidad de compilación y contribuir a un entorno de desarrollo más eficiente. La introducción del frontend paralelo es una noticia interesante para la comunidad de Rust y puede verse como el resultado de esfuerzos continuos por mejorar el rendimiento.
1 comentarios
Opiniones de Hacker News
-Z threads.