بهینه سازی درون تابع
روش بهینه سازی برنامه های کامپیوتری / From Wikipedia, the free encyclopedia
بهینه سازی درون تابع (Interprocedural optimization: IPO) مجموعه ای از تکنیکهای کامپایلر است برای بهبود عملکرد در برنامههایی که شامل توابعی پر استفاده با اندازه متوسط و کم هستند.
بهینه سازی درون تابعی با بقیه بهینه سازهای کامپایلر متفاوت است به این دلیل که در این بهینه سازی تمام برنامه تحلیل میشود ولی بقیه بهینه سازها تنها به یکی از توابع یا حتی به یک بلوک از کد نگاه میکنند.
بهینه سازی درون تابعی به دنبال کاهش محاسبات اضافی، استفادههای ناکارامد از حافظه و ساده سازی کدهای تکراری مانند حلقه هاست. اگر روالی وجود داشته باشد که درون حلقه ای صدا زده شده باشد، آنگاه تحلیل بهینه سازی درون تابع ممکن است برای ما مشخص کند که بهتر است آن روال به صورت توسعه برخط اجرا شود. به علاوه اینکه، بهینه سازی درون تابع ممکن است ترتیب روالها را برای لایه ای بودن حافظه برای بهبود عملکرد حافظه و محلیت دادههای حافظه عوض کند.
همینطور بهینه سازی درون تابع ممکن است بهینه سازیهای معمولی کامپایلر در سطح کل برنامه هم باشد. برای مثال میتوان به حذف کدهای مرده (DCE) اشاره کرد که در در آن کدهایی که هرگز اجرا نمیشوند حذف میشوند. برای رسیدن به این هدف کامپایلر شاخههایی از کد را که اجرا نمیشوند را آزمایش میکند و در صورت نیاز کدهای داخل آن شاخه را حذف میکند. بهینه سازی درون تابع همنیطور استفاده بهتر از ثوابت تعریف شده در کد را تضمین میکند.کامپایلرهای مدرن بهینه سازی درون تابع را به عنوان یک گزینه اختیاری در زمان کامپایل ارایه میدهند. پردازش و کار واقعی بهینه سازی درون تابع در هر قدم بین کد قابل خواندن برای انسانها و تولید کد دودویی قابل اجرا برنامه اتفاق میافتد.
برای زبانهایی که فایل به فایل کامپایل را انجام میدهند، بهینه سازی درون تابع زمانی کارامدی خود را برای ترجمههای واحدها دارد که دارای دانش نقطه ورود برنامه باشند که بهینه سازی کل برنامه (Whole Program Optimization: WPO) قابل اجرا باشد. در بسیاری از موارد این بهینه سازی به صورت بهینه سازی زمان ارتباط (link-time optimization: LTO) پیاده سازی میشود به این دلیل که این برنامه برای قابل مشاهده است.