Rust tungi tuzilmalari kompilyatsiyani parallellashtirish qobiliyatini kengaytirdi

Rust kompilyatorining frontendi, tahlil qilish, turni tekshirish va qarz tahlili kabi vazifalarni bajaradi, endi parallel bajarishni qo'llab-quvvatlaydi, bu esa kompilyatsiya vaqtini sezilarli darajada qisqartiradi. Parallelizatsiya allaqachon Rustning tungi versiyalarida mavjud va uni "-Z threads=8" opsiyasi yordamida yoqish mumkin. Ushbu xususiyat 2024-yilda barqaror filialga kiritilishi rejalashtirilgan.

Rustda kompilyatsiya vaqtini qisqartirish bo'yicha ishlar bir necha yillardan beri davom etmoqda. 2023-yilning dastlabki 10 oyi davomida kompilyatsiya vaqtlari o'rtacha 13% ga, xotiraning eng yuqori sarfi 15% ga va generatsiya qilingan fayllar hajmi 7% ga kamaydi. Bu bosqichda tezlik kompilyatorning o'ziga optimallashtirish orqali erishildi. O'shandan beri ishlab chiquvchilar kompilyatsiya vaqtidagi operatsiyalarni parallel ravishda amalga oshirish orqali samaradorlikni oshirishga o'tdilar.

Hozirgacha Rustda parallelizatsiya asosan jarayon darajasida qo'llab-quvvatlangan. Masalan, Cargo paket menejeri bir vaqtning o'zida bir nechta paketlarni kompilyatsiya qilish uchun bir nechta rustc jarayonlarini ishga tushirishi mumkin. Parallelizatsiyani qo'llab-quvvatlash kod yaratish operatsiyalarini bajaradigan orqa tomonda ham mavjud - Rust orqa tomoni kodni qismlarga bo'lib yaratishi mumkin, keyin esa LLVM ularni parallel ravishda qayta ishlashi mumkin. Hozirgacha frontend faqat bitta oqimli rejimda manba kodini qayta ishlashi mumkin edi.

Parallelizatsiyani qo'llab-quvvatlash uchun frontend Rayon kutubxonasiga ko'chirildi va sezilarli darajada qayta ishlandi. Masalan, endi ko'plab qismlar mutexlar va o'qish/yozish qulflari yordamida sinxronlashtiriladi va kod atom turlaridan foydalanadi. Ishlash sinovlari paytida yangi parallellashtiriladigan amalga oshirish bitta oqimli rejimda (-Z oqimlari=1) ishlaganda kompilyatsiyani 2% gacha sekinroq bajarishi mumkin edi, ammo bir nechta oqim bilan tezlik sezilarli darajada oshdi. Masalan, 8 ta oqimni (-Z oqimlari=8) sozlash ba'zi hollarda kompilyatsiya vaqtini 50% ga qisqartirdi.

Natija muhit sozlamalariga va kompilyatsiya qilinayotgan kodga bog'liq. Tez kompilyatsiya qilinadigan juda kichik dasturlar uchun ko'p oqimli rejimda kompilyatsiya qilish sekinroq bo'lishi mumkin. Bundan tashqari, ko'p oqimli rejimda xotira sarfi sezilarli darajada oshishi mumkin; masalan, sinovlar xotira sarfining 35% gacha oshishini kuzatdi.

Manba: opennet.ru

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster