تفاوت کلیدی – بهینه سازی کد وابسته به ماشین در مقابل بهینه سازی کد مستقل از ماشین
برنامه های رایانه ای مجموعه ای از دستورالعمل ها هستند که برای انجام وظایف به سخت افزار داده می شود. این برنامه ها بیشتر به زبان های سطح بالا نوشته می شوند و کامپیوتر آن زبان را نمی فهمد. بنابراین، یک کامپایلر برای تبدیل آن دستورالعمل ها به کد ماشین یا کد هدف استفاده می شود. برای ساخت کد هدف چندین مرحله را طی می کند. بهینه سازی کد یکی از آنهاست. دو تکنیک بهینه سازی مانند بهینه سازی کد وابسته به ماشین و بهینه سازی کد مستقل از ماشین وجود دارد. تفاوت اصلی بین بهینهسازی کد وابسته به ماشین و بهینهسازی کد مستقل این است که بهینهسازی وابسته به ماشین برای کد شی اعمال میشود در حالی که بهینهسازی کد مستقل از ماشین برای کد میانی اعمال میشود.
بهینه سازی کد وابسته به ماشین چیست؟
هنگام تبدیل کد منبع به کد شی یا کد هدف، کامپایلر چندین مرحله را طی می کند. ابتدا کد منبع به تحلیلگر Lexical داده می شود که توکن ها را تولید می کند. سپس، خروجی به تحلیلگر نحو داده میشود که بررسی میکند آیا توکنهای تولید شده در نظم منطقی هستند یا خیر. آن خروجی به تحلیلگر معنایی داده می شود. فرض کنید یک قطعه کد به صورت p=q + r; وجود دارد
در اینجا، p، q اعداد صحیح هستند، اما r یک شناور است. با استفاده از تحلیلگر معنایی، متغیر عدد صحیح c به یک شناور تبدیل می شود. بنابراین، تحلیل معنایی را انجام می دهد. خروجی تحلیلگر معنایی به مولد کد Intermediate می رود. یک کد میانی را برمی گرداند که سپس به کد بهینه ساز می رود. بهینه سازی کد فرآیند حذف عبارات غیر ضروری برنامه بدون تغییر معنای کد منبع واقعی است. این یک بهینه سازی اجباری نیست، اما می تواند زمان اجرای کد هدف را بهبود بخشد.خروجی بهینه ساز کد به کد مولد داده می شود و در نهایت کد هدف ساخته می شود.
شکل 01: فازهای کامپایلر
در بهینه سازی کد وابسته به ماشین، بهینه سازی برای کد منبع اعمال می شود. تخصیص مقدار کافی از منابع می تواند اجرای برنامه را در این بهینه سازی بهبود بخشد.
بهینه سازی کد مستقل از ماشین چیست؟
وقتی بهینهسازی روی کد میانی انجام میشود، بهینهسازی کد مستقل از ماشین نامیده میشود. تکنیک های مختلفی برای دستیابی به بهینه سازی کد مستقل از ماشین وجود دارد. آنها با استفاده از مثال های زیر توضیح داده شده اند.
خطوط زیر کد را بخوانید.
برای (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
طبق کد بالا، b=x+2 بارها و بارها در هر تکرار محاسبه می شود. وقتی b محاسبه شد، تغییری نمی کند. بنابراین، این خط را می توان در خارج از حلقه به صورت زیر قرار داد.
b=x+2;
برای (j=0; j< 10; j++)
{a[j]=5j;
}
این حرکت کد نامیده می شود.
خطوط زیر کد را بخوانید.
j=5;
if (j==10) {
a=b+20;
}
طبق کد بالا، "if block" هرگز اجرا نمی شود زیرا مقدار j هرگز برابر با 10 نخواهد بود. از قبل به مقدار 5 مقداردهی اولیه شده است. بنابراین، این بلوک if را می توان حذف کرد. این تکنیک حذف کد مرده است.
روش دیگر کاهش قدرت است. عملیات حسابی مانند ضرب به حافظه، زمان و چرخه های CPU بیشتری نیاز دارد. این عبارات گران قیمت را می توان با عبارات ارزانی مانند b=a2 جایگزین کرد. یا می تواند با جمع جایگزین شود، b=a + a;
به کد زیر مراجعه کنید.
برای (j=1; j <=5; j ++) {
value=j5;
}
به جای ضرب، کد را می توان به صورت زیر تغییر داد.
int temp=5;
برای (j=1; j<=5; j++) {
دما=دما + 5;
value=temp;
}
می توان عباراتی را که در زمان اجرا ثابت هستند ارزیابی کرد. به آن تا شدن ثابت می گویند. می توان چنین بیان کرد: 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، هر دو تعداد تکرار یکسانی دارند. هر دو را می توان با یک حلقه for به صورت زیر ترکیب کرد.
برای (j=0; j <5; j++) {
printf("a \n");
printf("b\n");
}
یکی دیگر از تکنیک های مهم حذف عبارت زیر مشترک است. این است که برای انجام محاسبات، عبارات یکسان را با یک متغیر واحد جایگزین کنید. به کد زیر مراجعه کنید.
a=bc + k;
d=b c + m;
این کد را می توان به صورت زیر تبدیل کرد.
temp=bc;
a=دما + k;
d=دما + m;
لازم نیست بارها و بارها bc را محاسبه کنید. مقدار ضرب شده را می توان در یک متغیر ذخیره کرد و دوباره استفاده کرد.
شباهت بین بهینه سازی کد وابسته به ماشین و مستقل از ماشین چیست؟
هر دو متعلق به Code Optimization هستند
تفاوت بین بهینه سازی کد وابسته به ماشین و مستقل از ماشین چیست؟
بهینهسازی کد وابسته به ماشین در مقابل بهینهسازی کد مستقل از ماشین |
|
بهینهسازی کد وابسته به ماشین برای کد شی اعمال میشود. | بهینهسازی کد مستقل از ماشین برای کد میانی اعمال میشود. |
درگیری با سخت افزار | |
بهینهسازی وابسته به ماشین شامل ثباتهای CPU و مراجع حافظه مطلق است. | بهینه سازی کد مستقل از ماشین شامل رجیسترهای CPU یا مراجع حافظه مطلق نمی شود. |
خلاصه - بهینه سازی کد وابسته به ماشین در مقابل بهینه سازی کد مستقل از ماشین
بهینهسازی کد شامل دو تکنیک بهینهسازی به نامهای بهینهسازی کد وابسته به ماشین و بهینهسازی کد مستقل از ماشین است. تفاوت بین بهینه سازی کد وابسته به ماشین و ماشین مستقل در این است که بهینه سازی وابسته به ماشین برای کد شی اعمال می شود در حالی که بهینه سازی کد مستقل از ماشین برای کد میانی اعمال می شود.
دانلود نسخه PDF Machine Dependent در مقابل بهینه سازی کد مستقل از ماشین
می توانید نسخه PDF این مقاله را دانلود کنید و طبق یادداشت نقل قول برای اهداف آفلاین از آن استفاده کنید. لطفاً نسخه PDF را از اینجا دانلود کنید تفاوت بین بهینه سازی کد وابسته به ماشین و مستقل از ماشین