برداشت کلی شما از مقاله‌ی داده‌شده چیست؟

مقاله: حلقه‌ها بهترین کاندیداها برای بهینه‌سازی هستند چراکه بیشتر وقت برنامه در حلقه‌ها صرف می‌شود. تحلیل متغیرهای استقرایی: در هر حلقه اگر متغیری باشد که به صورت حاصل عملیات ریاضی بیان‌شده باشد، شاید بتوان آن را هربار بدون محاسبه (index variable) بر روی متغیر اندیس دوباره، با یک تغییر کوچک بروز کرد. این کار همچنین می‌تواند متغیر اندیس را به سمت بی‌مصرف شدن و در نهیت حذف پیش ببرد. مساوی داشته باشند و با داده (iteration) تلفیق حلقه‌ها: اگر دو حلقه مجاور تعداد تکرار‌های یکدیگر کار نکنند، می‌توان آن‌ها را تلفیق کرده و به یک حلقه واحد تبدیل کرد تا بدینگونه جلوگیری شود. (توجه داشته باشید که برای loop overhead از پرداخت هزینه اضافی بررسی تساوی تعداد تکرار دو حلقه، نیازی نداریم تعداد دقیق تکرار را بدانیم). هر چند گاهی عکس این عمل نیز (تبدیل یک حلقه به چند حلقه جدا از هم) می‌تواند باعث بهینه شدن کد شود که این مورد بیشتر در مورد پردازنده‌های چند هسته‌ای بکار می‌رود است while بهتر از حلقه‌های do / while واژگون کردن حلقه: اغلب استفاده از حلقه‌های چرا که چک کردن شرط حلقه در آخر حلقه باعث استفاده کمتر از پرش می‌شود. (به یاد را می‌گیرند. pipelining داشته باشید در اغلب پردازنده‌ها دستورها پرش جلوی استفاده از جابجایی کد مستقل از حلقه: اگر مقدار یک عبارتی که باید محاسبه شود در تمام تکرارهای حلقه ثابت باشد، با جابجا کردن کد مربوط به محاسبه حاصل عبارت به بیرون حلقه می‌توانیم سرعت برنامه را افزایش دهیم. بازکردن حلقه: اگر تعداد تکرار یک حلقه در زمان کامپایل مشخص باشد، می‌توان کد بدنه حلقه را به آن تعداد کپی کرد تا از چک کردن شرط حلقه و همچنین دستورها پرش جلوگیری می‌شود و ممکن cache شود. هرچند این کار باعث افزایش طول کد و استفاده کمتر از است حتی برنامه را کندتر هم بکند. در واقع این تکنیک چیزی نیست که بتوان همیشه روی آن حساب کرد. اگر در داخل بدنه یک حلقه، انشعابی داشته باشیم که شرط آن: loop unswitching مستقل از حلقه است، می‌توانیم آن را به بیرون حلقه آورده و حلقه را در هر یک از شاخه‌های انشعاب کپی کنیم. این کار، اگر چه باعث افزایش حجم کد می‌شود، اما به پردازنده درون حلقه‌ها را دارند کمک می‌کند (parallelization) های جدید که قابلیت هم‌زمان‌سازی کد را سریعتر اجرا کنند. اگر دستورها درون یک حلقه مجبور باشند پشت سر …
برداشت:
بهینه‌سازی از مهم‌ترین وظایف یک کامپایلر است که معمول بعد از تولید کد میانی آغاز می‌شود . همیشه هنگام کامپایل یک برنامه برای پخش نهایی از بهینه‌سازی استفاده می‌شود . هرچند گاهی اوقات بهینه‌سازی مانع اصلی بعضی اهداف است و باید کنار گذاشته کردن یک کد بهینه شده دشوارتر و شاید غیرممکن شود چرا که debug شود . به عنوان مثال به منظور بهینه‌سازی بسیاری از کدها حین کامپایل ممکن است جابجا شده باشند یا اصل option ساختار آن‌ها عوض شده باشد . به همین دلیل بسیاری از کامپایلرها اجازه نمی‌دهند کامپایل کردن و بهینه‌سازی هم‌زمان فعال شوند . تکنیک‌های مختلف بهینه‌سازی می‌توانند وابسته به زبان منبع ، وابسته به ماشین مقصد یا مستقل از هر دو باشند . اغلب روش‌های بهینه‌سازی مستقل از زبان منبع می‌باشند .