Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी और रेल्स के लिए जेआईटी कंपाइलर्स:वाईजेआईटी, एमजेआईटी और टेंडरजेआईटी के साथ प्रदर्शन को बढ़ावा दें

<पी> एक प्रोग्राम को रनटाइम पर पूर्व-निष्पादन संकलन से भिन्न विधि का उपयोग करके संकलित किया जाता है। इस प्रक्रिया को जस्ट-इन-टाइम संकलन या गतिशील अनुवाद के रूप में जाना जाता है।

<पी> इस पोस्ट में, हम उपलब्ध कुछ विकल्पों (YJIT, MJIT, और TenderJIT) को देखने से पहले देखेंगे कि JIT संकलन आपके रूबी ऑन रेल्स ऐप के लिए एक अच्छा विकल्प क्यों हो सकता है और उन्हें कैसे इंस्टॉल करें।

<पी> लेकिन पहले:JIT संकलन कैसे काम करता है?

JIT कंपाइलर कैसे काम करता है

<पी> जस्ट-इन-टाइम संकलन कंप्यूटर कोड चलाने की एक विधि है जिसमें प्रोग्राम चलाने के दौरान संकलन की आवश्यकता होती है।

<पी> इसमें स्रोत कोड का अनुवाद करना शामिल हो सकता है, लेकिन यह अक्सर बाइटकोड को मशीन कोड में परिवर्तित करके किया जाता है, जिसे बाद में सीधे चलाया जाता है।

<पी> निष्पादित किए जा रहे कोड का अक्सर JIT कंपाइलर का उपयोग करके सिस्टम द्वारा लगातार विश्लेषण किया जाता है। यह कोड के उन अनुभागों की पहचान करता है जहां संकलन या पुनर्संकलन का लाभ (गति के संदर्भ में) लागत से अधिक है।

रूबी के लिए JIT संकलन के लाभ

<पी> जेआईटी संकलन प्रोग्राम को मशीन कोड में परिवर्तित करने के दो पारंपरिक तरीकों के कुछ लाभों (और कमियों) को जोड़ता है:व्याख्या और समय से पहले संकलन (एओटी)। <पी> मोटे तौर पर, यह व्याख्या के लचीलेपन को जेनरेट किए गए कोड की गति और संकलन और लिंकिंग के अतिरिक्त ओवरहेड (सिर्फ व्याख्या नहीं) के साथ जोड़ता है।

<पी> जेआईटी संकलन एक प्रकार का गतिशील संकलन है जो अनुकूली अनुकूलन तकनीकों को सक्षम बनाता है, जिसमें गतिशील पुनर्संकलन और कुछ माइक्रोआर्किटेक्चर के अनुरूप स्पीड-अप शामिल हैं। देर से आने वाले डेटा प्रकारों को संभालने और सुरक्षा गारंटी लागू करने की रनटाइम सिस्टम की क्षमता के कारण, रूबी जैसी गतिशील प्रोग्रामिंग भाषाएं व्याख्या और जेआईटी संकलन के लिए विशेष रूप से उपयुक्त हैं।

<पी> जीसीसी जैसा अनुकूलन कंपाइलर निर्देशों को अधिक कुशलता से अनुकूलित कर सकता है - रजिस्टर-उन्मुख वास्तुकला को अपनाने का एक महत्वपूर्ण लाभ। कंपाइलर रजिस्टर-आधारित आर्किटेक्चर के साथ मध्यवर्ती प्रतिनिधित्व पर काम करते हैं।

<पी> एक बार जब आपके निर्देश संकलन के दौरान एक मध्यवर्ती प्रतिनिधित्व तक पहुंच जाते हैं, तो जीसीसी आपके निर्देशों के सीपीयू के निष्पादन को तेज करने के लिए अतिरिक्त पास करता है।

रूबी के लिए JIT कंपाइलर:YJIT, MJIT, और TenderJIT

<पी> आइए अब रूबी के लिए उपलब्ध विभिन्न JIT कंपाइलरों - YJIT, MJIT, और TenderJIT - का पता लगाएं और आप उन्हें कैसे सेट कर सकते हैं।

रूबी के लिए MJIT (विधि-आधारित जस्ट-इन-टाइम कंपाइलर)

<पी> व्लादिमीर मकारोव ने एमजेआईटी को लागू किया, और यह सी भाषा के आधार पर रूबी में लागू की गई पहली कंपाइलर पद्धति थी। यह रूबी 2.6 के साथ काम करती है, YARV निर्देशों का उपयोग करती है, और अक्सर बाइनरी कोड में उपयोग किए जाने वाले निर्देशों को संकलित करती है।

<पी> उन प्रोग्रामों के लिए जो इनपुट/आउटपुट-बाउंड नहीं हैं, एमजेआईटी प्रदर्शन को बढ़ाता है।

<पी> प्रदर्शन के मामले में YJIT इस मूल C-आधारित कंपाइलर से बेहतर है। रूबी 3 की JIT, MRI की अब तक की सबसे तेज़ JIT है, जो MJIT के उत्कृष्ट कार्य से संभव हुई है।

एमजेआईटी का उपयोग कैसे करें

<पी> एमजेआईटी का उपयोग करने के लिए, आप रूबी 2.6 में और --jit के साथ जेआईटी को सक्षम कर सकते हैं विकल्प.

 <पी> यदि आप इस भाग को छोड़ देते हैं, तो MJIT एक त्रुटि दिखाएगा।

 <पी> रूबी 2.6 में शामिल जेआईटी-विशिष्ट सेटिंग्स का एक संग्रह हमें यह समझने में मदद करता है कि यह कैसे कार्य करता है। ruby --help चलाएँ इन विकल्पों को देखने के लिए।

<पी> संक्षेप में, एमजेआईटी एक अलग थ्रेड में निष्पादित होता है और अतुल्यकालिक है। यह गणना के पहले पांच रन के बाद सही समय पर संकलन शुरू कर देगा।

रूबी ऑन रेल्स के लिए YJIT

<पी> हाल ही में YJIT नामक JIT कंपाइलर रूबी 3.1 के साथ जारी किया गया था। यह बहुत सारे सुधारों और बेहतर प्रदर्शन का वादा करता है। प्रायोगिक परिणामों के साथ Shopify द्वारा डिज़ाइन किया गया एक कार्य-प्रगति वाला प्रोजेक्ट, इसका उपयोग सावधानी के साथ किया जाना चाहिए, विशेष रूप से बड़े अनुप्रयोगों पर।

<पी> इसे ध्यान में रखते हुए, YJIT रूबी ऑन रेल्स अनुप्रयोगों के प्रदर्शन को बढ़ाता है। वास्तविक दुनिया के अधिकांश सॉफ़्टवेयर YJIT बेसिक ब्लॉक वर्जनिंग JIT कंपाइलर द्वारा प्रदान किए गए तेज़ वार्म-अप और प्रदर्शन संवर्द्धन से लाभान्वित होते हैं।

<पी> YJIT प्रोजेक्ट के हिस्से के रूप में धीरे-धीरे CRuby में एक JIT कंपाइलर बनाया जाएगा, जो अंततः अधिकांश कोड निष्पादन के लिए दुभाषिया की जगह ले लेगा।

<पी> आधिकारिक बेंचमार्क - 'YJIT:CRuby के लिए एक नया JIT कंपाइलर बनाना' देखें - दिखाते हैं कि YJIT ने डिफ़ॉल्ट CRuby दुभाषिया की तुलना में प्रदर्शन में सुधार किया है:

  • रेलबेंच पर 20%
  • लिक्विड टेम्पलेट रेंडरिंग पर 39%
  • एक्टिवरिकॉर्ड पर 37%
<पी> हालाँकि:

<पी> रेलबेंच में केवल 79% निर्देश YJIT द्वारा निष्पादित होते हैं, और बाकी डिफ़ॉल्ट दुभाषिया में चलते हैं।

<पी> स्रोत:YJIT:CRuby के लिए एक नया JIT कंपाइलर बनाना

<पी> इसका मतलब है कि YJIT के वर्तमान परिणामों को बेहतर बनाने के लिए अभी भी बहुत कुछ किया जाना बाकी है।

<पी> फिर भी, YJIT प्रत्येक बेंचमार्क पर कम से कम दुभाषिया के समान ही अच्छा प्रदर्शन करता है, यहां तक कि कठोरतम पत्थरों पर भी, और प्रत्येक बेंचमार्क के सिर्फ एक पुनरावृत्ति के बाद लगभग चरम प्रदर्शन तक पहुंच जाता है।

YJIT का उपयोग कैसे करें

<पी> ध्यान दें :YJIT वर्तमान में x86-64 प्लेटफॉर्म पर macOS और Linux तक सीमित है। इसके अलावा, जैसा कि उल्लेख किया गया है, YJIT बड़े अनुप्रयोगों के लिए अनुशंसित नहीं है (अभी तक)।

<पी> YJIT डिफ़ॉल्ट रूप से अक्षम है. यदि आप इसे सक्षम करना चाहते हैं, तो पहले --yjit निर्दिष्ट करें कमांड-लाइन विकल्प.

<पी> आपको यह जांचना होगा कि यह स्थापित है या नहीं, इसलिए ruby --enable-yjit -v चलाएँ . यदि warning: unknown argument for --enable: ygit'` दिखाता है, आपको इसे इंस्टॉल करना होगा।

<पी> फिर irb खोलें और RUBY_YJIT_ENABLE=1 सेट करें . आप बाहर निकल सकते हैं और अब, आप YJIT का उपयोग करने के लिए तैयार हैं। कमांड ruby --enable-yjit -v ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin21] जैसा कुछ वापस करना होगा

TenderJIT

<पी> मुख्यतः YJIT पर आधारित डिज़ाइन के साथ, TenderJIT रूबी के लिए एक प्रयोगात्मक JIT कंपाइलर है। TenderJIT के बारे में अलग बात यह है कि यह शुद्ध रूबी में लिखा गया है।

<पी> यह एक डेमो प्रोजेक्ट है और इसका उद्देश्य इसे एक रत्न के रूप में प्रस्तुत करना है। इस बीच, आप इसके साथ प्रयोग कर सकते हैं, लेकिन ध्यान रखें कि इस पर अभी भी काम चल रहा है। TenderJIT के लिए रूबी 3.0.2 या बाद का संस्करण आवश्यक है।

TenderJIT का उपयोग कैसे करें

<पी> TenderJIT वर्तमान में विधि संकलन स्वचालित रूप से नहीं करता है। किसी विधि को संकलित करने के लिए, आपको TenderJIT को मैन्युअल रूप से कॉन्फ़िगर करना होगा।

<पी> रिपॉजिटरी को क्लोन करें और निम्नलिखित कमांड चलाएँ:

 <पी> आपको इसे अपने कोड पर मैन्युअल रूप से सेट करना होगा:

 <पी> लक्ष्य विधि में प्रत्येक YARV निर्देश TenderJIT द्वारा पढ़ा जाता है, जो फिर इसे मशीन कोड में बदल देता है।

<पी> TenderJIT के साथ अधिक उदाहरणों के लिए, इनमें से एक वीडियो देखें:आरोन पैटरसन के साथ रूबी के लिए एक JIT कंपाइलर और TenderJIT पर हैकिंग!

समापन

<पी> इस पोस्ट में, हमने रूबी के लिए तीन जेआईटी कंपाइलरों - एमजेआईटी, वाईजेआईटी, और टेंडरजेआईटी - पर एक त्वरित नज़र डाली है और उन्हें कैसे सेट किया जाए। प्रत्येक विकल्प प्रायोगिक है और अपनी सीमाओं के साथ आता है।

<पी> हालाँकि, YJIT इस समय सबसे परिपक्व है, और इसमें बढ़ने और बड़े पैमाने पर बढ़ने की सबसे बड़ी क्षमता है। यह अन्य रूबी JITs की तुलना में बेहतर प्रदर्शन प्रदर्शित करता है, इसे रूबी 3.1.0 के साथ विकसित किया गया था, और यह तेजी से CRuby का एक महत्वपूर्ण हिस्सा बन रहा है।

<पी> यदि आप रूबी के लिए अपना स्वयं का कंपाइलर बनाना चाहते हैं तो इस पोस्ट को देखें।

<पी> हैप्पी कोडिंग!

<पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें! रूबी और रेल्स के लिए जेआईटी कंपाइलर्स:वाईजेआईटी, एमजेआईटी और टेंडरजेआईटी के साथ प्रदर्शन को बढ़ावा दें

रेनाटा मार्क्स

<पी> हमारे अतिथि लेखक रेनाटा एक सॉफ्टवेयर इंजीनियर और कंप्यूटर वैज्ञानिक हैं जो रूबी और जावास्क्रिप्ट पर केंद्रित हैं। उन्हें ओपन सोर्स प्रोजेक्ट्स में योगदान देकर डेवलपर समुदाय की मदद करने में आनंद आता है। अपने खाली समय में, वह फिल्में और टीवी शो देखना और उन पर चर्चा करना, किताबें पढ़ना, संगीत सुनना, फोटोग्राफी करना और वीडियो बनाना पसंद करती हैं।

<पी> रेनाटा मार्क्स

द्वारा सभी लेख
  1. एंड्रॉइड में प्रोग्रामेटिक रूप से वर्तमान में चल रहे एप्लिकेशन कैसे खोजें? एंड्रॉइड में प्रोग्रामेटिक रूप से वर्तमान में चल रहे एप्लिकेशन कैसे खोजें?

    यह उदाहरण दर्शाता है कि मैं एंड्रॉइड में प्रोग्रामेटिक रूप से वर्तमान में चल रहे एप्लिकेशन को कैसे ढूंढूं। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml म

  1. Matplotlib में लेबल को धुंधला किए बिना प्लॉट को बेहतर तरीके से कैसे व्यवस्थित करें? Matplotlib में लेबल को धुंधला किए बिना प्लॉट को बेहतर तरीके से कैसे व्यवस्थित करें?

    matplotlib में लेबल को धुंधला किए बिना प्लॉट को बेहतर तरीके से रास्टराइज करने के लिए, हम निम्नलिखित कदम उठा सकते हैं। कदम फिगर साइज सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग को एडजस्ट करें। एक आकृति और सबप्लॉट का एक सेट बनाएं। अक्ष 0 – वक्र के बीच के क्षेत्र को अल्फ़ा . से भरें और raster

  1. पेश है Oracle एप्लीकेशन एक्सप्रेस पेश है Oracle एप्लीकेशन एक्सप्रेस

    क्या आपका संगठन अधिक चुस्त हो सकता है, अनुप्रयोगों को तेजी से, सस्ता और अधिक कुशलता से विकसित कर सकता है? Oracle® एप्लिकेशन एक्सप्रेस (APEX) और निम्न-कोड विकास का उपयोग करने पर विचार करें—ड्रैग-एंड-ड्रॉप तत्वों का उपयोग करके एक दृश्य विकास विधि। परिचय एपेक्स आपको बदलती आवश्यकताओं के अनुकूल होने में