2 पॉइंट द्वारा GN⁺ 2023-11-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Rust compiler के parallel frontend से तेज़ compilation संभव

  • Rust compiler का frontend parallel execution का उपयोग करके compilation time को काफ़ी कम कर सकता है.
  • Parallel frontend एक experimental feature है, जिसे nightly compiler में -Z threads=8 option के साथ आज़माया जा सकता है.
  • इसे 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 threads option का उपयोग करके 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 threads option को 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 टिप्पणियां

 
GN⁺ 2023-11-11
Hacker News राय
  • Rust compile speed में सुधार को लेकर उम्मीद
    • Rust की compile speed धीमी होना एक कमी के रूप में बताया जाता रहा है, खासकर बड़े repository पर काम करते समय यह CI/CD लागत बढ़ाने और development time में देरी का कारण बनता है. जब cache हटाना पड़ता है (जो कभी-कभी Docker bug की वजह से होता है), तब यह समस्या और ज्यादा महसूस होती है. इस प्रगति पर सकारात्मक प्रतिक्रिया.
  • Rust compile speed पर व्यक्तिगत अनुभव
    • बहुत पहले जब Rust इस्तेमाल किया था तब compile speed धीमी थी, लेकिन हाल में फिर से इस्तेमाल करने पर compile time लगभग ध्यान देने लायक नहीं रहा. हालांकि project बड़ा होने पर compile delay महसूस होने लगता है, इसलिए यह सुधार व्यक्तिगत रूप से बहुत स्वागतयोग्य खबर है.
  • Rust compile process को लेकर सवाल
    • सवाल कि क्या Rust का frontend borrow check पूरा करने के बाद ही backend काम शुरू कर सकता है. यह भी जिज्ञासा कि अगर backend को borrow check error मिल जाए तो क्या वह speculative work को छोड़ नहीं सकता.
  • Rust binary crate के compilation पर अवलोकन
    • library crate के विपरीत, binary crate अक्सर डिफ़ॉल्ट रूप से बड़े और single-structure वाले होते हैं, इसलिए compilation parallelize नहीं हो पाता और सबसे बड़ा crate serial हो जाने की प्रवृत्ति रखता है. इस समस्या पर सुधार का स्वागत है.
  • CPU core उपयोग को लेकर सवाल
    • सवाल कि compile करते समय CPU core की संख्या अपने-आप इस्तेमाल कराई जा सकती है या फिर किसी config file में एक fixed value डालनी पड़ती है, जो दूसरी मशीनों पर भी इस्तेमाल होगी.
  • multithreaded mode के bug पर चेतावनी
    • multithreaded mode में known bug और deadlock हैं, और अगर compilation अटक जाए तो संभव है कि इन्हीं में से किसी समस्या का सामना हो रहा हो. -Z threads option के इस्तेमाल को लेकर सावधानी भरा रुख.
  • Rust compile speed की मौजूदा स्थिति पर सकारात्मक मूल्यांकन
    • कुछ सालों तक Rust का इस्तेमाल न करने के बाद हाल में फिर से इस्तेमाल किया तो compile speed लगभग तुरंत जैसी लगी. ChatGPT जैसे tools की मदद से Rust की वे समस्याएँ भी आसानी से सुलझने लगीं जिन्हें पहले हल करना मुश्किल था, इसलिए मौजूदा स्थिति बहुत अच्छी लगती है.
  • Rust compilation optimization की दिशा को लेकर सवाल
    • चिंता कि Rust compilation पहले से ही file level पर काफी parallelized है, तो क्या single file compilation को तेज़ करना ऊपर के level की file parallelism से resource छीन सकता है. इस पर ठोस data न होना एक समस्या के रूप में बताया गया.
  • Rust compile speed में सुधार का स्वागत करने वाली टिप्पणी