Compilation plus rapide de Rust grâce à un frontend parallèle dans la version nightly
(blog.rust-lang.org)Compilation plus rapide avec le frontend parallèle du compilateur Rust
- Le frontend du compilateur Rust peut désormais réduire fortement le temps de compilation en utilisant une exécution parallèle.
- Le frontend parallèle est une fonctionnalité expérimentale, que l’on peut essayer avec le compilateur nightly via l’option
-Z threads=8. - Sa sortie dans le compilateur stable est prévue pour 2024.
Temps de compilation et parallélisme
- Le temps de compilation de Rust reste un sujet d’attention constant, et le groupe de travail sur les performances du compilateur améliore régulièrement ses performances depuis plusieurs années.
- Au cours des 10 premiers mois de 2023, le temps de compilation a diminué en moyenne de 13 %, l’utilisation mémoire de 15 % et la taille des binaires de 7 %.
- Le compilateur étant déjà fortement optimisé, il est devenu plus difficile de trouver de nouvelles améliorations, et le parallélisme reste un levier important mais complexe.
Parallélisme existant entre processus
- Lors de la compilation d’un programme Rust, Cargo exécute plusieurs processus rustc en parallèle pour compiler plusieurs crates.
- Cette exécution parallèle fonctionne bien lorsque les dépendances entre crates sont faibles, mais elle diminue à mesure que ces dépendances augmentent.
Parallélisme existant à l’intérieur d’un processus : le backend
- Le compilateur est divisé en frontend et backend, et le backend est chargé de la génération de code, que LLVM traite en parallèle.
- Le frontend effectue le parsing, le type checking, etc., mais jusqu’à cette semaine, il ne pouvait pas utiliser l’exécution parallèle.
Nouveau parallélisme à l’intérieur d’un processus : le frontend
- Le frontend peut désormais effectuer les tâches de compilation avec un parallélisme fin grâce à Rayon.
- Lorsque le frontend parallèle est activé et configuré pour utiliser 8 threads, on peut constater une nette réduction du temps d’exécution du frontend.
L’assemblage global
- La compilation Rust bénéficie depuis longtemps du parallélisme entre processus via Cargo et du parallélisme dans le backend au sein d’un processus, et elle peut désormais aussi profiter du parallélisme dans le frontend.
- Le compilateur utilise le protocole jobserver pour limiter le nombre de threads créés afin de ne pas dépasser le nombre de cœurs disponibles.
Mode d’emploi
- Le compilateur nightly est publié avec le frontend parallèle activé, mais il s’exécute par défaut en mode mono-thread.
- Les utilisateurs peuvent passer en mode multithread via l’option
-Z threads.
Impact sur les performances
- En mode mono-thread, l’exécution du frontend parallèle peut rendre la compilation de 0 % à 2 % plus lente que l’existant.
- En mode multithread, le temps de compilation peut être réduit jusqu’à 50 %, mais l’effet varie selon les caractéristiques du code et la configuration du build.
Exactitude
- En mode mono-thread, la fiabilité devrait être élevée.
- En mode multithread, il peut subsister des bugs connus et des deadlocks, et les binaires produits par le compilateur doivent rester identiques quel que soit le frontend utilisé.
Retours
- En cas de problème avec le frontend parallèle, il est possible de consulter les issues portant le label "WG-compiler-parallel" et d’en soumettre de nouvelles.
Travaux à venir
- Des travaux sont en cours pour améliorer les performances du frontend parallèle et corriger les bugs du mode multithread.
- Il est prévu de stabiliser l’option
-Z threadsafin que, dans une release stable en 2024, le mode multithread soit utilisé par défaut.
L’avis de GN⁺
Le point le plus important de cet article est que le frontend du compilateur Rust prend désormais en charge l’exécution parallèle, ce qui peut réduire fortement le temps de compilation. Cela apporte aux développeurs Rust un avantage majeur en matière de vitesse de compilation et contribue à un environnement de développement plus efficace. L’introduction du frontend parallèle est une nouvelle enthousiasmante pour la communauté Rust, et peut être vue comme le résultat d’efforts continus d’amélioration des performances.
1 commentaires
Avis Hacker News
-Z threads.