কী পার্থক্য - মেশিন নির্ভর বনাম মেশিন স্বাধীন কোড অপ্টিমাইজেশান
কম্পিউটার প্রোগ্রামগুলি হার্ডওয়্যারকে দেওয়া নির্দেশাবলীর সেট, কাজগুলি সম্পাদন করার জন্য। এই প্রোগ্রামগুলি বেশিরভাগ উচ্চ-স্তরের ভাষায় লেখা হয় এবং কম্পিউটার সেই ভাষা বোঝে না। অতএব, সেই নির্দেশাবলীকে মেশিন কোড বা টার্গেট কোডে রূপান্তর করতে একটি কম্পাইলার ব্যবহার করা হয়। টার্গেট কোড তৈরি করতে এটি বেশ কয়েকটি পর্যায় অতিক্রম করে। কোড অপ্টিমাইজেশান তাদের মধ্যে একটি। দুটি অপ্টিমাইজেশান কৌশল রয়েছে যেমন, মেশিন নির্ভর এবং মেশিন স্বাধীন কোড অপ্টিমাইজেশান। মেশিন নির্ভরশীল এবং মেশিন স্বাধীন কোড অপ্টিমাইজেশানের মধ্যে মূল পার্থক্য হল যে মেশিন নির্ভরশীল অপ্টিমাইজেশান অবজেক্ট কোডে প্রয়োগ করা হয় যখন মেশিন স্বাধীন কোড অপ্টিমাইজেশন মধ্যবর্তী কোডে প্রয়োগ করা হয়।
মেশিন ডিপেন্ডেন্ট কোড অপ্টিমাইজেশান কি?
সোর্স কোডটিকে অবজেক্ট কোড বা টার্গেট কোডে রূপান্তর করার সময়, কম্পাইলারটি বেশ কয়েকটি ধাপের মধ্য দিয়ে যায়। প্রথমত, সোর্স কোড লেক্সিকাল বিশ্লেষককে দেওয়া হয় যা টোকেন তৈরি করে। তারপরে, আউটপুটটি সিনট্যাক্স বিশ্লেষককে দেওয়া হয় যা জেনারেট করা টোকেনগুলি যৌক্তিক ক্রমে আছে কিনা তা তদন্ত করে। যে আউটপুট শব্দার্থিক বিশ্লেষক দেওয়া হয়. অনুমান করুন যে p=q + r হিসাবে একটি কোডের টুকরো আছে;
এখানে, p, q পূর্ণসংখ্যা, কিন্তু r হল একটি ফ্লোট। শব্দার্থিক বিশ্লেষক ব্যবহার করে, c পূর্ণসংখ্যা ভেরিয়েবলটিকে একটি ফ্লোটে রূপান্তরিত করা হয়। অতএব, এটি শব্দার্থগত বিশ্লেষণ করে। শব্দার্থিক বিশ্লেষকের আউটপুট ইন্টারমিডিয়েট কোড জেনারেটরে যায়। এটি একটি মধ্যবর্তী কোড প্রদান করে যা তারপর কোড অপ্টিমাইজারে যায়। কোড অপ্টিমাইজেশান হল প্রকৃত সোর্স কোডের অর্থ পরিবর্তন না করে অ-প্রয়োজনীয় প্রোগ্রাম বিবৃতিগুলিকে নির্মূল করার প্রক্রিয়া। এটি একটি বাধ্যতামূলক অপ্টিমাইজ নয় কিন্তু, এটি লক্ষ্য কোডের চলমান সময়কে উন্নত করতে পারে।কোড অপ্টিমাইজারের আউটপুট কোড জেনারেটরে দেওয়া হয়, এবং অবশেষে, টার্গেট কোড তৈরি করা হয়।
চিত্র 01: কম্পাইলারের পর্যায়
মেশিন নির্ভর কোড অপ্টিমাইজেশানে, অপ্টিমাইজেশান সোর্স কোডে প্রয়োগ করা হয়। পর্যাপ্ত পরিমাণ সম্পদ বরাদ্দ করা এই অপ্টিমাইজেশানে প্রোগ্রামের কার্য সম্পাদনকে উন্নত করতে পারে৷
মেশিন স্বাধীন কোড অপ্টিমাইজেশান কি?
যখন ইন্টারমিডিয়েট কোডে অপ্টিমাইজেশন করা হয়, তখন একে মেশিন স্বাধীন কোড অপ্টিমাইজেশন বলা হয়। মেশিন স্বাধীন কোড অপ্টিমাইজেশান অর্জনের জন্য বিভিন্ন কৌশল আছে. নিম্নলিখিত উদাহরণগুলি ব্যবহার করে সেগুলি বর্ণনা করা হয়েছে৷
নিচের কোডের লাইন পড়ুন।
এর জন্য (j=0; j<10; j ++) {
b=x+2;
a[j]=5j;
}
উপরের কোড অনুসারে, প্রতিটি পুনরাবৃত্তিতে b=x+2 বারবার গণনা করা হয়। একবার b গণনা করা হলে, এটি পরিবর্তন হয় না। সুতরাং, এই লাইনটি লুপের বাইরে নিম্নরূপ স্থাপন করা যেতে পারে।
b=x+2;
এর জন্য (j=0; j< 10; j++)
{a[j]=5j;
}
এটিকে কোড মুভমেন্ট বলা হয়।
নিচের কোডের লাইন পড়ুন।
j=5;
যদি (j==10) {
a=b+20;
}
উপরের কোড অনুযায়ী, 'if block' কখনই এক্সিকিউট হবে না কারণ j মান কখনই 10 এর সমান হবে না। এটি ইতিমধ্যেই 5 মান থেকে শুরু করা হয়েছে। তাই, এই ইফ ব্লক অপসারণ করা যেতে পারে। এই কৌশলটি মৃত কোড নির্মূল।
আরেকটি পদ্ধতি হল শক্তি হ্রাস। গুণের মতো পাটিগণিত ক্রিয়াকলাপের জন্য আরও মেমরি, সময় এবং CPU চক্রের প্রয়োজন হয়। এই ব্যয়বহুল এক্সপ্রেশনগুলিকে সস্তা এক্সপ্রেশন দ্বারা প্রতিস্থাপিত করা যেতে পারে যেমন b=a2; অথবা যোগ দ্বারা প্রতিস্থাপিত হতে পারে, b=a + a;
নীচের কোডটি পড়ুন।
এর জন্য (j=1; j <=5; j ++) {
মান=j5;
}
গুণের পরিবর্তে, কোডটি নিম্নরূপ পরিবর্তন করা যেতে পারে।
int temp=5;
এর জন্য (j=1; j<=5; j++) {
temp=temp + 5;
মান=তাপমাত্রা;
}
রানটাইমে ধ্রুবক অভিব্যক্তি মূল্যায়ন করা সম্ভব। একে ধ্রুবক ভাঁজ বলা হয়। সেখানে বলা যেতে পারে যেমন b[j+1]=c [j+1];
পরিবর্তে, এটি নিম্নরূপ পরিবর্তন করা যেতে পারে।
n=j +1;
b[n]=c[n];
নিম্নলিখিতভাবে লুপ থাকতে পারে।
এর জন্য (j=0; j<5; j++) {
printf(“a\n”);
}
এর জন্য (j=0; j <5; j++) {
printf(“b\n”);
}
a এবং b মুদ্রণ, উভয়ের পুনরাবৃত্তির সংখ্যা একই। উভয়কে নিম্নরূপ লুপের জন্য একের সাথে একত্রিত করা যেতে পারে।
এর জন্য (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
আরেকটি গুরুত্বপূর্ণ কৌশল হল সাধারণ সাব এক্সপ্রেশন নির্মূল। এটি গণনা করতে একটি একক চলক দিয়ে অভিন্ন অভিব্যক্তি প্রতিস্থাপন করা হয়। নিচের কোডটি পড়ুন।
a=bc + k;
d=bc + m;
এই কোডটি নিম্নরূপ রূপান্তরিত করা যেতে পারে।
temp=bc;
a=temp + k;
d=তাপমাত্রা + মি;
বার বার bc গণনা করার প্রয়োজন নেই। গুণিত মান একটি ভেরিয়েবলে সংরক্ষণ করা যেতে পারে এবং পুনরায় ব্যবহার করা যেতে পারে।
মেশিন ডিপেন্ডেন্ট এবং মেশিন ইনডিপেনডেন্ট কোড অপ্টিমাইজেশনের মধ্যে মিল কী?
এই দুটিই কোড অপ্টিমাইজেশনের অন্তর্গত
মেশিন ডিপেন্ডেন্ট এবং মেশিন ইনডিপেনডেন্ট কোড অপ্টিমাইজেশনের মধ্যে পার্থক্য কী?
মেশিন নির্ভর বনাম মেশিন স্বাধীন কোড অপ্টিমাইজেশান |
|
মেশিন নির্ভর কোড অপ্টিমাইজেশান অবজেক্ট কোডে প্রয়োগ করা হয়৷ | মেশিন-স্বাধীন কোড অপ্টিমাইজেশন মধ্যবর্তী কোডে প্রয়োগ করা হয়। |
হার্ডওয়্যারের সাথে জড়িত | |
মেশিন নির্ভর অপ্টিমাইজেশানে CPU রেজিস্টার এবং পরম মেমরি রেফারেন্স জড়িত। | মেশিন স্বাধীন কোড অপ্টিমাইজেশানে CPU রেজিস্টার বা পরম মেমরি রেফারেন্স জড়িত নয়। |
সারাংশ – মেশিন নির্ভর বনাম মেশিন স্বাধীন কোড অপ্টিমাইজেশান
কোড অপ্টিমাইজেশানে দুটি অপ্টিমাইজেশান কৌশল রয়েছে যথা, মেশিন নির্ভর এবং মেশিন স্বাধীন কোড অপ্টিমাইজেশান। মেশিন নির্ভরশীল এবং মেশিন স্বাধীন কোড অপ্টিমাইজেশানের মধ্যে পার্থক্য হল যে মেশিন নির্ভরশীল অপ্টিমাইজেশান অবজেক্ট কোডে প্রয়োগ করা হয় যেখানে, মেশিন স্বাধীন কোড অপ্টিমাইজেশান মধ্যবর্তী কোডে প্রয়োগ করা হয়।
মেশিন ডিপেন্ডেন্ট বনাম মেশিন ইন্ডিপেনডেন্ট কোড অপ্টিমাইজেশনের পিডিএফ সংস্করণ ডাউনলোড করুন
আপনি এই নিবন্ধটির PDF সংস্করণ ডাউনলোড করতে পারেন এবং উদ্ধৃতি নোট অনুসারে অফলাইন উদ্দেশ্যে এটি ব্যবহার করতে পারেন। দয়া করে এখানে পিডিএফ সংস্করণ ডাউনলোড করুন মেশিন নির্ভরশীল এবং মেশিন স্বাধীন কোড অপ্টিমাইজেশানের মধ্যে পার্থক্য