কম্পিউটার টিউটোরিয়াল

রুবি এবং রেলের জন্য JIT কম্পাইলার:YJIT, MJIT, এবং TenderJIT এর সাথে পারফরম্যান্স বুস্ট করুন

প্রি-এক্সিকিউশন কম্পাইলেশন থেকে একটি ভিন্ন পদ্ধতি ব্যবহার করে রানটাইমে একটি প্রোগ্রাম কম্পাইল করা হয়। এই প্রক্রিয়াটি জাস্ট-ইন-টাইম সংকলন বা গতিশীল অনুবাদ হিসাবে পরিচিত।

এই পোস্টে, আমরা উপলব্ধ কিছু বিকল্পগুলি (YJIT, MJIT, এবং TenderJIT) দেখার আগে এবং কীভাবে সেগুলি ইনস্টল করতে হয় তা দেখার আগে কেন JIT সংকলন আপনার Ruby on Rails অ্যাপের জন্য একটি ভাল পছন্দ হতে পারে তা দেখব৷

কিন্তু প্রথম:কিভাবে JIT সংকলন কাজ করে?

কিভাবে একটি JIT কম্পাইলার কাজ করে

জাস্ট-ইন-টাইম সংকলন হল কম্পিউটার কোড চালানোর একটি পদ্ধতি যা একটি প্রোগ্রাম চালানোর সময় সংকলনের প্রয়োজন হয়।

এটি সোর্স কোড অনুবাদ করতে পারে, তবে এটি প্রায়শই বাইটকোডকে মেশিন কোডে রূপান্তর করার মাধ্যমে করা হয়, যা সরাসরি চালানো হয়৷

কোডটি কার্যকর করা হচ্ছে প্রায়শই একটি JIT কম্পাইলার ব্যবহার করে একটি সিস্টেম দ্বারা ক্রমাগত বিশ্লেষণ করা হয়। এটি কোডের বিভাগগুলি সনাক্ত করে যেখানে সংকলন বা পুনঃসংকলনের সুবিধা (গতির পরিপ্রেক্ষিতে) খরচের চেয়ে বেশি।

রুবির জন্য JIT সংকলনের সুবিধাগুলি

JIT সংকলন প্রোগ্রামগুলিকে মেশিন কোডে রূপান্তর করার জন্য দুটি প্রচলিত পদ্ধতির কিছু সুবিধা (এবং ত্রুটিগুলি) একত্রিত করে:ব্যাখ্যা এবং আগাম-অব-টাইম সংকলন (AOT)৷

মোটামুটিভাবে বলতে গেলে, এটি জেনারেটেড কোডের গতির সাথে ব্যাখ্যার নমনীয়তা এবং সংকলন এবং লিঙ্ক করার অতিরিক্ত ওভারহেড (শুধু ব্যাখ্যা নয়) একত্রিত করে।

JIT কম্পাইলেশন হল এক ধরনের ডাইনামিক কম্পাইলেশন যা অ্যাডাপ্টিভ অপ্টিমাইজেশান কৌশলগুলিকে সক্ষম করে, যার মধ্যে ডায়নামিক রিকম্পাইলেশন এবং স্পিড-আপগুলি নির্দিষ্ট মাইক্রোআর্কিটেকচারের জন্য তৈরি। রানটাইম সিস্টেমের দেরী-বাউন্ড ডেটা টাইপগুলি পরিচালনা করার এবং সুরক্ষা গ্যারান্টি আরোপ করার ক্ষমতার কারণে, রুবির মতো গতিশীল প্রোগ্রামিং ভাষাগুলি ব্যাখ্যা এবং জেআইটি সংকলনের জন্য বিশেষভাবে উপযুক্ত৷

একটি অপ্টিমাইজিং কম্পাইলার যেমন GCC আরও দক্ষতার সাথে নির্দেশাবলী অপ্টিমাইজ করতে পারে - একটি নিবন্ধন-ভিত্তিক আর্কিটেকচার গ্রহণ করার একটি উল্লেখযোগ্য সুবিধা। কম্পাইলাররা রেজিস্টার-ভিত্তিক আর্কিটেকচারের সাথে মধ্যবর্তী প্রতিনিধিত্বে কাজ করে।

একবার আপনার নির্দেশাবলী সংকলনের সময় একটি মধ্যবর্তী প্রতিনিধিত্বে পৌঁছে গেলে, GCC আপনার নির্দেশাবলীর CPU-এর কার্যকরী গতি বাড়ানোর জন্য অতিরিক্ত পাস করে।

রুবির জন্য JIT কম্পাইলার:YJIT, MJIT, এবং TenderJIT

এখন আসুন রুবি - YJIT, MJIT, এবং TenderJIT - এর জন্য উপলব্ধ বিভিন্ন JIT কম্পাইলারগুলি অন্বেষণ করি - এবং আপনি কীভাবে সেগুলি সেট আপ করতে পারেন৷

রুবির জন্য MJIT (পদ্ধতি-ভিত্তিক জাস্ট-ইন-টাইম কম্পাইলার)

ভ্লাদিমির মাকারভ এমজেআইটি প্রয়োগ করেন, এবং এটি সি ভাষার উপর ভিত্তি করে রুবিতে প্রয়োগ করা প্রথম কম্পাইলার পদ্ধতি। এটি রুবি 2.6 এর সাথে কাজ করে, YARV নির্দেশাবলী ব্যবহার করে এবং প্রায়ই বাইনারি কোডে ব্যবহৃত নির্দেশাবলী সংকলন করে।

ইনপুট/আউটপুট-বাউন্ড নয় এমন প্রোগ্রামগুলির জন্য, MJIT কর্মক্ষমতা বাড়ায়।

YJIT পারফরম্যান্সের দিক থেকে এই আসল সি-ভিত্তিক কম্পাইলারের চেয়ে ভাল। রুবি 3 এর জেআইটি হল সবচেয়ে দ্রুততম জেআইটি যা এমআরআই হয়েছে, এটি এমজেআইটি-এর চমৎকার কাজের দ্বারা সম্ভব হয়েছে৷

কিভাবে MJIT ব্যবহার করবেন

MJIT ব্যবহার করতে, আপনি রুবি 2.6-এ এবং --jit দিয়ে JIT সক্ষম করতে পারেন বিকল্প।

 

আপনি যদি এই অংশটি এড়িয়ে যান, MJIT একটি ত্রুটি দেখাবে৷

 

রুবি 2.6-এ অন্তর্ভুক্ত JIT-নির্দিষ্ট সেটিংসের একটি সংগ্রহ আমাদের বুঝতে সাহায্য করে যে এটি কীভাবে কাজ করে। ruby --help চালান এই বিকল্পগুলি দেখতে।

সংক্ষেপে, MJIT একটি ভিন্ন থ্রেডে কার্যকর করে এবং অ্যাসিঙ্ক্রোনাস। এটি একটি গণনার প্রথম পাঁচ রানের পরে ঠিক সময়ে সংকলন শুরু করবে৷

Ruby অন রেলের জন্য YJIT

YJIT নামে একটি সাম্প্রতিক JIT কম্পাইলার রুবি 3.1 এর সাথে প্রকাশিত হয়েছিল। এটি অনেক উন্নতি এবং আরও ভাল পারফরম্যান্সের প্রতিশ্রুতি দেয়৷ এখনও পরীক্ষামূলক ফলাফল সহ Shopify দ্বারা ডিজাইন করা একটি কাজ-প্রগতিমূলক প্রকল্প, এটি অবশ্যই সতর্কতার সাথে ব্যবহার করা উচিত, বিশেষ করে বড় অ্যাপ্লিকেশনগুলিতে৷

এটি মাথায় রেখে, YJIT Ruby on Rails অ্যাপ্লিকেশনের কর্মক্ষমতা বাড়ায়। YJIT বেসিক ব্লক ভার্সনিং JIT কম্পাইলার দ্বারা প্রদত্ত দ্রুত ওয়ার্ম-আপ এবং পারফরম্যান্স বর্ধিতকরণ থেকে বেশিরভাগ বাস্তব-বিশ্বের সফ্টওয়্যার উপকৃত হয়৷

একটি JIT কম্পাইলার ধীরে ধীরে YJIT প্রকল্পের অংশ হিসাবে CRuby-তে তৈরি করা হবে, অবশেষে বেশিরভাগ কোড এক্সিকিউশনের জন্য দোভাষী প্রতিস্থাপন করা হবে।

অফিসিয়াল বেঞ্চমার্ক - দেখুন 'YJIT:Building a New JIT Compiler for CRuby' - দেখান যে 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: yjit'` দেখায়, আপনাকে এটি ইনস্টল করতে হবে।

তারপর 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-তে হ্যাকিং!

র্যাপিং আপ

এই পোস্টে, আমরা রুবির জন্য তিনটি JIT কম্পাইলার - MJIT, YJIT, এবং TenderJIT — এবং কীভাবে সেগুলি সেট আপ করতে হয় তা নিয়ে দ্রুত নজর দিয়েছি। প্রতিটি বিকল্প পরীক্ষামূলক এবং এর নিজস্ব সীমাবদ্ধতা রয়েছে।

যাইহোক, YJIT এই মুহুর্তে সবচেয়ে পরিপক্ক, এবং এটির বৃদ্ধি এবং স্কেল করার সবচেয়ে বড় সম্ভাবনা রয়েছে। এটি অন্যান্য রুবি জেআইটি-এর তুলনায় আরও ভাল কার্যকারিতা প্রদর্শন করে, রুবি 3.1.0 দিয়ে তৈরি করা হয়েছিল, এবং দ্রুত CRuby-এর একটি গুরুত্বপূর্ণ অংশ হয়ে উঠছে৷

আপনি যদি রুবির জন্য নিজের কম্পাইলার তৈরি করতে চান তাহলে এই পোস্টটি দেখুন৷

শুভ কোডিং!

পি.এস. আপনি যদি রুবি ম্যাজিক পোস্টগুলি প্রেস থেকে বের হওয়ার সাথে সাথে পড়তে চান তবে আমাদের রুবি ম্যাজিক নিউজলেটারে সাবস্ক্রাইব করুন এবং একটি পোস্ট মিস করবেন না!

রুবি এবং রেলের জন্য JIT কম্পাইলার:YJIT, MJIT, এবং TenderJIT এর সাথে পারফরম্যান্স বুস্ট করুন

রেনাটা মার্কেস

আমাদের অতিথি লেখক রেনাটা একজন সফ্টওয়্যার ইঞ্জিনিয়ার এবং কম্পিউটার বিজ্ঞানী রুবি এবং জাভাস্ক্রিপ্টের উপর দৃষ্টি নিবদ্ধ করেছেন৷ তিনি ওপেন সোর্স প্রকল্পে অবদান রেখে ডেভেলপার সম্প্রদায়কে সাহায্য করা উপভোগ করেন। তার অবসর সময়ে, তিনি সিনেমা এবং টিভি শো দেখতে এবং আলোচনা করতে, বই পড়তে, গান শুনতে, ফটোগ্রাফি করতে এবং ভিডিও তৈরি করতে পছন্দ করেন৷

রেনাটা মার্কেসের সমস্ত নিবন্ধ


  1. HTML DOM ইনপুট টাইম স্টেপ প্রপার্টি

  2. C++ এ স্পাইরাল ম্যাট্রিক্স III

  3. কিভাবে recyclerview এ কার্ডভিউ ব্যবহার করবেন?

  4. মেমরি কম হলে ইমেল সতর্কতা পাঠানোর জন্য একটি শেল স্ক্রিপ্ট