Rust ööehitustes on laienenud kompileerimise paralleelse käsitlemise võimalused.

Rusti kompilaatori frontendi, mis täidab selliseid ülesandeid nagu süntaksite analüüs, tüüpide kontroll ja laenude analüüs, toetab nüüd ka paralleelset täitmist, mis võimaldab märgatavalt vähendada kompileerimise aega. Paralleelne täitmine on juba saadaval Rusti ööversioonides ning selle aktiveerimiseks tuleb kasutada valikut „-Z threads=8”. Stabiilsesse harusse plaanitakse selle võimaluse lisamist 2024. aastal.

Tööd kompileerimise aja vähendamise nimel Rustis on käinud juba mitu aastat. 2023. aasta esimese 10 kuu jooksul vähenes kompileerimise aeg keskmiselt 13%, mälukasutus tipptasemel langes 15% ja genereeritud failide suurus vähenes 7%. Selles etapis saavutati kiirus just kompilaatori enda optimeerimiste tõttu. Seejärel asusid arendajad tööle operatsioonide kiirendamisele kompileerimise ajal nende paralleelset täitmist kasutades.

Kuni praeguseni on Rustis paralleelne töötlemine olnud peamiselt protsesside tasemel; näiteks võib paketihaldur Cargo käivitada mitu rustc protsessi, et samal ajal mitu paketti kompileerida. Paralleelsuse tugi on olemas ka tagaplaanil, mis teostab koodigeneratsiooniga seotud operatsioone — Rusti tagaplaan võib genereerida koodi viisil, mis võimaldab LLVM-il seda paralelselt töödelda. Kuid front-end suutis siiani töödeldud lähtekoodi käsitleda ainult üheastmelises režiimis.

Eespooli toetamiseks on front-end muudetud kasutama Rayon teeki ning seda on märkimisväärselt ümber töötatud. Näiteks paljusid selle osi sünkroniseeritakse nüüd mutexite ja lugemise/kirjutamise lukudega ning koodis kasutatakse aatomseid tüüpe. Jõudluse testimisel näitas uus paralleelse töötlemise rakendus, et see suutis ühes uuenduses kompileerida kuni 2% aeglasemalt, kui töötati ühes niidis (-Z threads=1), kuid kui niite on rohkem kui üks, suurenes kiirus märkimisväärselt. Näiteks, kasutades 8 niiti (-Z threads=8), suudeti mõnes olukorras kompileerimise aega vähendada 50%.

Samas sõltub tulemus tugevalt keskkonna seadetest ja kompileeritavast koodist. Väga väikeste programmide puhul, mis juba kompileeruvad kiiresti, võib mitme niidi režiimis kompileerimine olla aeglasem. Lisaks võib mitme niidi režiimis mälu tarbimine oluliselt suureneda; testides täheldati mälu tarbimise kasvu kuni 35%.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster