Nightly version में parallel frontend के ज़रिए Rust की तेज़ compilation speed
(blog.rust-lang.org)Rust compiler के parallel frontend से तेज़ compilation संभव
- Rust compiler का frontend parallel execution का उपयोग करके compilation time को काफ़ी कम कर सकता है.
- Parallel frontend एक experimental feature है, जिसे nightly compiler में
-Z threads=8option के साथ आज़माया जा सकता है. - इसे 2024 में stable compiler में जारी करने की योजना है.
Compilation time और parallelism
- Rust compilation time लंबे समय से एक लगातार चिंता का विषय रहा है, और compiler performance working group ने कई वर्षों तक compiler performance में लगातार सुधार किया है.
- 2023 के पहले 10 महीनों में compilation time औसतन 13%, memory usage 15%, और binary size 7% कम हुई.
- Compiler पहले से ही काफ़ी optimized है, इसलिए नए improvements ढूँढना मुश्किल हो गया है, और parallelism एक बड़ा लेकिन कठिन improvement क्षेत्र बना हुआ है.
मौजूदा inter-process parallelism
- Rust program compile करते समय Cargo कई rustc processes को parallel में चलाकर कई crates compile करता है.
- जब crates के बीच dependencies कम होती हैं, तो parallel execution अच्छी तरह काम करता है, लेकिन dependencies बढ़ने पर parallel execution कम हो जाता है.
मौजूदा intra-process parallelism: backend
- Compiler frontend और backend में बंटा होता है, backend code generation का काम करता है और LLVM इसे parallel में संभालता है.
- Frontend parsing, type checking आदि करता है, लेकिन इस हफ़्ते तक यह parallel execution का उपयोग नहीं कर पाता था.
नया intra-process parallelism: frontend
- Frontend अब Rayon का उपयोग करके fine-grained parallelism के साथ compilation tasks कर सकता है.
- जब parallel frontend सक्षम किया जाता है और 8 threads उपयोग करने के लिए सेट किया जाता है, तो frontend execution time में बड़ा reduction देखा जा सकता है.
समग्र संयोजन
- Rust compilation लंबे समय से Cargo के ज़रिए inter-process parallelism और backend के intra-process parallelism का लाभ लेता रहा है, और अब frontend भी intra-process parallelism का लाभ ले सकता है.
- Compiler jobserver protocol का उपयोग करके बनाए जाने वाले threads की संख्या सीमित करता है ताकि यह cores की संख्या से आगे न जाए.
उपयोग कैसे करें
- Nightly compiler parallel frontend enabled स्थिति में जारी किया गया है, लेकिन default रूप से यह single-threaded mode में चलता है.
- Users
-Z threadsoption का उपयोग करके multi-threaded mode में स्विच कर सकते हैं.
Performance impact
- Single-threaded mode में parallel frontend चलाने पर compilation time पहले की तुलना में 0% से 2% तक धीमा हो सकता है.
- Multi-threaded mode में compilation time अधिकतम 50% तक कम हो सकता है, लेकिन प्रभाव code की प्रकृति और build configuration के अनुसार अलग-अलग होगा.
Correctness
- Single-threaded mode में इसके काफ़ी reliable होने की उम्मीद है.
- Multi-threaded mode में known bugs और deadlocks हो सकते हैं, लेकिन compiler द्वारा बनाई गई binaries किसी भी frontend के उपयोग पर समान होनी चाहिए.
Feedback
- अगर parallel frontend में समस्या हो, तो "WG-compiler-parallel" label वाले issues देखें और नया issue submit किया जा सकता है.
आगे का काम
- Parallel frontend की performance सुधारने और multi-threaded mode के bugs ठीक करने पर काम जारी है.
- 2024 में
-Z threadsoption को stable करने की योजना है ताकि stable release में default रूप से multi-threaded mode में चलाया जा सके.
GN⁺ की राय
इस लेख का सबसे महत्वपूर्ण बिंदु यह है कि Rust compiler का frontend अब parallel execution को support करता है, जिससे compilation time काफ़ी घट सकता है. यह Rust developers को compilation speed improvement का बड़ा लाभ देता है और अधिक efficient development environment बनाने में मदद करेगा. Parallel frontend की शुरुआत Rust community के लिए एक रोमांचक खबर है और इसे performance improvement के लिए जारी प्रयासों का परिणाम माना जा सकता है.
1 टिप्पणियां
Hacker News राय
-Z threadsoption के इस्तेमाल को लेकर सावधानी भरा रुख.