اطلاعیه

Collapse
No announcement yet.

سرعت پردازنده در اجرای دستورات

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

    سرعت پردازنده در اجرای دستورات

    دوستان یه سواله که خیلی ذهنمو مشغولش کرده ،

    سئال اینه که ، سرعت اجرای دستورات در avr چطوریه ، تو دیتا شیت خوندم ، مثلا اگه فرکانس 1مگ باشه ، دریک کلاک سیکل میتونه یک میلیون دستورالعمل رو انجام بده،
    منظور از یک کلاک سیکل چیه ؟
    آیا یک میلیون دستورالعمل یعنی یک میلیون مثلا دستور if رو میتونه تو یک کلاک انجام بده؟؟؟؟
    خود این یک سیکل کلاک چند میلی ثانی یا میکروثانیه طول میکشه انجام شه ؟؟




    با تشکر.
    به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
    (پيش به سوي هدف)

    #2
    پاسخ : سرعت پردازنده در اجرای دستورات

    بهترین واحد برای اندازه گیری کارایی یک پردازنده MIPS هست

    MIPS : Million instructions per second

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

    فرمولش هم با توجه به فرکانس و سیکل دستورات به این شکله:
    MIPS = فرکانس ساعت پردازنده / (میانگین سیکل مورد نیاز برای دستورات * 1.000.000 )

    پس الزاما فرکانس بیشتر به معنی سرعت بیشتر نیست

    دیدگاه


      #3
      پاسخ : سرعت پردازنده در اجرای دستورات

      سلام
      دستورات منظور دستورات ماشینه نه دستورات گرامری
      مثلا انتقال - جمع - ضرب - پرش و ...
      یک سیکل هم بستگی به فرکانس میکرو داره که زمان یک پالس هست
      دستور if به عنوان مثال به چند دستور ماشین شکسته میشه مثلا چهار تا دستور
      با سرچ تو گوگل خیلی چیزا دستگیرت میشه
      محک

      دیدگاه


        #4
        پاسخ : سرعت پردازنده در اجرای دستورات

        نوشته اصلی توسط alt_f4 نمایش پست ها
        بهترین واحد برای اندازه گیری کارایی یک پردازنده MIPS هست

        MIPS : Million instructions per second

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

        فرمولش هم با توجه به فرکانس و سیکل دستورات به این شکله:
        MIPS = فرکانس ساعت پردازنده / (میانگین سیکل مورد نیاز برای دستورات * 1.000.000 )

        پس الزاما فرکانس بیشتر به معنی سرعت بیشتر نیست
        بله درست میفرمایید.

        منظوراز دستورالعمل چیه ؟؟؟ آیا مقادیر باینری دستورها رو میگین ، یا همین دستوراتی که ما تو ide ها استفاده میکنیم ؟؟


        مثلا من چطور بفهمم چند خط کد میتونم داخل یه do loop برای اجراشدن تو 30 میلی ثانیه بنویسم؟؟


        با تشکر.
        به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
        (پيش به سوي هدف)

        دیدگاه


          #5
          پاسخ : سرعت پردازنده در اجرای دستورات

          این نکته رو فراموش نکنید ک منظور از دستورات کدهای برنامه نویسی زبانهای سطح بالا نیست...
          منظور از دستور دستورات ماشین یا دستورات اسمبلی هست...

          Sent from my E2333 using Tapatalk
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


          ساخت کنترلر دما PID فازي با AVR [آموزشی]

          دیدگاه


            #6
            پاسخ : سرعت پردازنده در اجرای دستورات

            نوشته اصلی توسط hosseinam نمایش پست ها
            بله درست میفرمایید.

            منظوراز دستورالعمل چیه ؟؟؟ آیا مقادیر باینری دستورها رو میگین ، یا همین دستوراتی که ما تو ide ها استفاده میکنیم ؟؟


            مثلا من چطور بفهمم چند خط کد میتونم داخل یه do loop برای اجراشدن تو 30 میلی ثانیه بنویسم؟؟


            با تشکر.
            منظور از دستور العمل، Instruction set ها هست که برای هر معماری متفاوته (ADD, ADC و SUB و ...)
            مثلا ADD در AVR در یک سیکل انجام میشه.
            تمامی مجموعه دستورالعملهای AVR در این PDF به صورت کامل توضیح داده شده: دانلود
            حالا اگر میخوای ببینی توی یک زبون سطح بالا مثل C یک دستور if تو چند سیکل انجام میشه باید ببینی تو کامپایلر اونو با چه مجموعه دستور العمل هایی پیاده سازی کردن. که میشه از راهنمای کامپایلر استفاده کرد.(مقدار زمان دقیق از این روش به دست میاد)

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

            دیدگاه


              #7
              پاسخ : سرعت پردازنده در اجرای دستورات

              به نظر شما منظور از دستورات ، همونایی نیستن که تو دیتا شیت نوشته 131 دستورالعمل معماری risc ?

              به نظرم چون avr کلا دارای 131 دستورالعمل هست ، منظور از 16mpis یعنی 16 میلیون دستور از این 131 تا ، یا 16 میلیون دستوری که از داخل همین 131 تا بدست میآد ، درست نیست؟؟
              به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
              (پيش به سوي هدف)

              دیدگاه


                #8
                پاسخ : سرعت پردازنده در اجرای دستورات

                نوشته اصلی توسط hosseinam نمایش پست ها
                به نظر شما منظور از دستورات ، همونایی نیستن که تو دیتا شیت نوشته 131 دستورالعمل معماری risc ?

                به نظرم چون avr کلا دارای 131 دستورالعمل هست ، منظور از 16mpis یعنی 16 میلیون دستور از این 131 تا ، یا 16 میلیون دستوری که از داخل همین 131 تا بدست میآد ، درست نیست؟؟
                همه دستورات که در یک سیکل اجرا نمیشه
                همونطور که در فرمول دیده میشه میانگین گرفته میشه

                دیدگاه


                  #9
                  پاسخ : سرعت پردازنده در اجرای دستورات

                  نوشته اصلی توسط alt_f4 نمایش پست ها
                  منظور از دستور العمل، Instruction set ها هست که برای هر معماری متفاوته (ADD, ADC و SUB و ...)


                  یه راه آسون تر اینه که شما از تایمر خود میکرو استفاده کنی یه حلقه 1000 تایی رو اجرا کنی ببینی چقدر زمان میبره بعد میتونی مقدار تقریبی یک بار اجرا شدن حلقه رو بدست بیاری. ( این مقدار تقریبیه ولی نزدیک به مقدار واقعیه)
                  میدونید که کلا الان یکم قاطی کردم.
                  شما لطف کنید یکم واضح تر توضیح بدین این کاری که گفتین با تایمر خود میکرو یعنی چی ؟؟!!! باید دقیقا چیکار کنم الان؟!!!!


                  ممنون.

                  دلیل: ادغام دو پست برای جلوگیری از اسپم

                  اصلا داستان اینه که من میخام ببینم که تو این حلقه ، هرکدوم از if ها چه زمانی برای اجرا شدن دارن !! همین. با چندتا if دیگه میتونم اینجا اضافه کنم ، تا مثلا تو 30 میلی ثانیه همشون چک بشن یکی دو بار.

                  کد HTML:
                  Do
                        If Reeder1 = 0 Then
                         Flagusedone = 0
                         Gosub Senseflooronmove
                        End If
                  
                        If Reeder2 = 0 Then
                         Flagusedone = 0
                         Gosub Senseflooronmove
                        End If
                  
                        If Reeder3 = 0 Then
                         Chektedadintruupt = 0
                         Flagusedone = 0
                         Disable Int7
                         Gosub Stopp
                        End If
                  
                  
                        If Flagintruupt = 1 Then
                         Flagintruupt = 0
                         Goto Main
                        End If
                  
                  Loop

                  اون محاسبه ی سرعت به طور تقریبی رو هم یه توضیح بفرمایین.
                  ممنون.
                  به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
                  (پيش به سوي هدف)

                  دیدگاه


                    #10
                    پاسخ : سرعت پردازنده در اجرای دستورات

                    نوشته اصلی توسط hosseinam نمایش پست ها
                    میدونید که کلا الان یکم قاطی کردم.
                    شما لطف کنید یکم واضح تر توضیح بدین این کاری که گفتین با تایمر خود میکرو یعنی چی ؟؟!!! باید دقیقا چیکار کنم الان؟!!!!


                    ممنون.

                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    اصلا داستان اینه که من میخام ببینم که تو این حلقه ، هرکدوم از if ها چه زمانی برای اجرا شدن دارن !! همین. با چندتا if دیگه میتونم اینجا اضافه کنم ، تا مثلا تو 30 میلی ثانیه همشون چک بشن یکی دو بار.

                    کد HTML:
                    Do
                          If Reeder1 = 0 Then
                           Flagusedone = 0
                           Gosub Senseflooronmove
                          End If
                    
                          If Reeder2 = 0 Then
                           Flagusedone = 0
                           Gosub Senseflooronmove
                          End If
                    
                          If Reeder3 = 0 Then
                           Chektedadintruupt = 0
                           Flagusedone = 0
                           Disable Int7
                           Gosub Stopp
                          End If
                    
                    
                          If Flagintruupt = 1 Then
                           Flagintruupt = 0
                           Goto Main
                          End If
                    
                    Loop

                    اون محاسبه ی سرعت به طور تقریبی رو هم یه توضیح بفرمایین.
                    ممنون.
                    شما گویا با بیسیک کار میکنید که من نمیدونم چجوریه

                    یه نمونه کد C برای Arduino مینوسم به این شکل

                    کد:
                    unsigned int t1 = micros();
                    for (int i=0; i<1000; i++)
                    {
                      دستورالعمل مورد نظر   
                    }
                    unsigned int t2 = micros();
                    unsigned int x = round((t2-t1)/1000);
                    Serial.print(x);

                    روال اینطوریه : قبل از اینکه حلقه رو اجرا کنید تایمر و فعال کنید
                    بعد از اینکه حلقه تموم شد مقدار تایمرو بخونید
                    این مقدار زمان اجرای 1000 بار هست
                    تقسیم بر 1000 میکنید مقدار اجرای یکبارش مشخص میشه.
                    جدیدترین ویرایش توسط alt_f4; ۱۵:۵۷ ۱۳۹۵/۰۳/۱۷.

                    دیدگاه


                      #11
                      پاسخ : سرعت پردازنده در اجرای دستورات

                      نوشته اصلی توسط alt_f4 نمایش پست ها
                      شما گویا با بیسیک کار میکنید که من نمیدونم چجوریه

                      یه نمونه کد C برای Arduino مینوسم به این شکل

                      کد:
                      unsigned int t1 = micros();
                      for (int i=0; i<1000; i++)
                      {
                        دستورالعمل مورد نظر   
                      }
                      unsigned int t2 = micros();
                      unsigned int x = round((t2-t1)/1000);
                      Serial.print(x);

                      روال اینطوریه : قبل از اینکه حلقه رو اجرا کنید تایمر و فعال کنید
                      بعد از اینکه حلقه تموم شد مقدار تایمرو بخونید
                      این مقدار زمان اجرای 1000 بار هست
                      تقسیم بر 1000 میکنید مقدار اجرای یکبارش مشخص میشه.
                      خوب الان با پرتوس اینکارو کردم :
                      کد HTML:
                       Enable Timer0
                        Start Timer0
                         B = Timer0
                      
                         For I = 0 To 1000
                      
                      
                         Next I
                      
                        C = Timer0
                      
                       Locate 1 , 1
                       Lcd B
                       Locate 2 , 1
                       Lcd C
                      که مقدار بدست اومده شده 33 و تقسیم بر 1000 شده ، میشه 0.033 ، خوب این الان یعنی چی ؟؟ چیو فهمیدم الان ؟؟؟



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

                      دیدگاه


                        #12
                        پاسخ : سرعت پردازنده در اجرای دستورات

                        نوشته اصلی توسط hosseinam نمایش پست ها
                        خوب الان با پرتوس اینکارو کردم :
                        کد HTML:
                         Enable Timer0
                          Start Timer0
                           B = Timer0
                        
                           For I = 0 To 1000
                        
                        
                           Next I
                        
                          C = Timer0
                        
                         Locate 1 , 1
                         Lcd B
                         Locate 2 , 1
                         Lcd C
                        که مقدار بدست اومده شده 33 و تقسیم بر 1000 شده ، میشه 0.033 ، خوب این الان یعنی چی ؟؟ چیو فهمیدم الان ؟؟؟



                        ممنون بابت پاسخ به سوالات زیاد.
                        تایمرت رو چه Scale ای کانفیگ شده عدد 33 رو در اون ضرب کن (مثلا8 یعنی با هر 8 کلاک یکی به تایمر اضافه میشه) عدد حاصل رو تقسیم به فرکانست کن ( مثلا 16MHz) زمان اجرای 1000 بار حلقه به دست میاد
                        خیلی سادس که

                        دیدگاه


                          #13
                          پاسخ : سرعت پردازنده در اجرای دستورات

                          من سرعت اجرای دستور if رو گرفتم با فرکانس کاری 1 مگا هرتز ، شد 7 میکرو ثانیه ، حالا میخام ببینم آیا تو سرعت 8 مگ چند میشه ؟!!
                          آیا میشه گفت 7 رو تقسیم بر 8 کنیم ، تا سرعت اجراش تو فرکانس 8 بدست بیاد ؟؟


                          در ضمن انتساب یه متغیر به یه مقدار ، حداقل 6500 تا کلاک نیاز داره تو فرکانس 1 مگ گرفتم.
                          حالا همین به نظرتون تو فرکانس 8 مگ هم نیاز به 6500 کلاک داره ؟؟


                          با تشکر.
                          به سمت نور خورشيد حرکت کن،تو ميتوني تابش خورشيد رو حس کني ،حتي اگه کور باشي.
                          (پيش به سوي هدف)

                          دیدگاه


                            #14
                            پاسخ : سرعت پردازنده در اجرای دستورات

                            توی زبان های مختلف قدری این زمانها متفاوته
                            اختلافشون هم به خاطر مفسری هست که تو این زبانها متن رو تفسیر به کد ماشین میکنه
                            به همین خاطر اسمبلی و بعد سی دستورات رو در مجموع سریعتر اجرا میکنن
                            محک

                            دیدگاه


                              #15
                              پاسخ : سرعت پردازنده در اجرای دستورات

                              آیا میشه گفت 7 رو تقسیم بر 8 کنیم ، تا سرعت اجراش تو فرکانس 8 بدست بیاد ؟؟
                              بله درسته...شما وقتی کلاک رو 8 برابر کنید دستورات 8 برابر سریعتر انجام میشن..

                              در ضمن انتساب یه متغیر به یه مقدار ، حداقل 6500 تا کلاک نیاز داره تو فرکانس 1 مگ گرفتم.
                              حالا همین به نظرتون تو فرکانس 8 مگ هم نیاز به 6500 کلاک داره ؟؟
                              واقعا 6500 تا؟؟؟
                              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                              www.intelart.ir


                              ساخت کنترلر دما PID فازي با AVR [آموزشی]

                              دیدگاه

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