Die nächtlichen Builds von Rust erweitern die Möglichkeiten der parallelen Kompilierung.

Im Frontend des Rust-Compilers, der Aufgaben wie die syntaktische Analyse, Typprüfung und Borrow-Analyse ausführt, wurde die Unterstützung für parallele Ausführung implementiert, was die Kompilierzeit erheblich verkürzt. Parallelisierung ist bereits in den nächtlichen Builds von Rust verfügbar und wird mit der Option „-Z threads=8“ aktiviert. Diese Funktion soll im stabilen Branch im Jahr 2024 implementiert werden.

Die Arbeiten zur Verkürzung der Kompilierzeit in Rust laufen seit mehreren Jahren. In den ersten 10 Monaten des Jahres 2023 sank die Kompilierzeit im Durchschnitt um 13%, der Höchstspeicherkonsum reduzierte sich um 15% und die Größe der generierten Dateien verringerte sich um 7%. In dieser Phase wurde die Beschleunigung durch Optimierungen des Compilers selbst erreicht. Danach konzentrierten sich die Entwickler auf die Beschleunigung durch Parallelisierung der Operationen während des Kompilierens.

Bisher wurde das Parallelisieren in Rust hauptsächlich auf Prozessebene realisiert. Zum Beispiel kann der Paketmanager Cargo mehrere rustc-Prozesse zur gleichzeitigen Kompilierung mehrerer Pakete starten. Die Unterstützung für Parallelisierung ist auch auf der Backend-Seite vorhanden, die codegenerierende Operationen durchführt – das Rust-Backend kann Code in Teilen generieren, die später parallel von LLVM verarbeitet werden können. Der Frontend hingegen konnte den Quellcode bisher nur im einsträngigen Modus verarbeiten.

Um die Parallelisierung zu unterstützen, wurde das Frontend auf die Verwendung der Rayon-Bibliothek umgestellt und erheblich überarbeitet. Viele Teile werden nun beispielsweise mithilfe von Mutexen und Lese-/Schreibsperren synchronisiert, und im Code kommen atomare Typen zum Einsatz. Bei Leistungstests konnte die neue parallelisierte Implementierung die Kompilierung im Einzel-Thread-Modus (-Z threads=1) um bis zu 2 % langsamer durchführen. Bei mehr als einem Thread stieg die Geschwindigkeit jedoch erheblich an. Beispielsweise konnte bei der Verwendung von 8 Threads (-Z threads=8) die Kompilierzeit in bestimmten Situationen um 50 % verkürzt werden.

Das Ergebnis hängt stark von den Umgebungs- und Kompilierungseinstellungen ab. Für sehr kleine Programme, die sowieso schnell kompiliert werden, kann die Kompilierung im Mehr-Thread-Modus langsamer sein. Außerdem kann der Speicherverbrauch im Mehr-Thread-Modus erheblich steigen; in Tests wurde ein Anstieg des Speicherverbrauchs um bis zu 35 % beobachtet.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster