نحوه اندازه گیری زمان اجرای محاسبات یک برنامه

rf.ariyapoor

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

rf.ariyapoor

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

Javan_Soft

عضو جدید
مي توانيد با كمك
1- نگهداشتن زمان شروع
2- تكرار حداقل 1000 بار تابع
3- بدست اوردن زمان خاتمه
4- تفاضل زمان شروع و خاتمه و تقسيم بر 1000 (يا در واقع تعداد تكرار )

اينكار را انجام دهيد
 

rf.ariyapoor

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

Javan_Soft

عضو جدید
دليل آن اينست كه شما زمان اجراي يك بار تابع را نياز داريد نه 1000 بار ولي بدليل شرايط مختلف زمان اجراي يك بار دقيق نيست . بنابراين با 1000 بار تكرار ميتوان زمان متوسط را بدست آورد
 

rf.ariyapoor

عضو جدید
کد:
  [COLOR=blue][FONT=&quot]int[/FONT][/COLOR][FONT=&quot] [COLOR=black]main[/COLOR]()[/FONT]
  [FONT=&quot]{[/FONT]
  [FONT=&quot]      [COLOR=black]clock_t[/COLOR] [COLOR=black]start[/COLOR] = [COLOR=black]clock[/COLOR]();[/FONT]
  [FONT=&quot]      [COLOR=blue]for[/COLOR] ([COLOR=blue]int[/COLOR] [COLOR=black]x[/COLOR]=0;[COLOR=black]x[/COLOR]<10000000;[COLOR=black]x[/COLOR]++)[/FONT]
  [FONT=&quot]      {[/FONT]
  [FONT=&quot]      }[/FONT]
  [FONT=&quot]      [COLOR=green]/* Code you want timed here */[/COLOR][/FONT]
  [FONT=&quot]      [COLOR=black]printf[/COLOR]([COLOR=maroon]"Time elapsed: %f\n"[/COLOR], (([COLOR=blue]double[/COLOR])[COLOR=black]clock[/COLOR]() - [COLOR=black]start[/COLOR]) / [COLOR=black]CLOCKS_PER_SEC[/COLOR]);[/FONT]
  [FONT=&quot]}[/FONT]
دوست عزیز برای مثال در این کد زمان ابتدای حلقه for و پایانش رو اندازه گرفته
بعد برای نمایش زمان اجرا تفریق پایان و شروع رو تقسیم بر [FONT=&quot]CLOCKS_PER_SEC
کرده یه توضیحی در مورد اینکه چرا این تقسیم انجام شده و اینکه اصلا
[/FONT][FONT=&quot]CLOCKS_PER_SEC چیه بدید ممنون میشم

در ضمن آیا اینجا زمان یک بار عمل جمع رو بهمون نشون میده ؟
[/FONT]
 

Javan_Soft

عضو جدید
در داخل حلقه هيچ عملي صورت نگرفته پس بنابراين يك حلقه تاخيري است
Clock ticks per second

This macro expands to an expression representing the number of clock ticks in a second, as returned by the function clock.
Dividing a count of clock ticks by this expression yields the number of seconds. CLK_TCK is an obsolete alias of this macro.
 

rf.ariyapoor

عضو جدید
دوست عزیز بسیار ممنون از سایتی که معرفی کردی
بسیار مفید بود
 

Babak80

عضو جدید
سلام
این توابع در محیطهای multitask مثل ویندور صحیح عمل نمی کند.
یک سری توابع API دیگر وجود دارد که متاسفانه یادم نیست، حال جستجویش هم نیست!
ولی اگر اندازه گیری دقیق مد نظرتونه: تو MSDN عبارت user time یا چیزهایی شبیه ای user mode cycles ببین شاید مفید باشه. اما اگر مهمه اشاره کنید شاید در code هام باشد.
 
بالا