اطلاعیه

Collapse
No announcement yet.

float & long int

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    float & long int

    با سلام
    float A;
    for(A=0;A<3000;A=A+1);//delay ~1 sec

    long B; //create B 32bit var
    for(B=0;B<3000;B=B+1);//delay ~100 milisec

    چرا تو مثال اولی که متغیر از نوع float تعریف شده نسبت به مثال دوم که از نوع long است اینقدر طول میکشه تا A یک عدد صعود کنه؟

    #2
    پاسخ : float & long int

    چون تو اولی تاخیر 1 ثانیه دادی تو دومی تاخیر 100 میلی ثانیه

    دیدگاه


      #3
      پاسخ : float & long int

      نه دوست عزیز اونا توضیحات برنامه است منظورم اینه که تو اولی حدود 1 ثانیه تاخیر داره تو دومی حدود 100 میلی ثانیه اگه دقت کنی اونارو بعد" // " نوشتم
      (اون حلقه for تازمانی که A<3000 است ادامه دارد حالا تو مثال اولی CPU مدت زمانی که تو این حلقه میمونه تقریبا 1 ثانیه است ولی تو دومی اینطور نیست)

      دیدگاه


        #4
        پاسخ : float & long int

        چون یک عدد صحیح مثل long دارای ساختار ساده ای هست و فقط در چند سیکل ساعت میشه عملیاتی مثل جمع و یا تفریق رو روش انجام داد. ولی یک عدد float مخصوصا در پروسسوری مثل AVR کا به طور سخت افزاری قادر به انجام عملیات روی این نوع نیست چون از روال های نرم افزاری برای شبیه سازی عملیات محاسباتی روش بهره میبره بسیار کند تر عمل میکنه. یک وقت فکر نکنی چون اون اعشاریه و این صحیح اینجوریه. حتی جمع یا بدتر از اون ضرب دو عدد long از دو عدد int خیلی بیشتر ممکنه زمان ببره.

        دیدگاه


          #5
          پاسخ : float & long int

          خیلی ممنون آقا رضا ولی همین الان من با CODEVISION تست کردم سرعت خیلی بیشتری نسبت به AVR GCC داره علتش چیه ؟ ( سرعت شمارش اعداد float)
          درضمن من با AVR STUDIO 5 کار میکنم و وقتی این برنامه رو توش میریزم حدود 13% از آیسی MEGA16 اشغال میشه در صورتی که تو کدویژن تنها 3.4% از حافظه آیسی اشغال میشه
          optimization = Os
          این کار رو هم کردم ولی فرقی نکرد لطفا راهنمایی کنید

          دیدگاه


            #6
            پاسخ : float & long int

            چرا حجم float در GCC اینقدر زیاده نسبت به کدویژن بعد یه چیزی که منو گیج کرده چرا سرعت شمارش اعداد تو کدویژن اینقدر بیشتر از GCC هست؟
            چطوری میتونم این مشکلو حل کنم؟
            ممنون از زحمات شما

            دیدگاه


              #7
              پاسخ : float & long int

              باید دید کد ویژن چطوری کد تولید میکنه. اما مسئله مهم اینه که کد ویژن عادت داره پترن های مشابه رو در هم ادغام میکنه و حجم کد رو پایین میاره که البته بر خلاف انتظار شما این کار همیشه خوب نیست. ولی در مواقعی ممکنه باعث کاهش چشمگیر حجم کد تولیدی بشه.

              من یک کد نمونه با دو کامپایلر gcc و cv نوشتم و کد اسمبلی تولید شده رو مقایسه کردم.
              سه تا نکته مهم:

              اولا کد ویژن فرم عبارت f++ رو برای نوع float قبول نکرد!
              دوم اینکه بنظر میاد کد مربوط به لایبرری gcc از کد معادل در کد ویژن حجیم تر باشه (چرا؟ نمیدونم)
              سوم اینکه در حالت o3 کد کم حجم تری تولید میکنه.

              اما در هر حال حجم روتین های startup بیشتری داره.

              شاید درست نباشه اینطوری بهش نگاه کنیم. یک پروژه بزرگتر رو باهاشون کامپایل کنین و بعد نتیجه گیری.

              دیدگاه

              لطفا صبر کنید...
              X