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

Rate this item
(2 votes)

نکات بهینه سازی برای حلقه های 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 وجود دارد.

Last modified on Thursday, 28 January 2016 14:35

2 comments

  • Comment Link reza Tuesday, 31 December 2013 15:08 posted by reza

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

    Report
  • Comment Link پوریا Thursday, 22 October 2015 20:33 posted by پوریا

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

    Report

Leave a comment

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

عضویت در سایت

برای اطلاع از آخرین خبرهای دنیای DSPعضو شوید

balenciaga pas cher balenciaga pas cher balenciaga pas cher balenciaga pas cher balenciaga pas cher balenciaga pas cher balenciaga outlet balenciaga outlet balenciaga outlet balenciaga outlet balenciaga outlet balenciaga outlet louboutin pas cher louboutin pas cher louboutin pas cher louboutin pas cher louboutin pas cher louboutin pas cher scarpe hogan outlet scarpe hogan outlet scarpe hogan outlet scarpe hogan outlet scarpe hogan outlet scarpe hogan outlet max maillots max maillot