دسته بندی نشده

سرعت اجرای برنامه توسط کامپایلر ها مختلف برای میکرو های AVR

مدتی بود که تمامی محاسباتی برای مدت زمان اجرای برنامه ( پیچیدگی محاسباتی برنامه ) انجام می دادم ولی در واقعیت درست نبود  .بر آن شدم برنامه ساده را محاسبه کنم بعد به دنبال برنامه های پیچیده تر بروم که متوجه شدم سرعت اجرای دستورات در کامپایلر های مختلف با هم متفاوت است . برنامه ساده ای نوشتم در واقع یک پایه را خاموش و روشن کردم بدون هیچ گونه تاخیری و به نتیجه جالبی رسیدم  ، و آن را نمایش داده ام .

Speed

 Speed Compiler

تمامی کامپایلر ها Atmel Studio 4 , 5 , 6 , 6.1 , 6.2 – Codevision AVR 2.5 , 3.12 – microC AVR , WinAVR 2010 , BasCome , IAR را تست کردم

نتیجه حاصل بسیار جالب بود

بالا ترین سرعت اجرا برای زبان اسملی با کامپایلر Atmel studio 4 , 5 , 6 بود و همچنین زبان C , C++ برای کامپایلر Atmel Studio 6.2 SP2

جایگاه دوم Win AVR2010 , Codevision 3.12

جایگاه سوم IAR , MicroC , AtmelStudio 5 C++/C

جایگاه چهارم Codevision 2.5

جایگاه پنجمBascome AVR

 

نتیجه حاصل از این تحقیق حداقل اختلاف بین زبان اسمبلی با زبان C,C++ در کامپایلر Atmel Studio را نشان می دهد .

و لازم به ذکر است که کامپایلر CodeVision هم توانسته است از دیگر کامپایلر ها پیشی بگیرد .

و نتیجه دوم که به آن رسیدم این بود که میکروهای AVR برای یک کردن یک پایه مدت زمان بیشتری نیاز دارند تا برای صفر کردن یک پایه  . در واقع مدت زمان یک کردن یک پایه 3 میکرو ثانیه با کلاک 8Mhz است و برای صفر کردن 1 میکرو ثانیه است . برای همین باید سعی کنیم از لبه پایین رونده بیشتر استفاده کنیم . این موضوع در تمامی کامپایلر ها برابر بود .

در حال حاضر در حال بررسی گرفتن صفر و یک هستم و نتیجه آن را قرار خواهم داد .

داودیrp_Graphic2.4.png

 

نوشته های مشابه

‫10 نظرها

  1. با سلام
    سرعت اجرای برنامه در کامپایلر های متفاوت به نوع برنامه و همچنین نوع برنامه نویسی شخص مورد نظر بستگی درارد.
    هسته winavr و atmel studio هر دو avr gcc می باشد که نوع optimaze کردن کد در هر دو کامپایلر تقریبا به یک صورت است.
    کامپایلر IAR در حال حاظر جز. بهترین کامپایلر های دنیا است و با توجه به استفاده چندین ساله این جانب از این کامپایلر،نرم افزار CODEVISION AVR حتی قابل مقایسه با این کامپایلر نیست.
    و IAR درجات متفاوت و پیشرفته ای برا بهینه سازی کد دارد.
    در خود وبسایت IAR نتیجه تست کامپایلر atmel studio (GCC با IAR قرار دارد که با رجوع به این تست مشخص می شود که IAR یک سرو گردن بالاتر از بقیه کامپایلر هاست.
    البته این دیدگاه به دور از تعصب بر روی کامپایلر خاصی می باشد.
    لذا نتیجه تست بالا نمی تواند درست بوده باشد.و ملاک مناسبی برای تست انجام شده نیست.
    با تشکر

    1. با سلام
      در صورت امکان لینک مورد نظر ارسال شود و مراتب صحت گفتمان را باهم بررسی کنیم .
      لازم به ذکر است که این نتیجه یک آزمایش بوده و امکان خطا وجود دارد و هرچند سعی شده خطا ها به حداقل خود برسد .

      و در ضمن طراحان کامپایلر های خانواده های شرکت Atmel تماما از مراجع Atmel استفاده می کنند .
      و منابع قضاوت ما بر اساس اطلاعات و نحوه به کار گیری قطعات ، با توجه به تاییدیه های Atmel در مراجع آن می باشد .

      با تشکر از نظرات ارزشمند شما
      داودی

  2. سلام
    ممنون از تحقیقتون و اما یک موضوع کوچیک اونم اینه که زمان استفاده از لبه های بالا رونده و پایین رونده چون ما در حقیقت داریم یک پالس ورودی میدیم ربطی به روشن و خاموش کردنه پایه نداره و این به سرعت پردازش میکرو ربط پیدا میکنه که داره ورودی رو می خونه شما میتونید این مساله رو هم آزمایش کنید و ببینید این عمل کرد توی کدوم کامپایلر سریع تر هست
    با تشکر

  3. سلام
    آزمایش جلبی بود فقط یک نکته احتمالا در کدهای برنامه از حلقه for یا while استفاده نکردید؟ چون در زمانی که برنامه به انتهای حلقه برسه و بخواد بره اول برنامه احتمالا یک سیکل کاری زمان می بره که باعث ایجاد همون اختلاف زمان بین روشن و خاموش شدن بشه.

  4. سلام.
    بنده هم با نظر دوستمان آقای علیزاده کاملا موافقم. اول اینکه سرعت اجرای برنامه تا حد زیادی بستگی به نوشتن برنامه دارد. برای مثال یک چشمک زن ساده که متصل به یک پورت میکرو باشد را به چند طریق میتوان نوشت. هرچه مقدار توابع کمتر باشد مسلما سرعت اجرای برنامه بیشتر است. اما اینکه چه کامپایلری سرعت بالاتری دارد بنده قبول ندارم. سرعت کامپایلرها در عمل(یعنی وقتی کد هگز روی میکرو ریخته میشود و مدار را در پروتئوس شبیه سازی میکنیم) همگی یکیست. چون به شخصه بنده یک برنامه بسیار طولانی با winavr و atmel atudio نوشتم حتی مقدار کدها و توابع و مقدار کدهگز تولیدی هم فرقی نداشت(سخت افزار و نوع میکرو و نقشه مدار هم یکی بود) در عمل شبیه ساز قدرتمند پروتئوس پاسخ بنده و بسیاری از دوستان را داد! (هر دو برنامه یکصدم ثانیه اختلاف نداشتند!)
    در نهایت اینطور برداشت میشود که کامپایلرها سرعت اجرای برنامه را تعیین نمیکنند و در حقیقت در حیطه نرم افزاری سرعت اجرای برنامه را دو چیز فقط تعیین میکند:
    1- مقدار توابع و کدهای نوشته شده که بستگی به خلاقیت و ابتکار برنامه نویس دارد
    2- نوع زبان برنامه نویسی که طبق کارشناسان جهان به ترتیب زیر میباشد:
    الف: اسمبلی. چون ارتباط بسیار تنگاتنگی با سخت افزار میکرو دارد
    ب: زبان برنامه نویسی C که مقدار کمی به اسمبلی نزدیک است
    ج: بیسیک . که ارتباطی با سخت افزار و رجیسترها ندارد
    پس اگر برنامه ای با کامپایلر محبوب و بی نظیر بسکام (ای کاش تمامی کامپایلر ها قدرت و سادگی آن را داشتند!) نوشته شد این دلیل نمیشود که آن کامپایلر سرعتش پایین است بلکه این نوع زبان برنامه نویسی بیسیک است که اصولا سرعت آن کمتر از بقیه میباشد
    و اما…
    در حیطه سخت افزاری بستگی به نوع میکرو و همچنین مقدار کریستال متصل به آن بستگی دارد که هر چه مقدار فرکانس کریستال بالا برود سرعت اجرای برنامه در میکرو بالاتر میرود

  5. واقعا فکر کردین با این تست میشه سرعت اجرای برنامه ها توسط کامپایلرهای مختلف رو بررسی کرد؟؟؟ تازه اونم با اوسکوپ پروتئوس؟؟؟ به نظر من زبان سی یکی از بهترین زبانها است اما کدویژن بدترین کامپلری هست که میشه با سی نوشت در عین حال بیسیک یک زبان سطح بالا و دور از زبان ماشین هست اما بسکام در نوع خود بهترین کامپلر هستش

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بستن
بستن