بهینه سازی حلقه ها در برنامه نویسی C

این مورد را ارزیابی کنید
(2 رای‌ها)

نکات بهینه سازی برای حلقه های for :
Optimizer یا بهینه ساز کامپایلر در پردازنده های TI وظیفه بهینه سازی کد ترجمه شده توسط composer را دارد. در این پردازنده ها کامپایلر می تواند بهینه سازی را یا بر روی حجم کد و یا بر روی سرعت اجرای کد انجام دهد که این عمل در چهار سطح مختلف -o3,-o2 , -o1, -o0 انجام می گردد.در سطح (-o2) مهمترین وظیفه optimizer بهینه سازی حلقه های for است که در ادامه مواردی را ذکر می کنیم تا به optimizer کمک کند تا بهینه سازی را بهتر انجام دهد.برای آشنایی بیشتر با این سطوح بهینه سازی می توانید به کتاب " مرجع کامل پردازنده های DSP" مراجعه کنید.


مثال: برنامه زیر را در نظر بگیرید:

 

 

 

 

 

 


کد معادل اسمبلی:

 

 

 

 

 


* همانطور که مشاهده می شود تنها یک کد اسمبل ایجاد شده که اجرای هر بار حلقه آن یک کلاک می برد.
حال برنامه ای که با متغیر unsigned نوشته شده را مشاهده نمایید.

 

 

 

 

 

 


کد معادل اسمبل این برنامه پساز بهینه سازی به صورت زیر است:

 

 

 

 

 

 

 

 

 

 

 

 

 


* در این برنامه کد اسمبلی به صورت چشمگیری افزایش یافته و مقدار کلاک برای هر بار اجرای حلقه ، for به6 + 2 سیکل رسیده است.
نتیجه: هیچگاه از متغیرهای بدون علامت (unsigned) برای کنترل حلقه for و اندیس گذاری استفاده نکنید.زبان c قوانین محدود تری برای متغیر های علامت دار (signed) دارد و در نتیجه بهینه سازی راحت تر انجام می شود.
در این حلقه اگر زمانی n صفر باشد حلقه هیچ گاه اجرا نمی شود و کامپایلر مجبور است قبل از شروع حلقه یکبار صفر شدن n را چک کند.اکنون اگر راهی وجود داشت که برنامه نویس به کامپایلر اطمینان می دادکه مقدار متغیر n هیچ گاه کمتر از یک نمی شود، کامپایلر با خیال راحت می توانست این چک اضافه را حذف کند.
همچنین کامپایلر اگر بفهمد که محتویات یک حلقه همیشه به تعداد زوج اجرا می شود، می تواند به جای تکرار n بار محتویات حلقه، از محتویات حلقه یک کپی دیگر در کنار مقادیر قبلی ایجاد کند و اکنون این مجموعه را n/2 بار تکرار نماید. به این کار unrole کردن می گویند.و با این روش در بعضی موارد که سریعتری ایجاد می شود.برای انتقال اینگونه اطلاعات به کامپایلردر نرم افزار ccs، یک pragma به نام MUST_ITERATE وجود دارد.

آخرین ویرایش در پنج شنبه, 08 بهمن 1394 ساعت 14:35

2 نظرها

  • پیوند نظر reza سه شنبه, 10 دی 1392 ساعت 15:08 ارسال شده توسط reza

    واقعا عالی بود. لازم دونستم تشکر کنم.

    گزارش
  • پیوند نظر پوریا پنج شنبه, 30 مهر 1394 ساعت 20:33 ارسال شده توسط پوریا

    عالی بود انشا الله همینطور پله های پیشرفت را طی کنید و باعث سربلندی میهن غزیزمون بشید
    ----
    با تشکر از لطف شما

    گزارش

نظر دادن

ضمن قدر دانی از نظر شما دوست محترم، نظرات و سئوالات شما تا حداکثر 3 روز کاری بررسی و سپس در سایت قرار خواهد گرفت. شما برای دریافت پاسخ سریع به سئوالات خود می توانید از طریق ایمیل یا تلفن با ما تماس حاصل فرمائید. با سپاس- مدیریت سایت