PDA

View Full Version : مجاسبه زمان اجرای الگوریتم



NIMA_1981
دوشنبه 15 اسفند 1390, 18:40 عصر
سلام

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

#include <time.h>
time_t start,end;
float dif;

این خط را وقتی وارد الگوریتم میشه قزار داردم

time (&start);

این خط وقتی الگوریتم تمام میشه قرار دادم

time (&end);


اینم برای نمایش

dif = difftime (end,start);
cout<<"time1:"<<start<<endl;
cout<<"time2:"<<end<<endl;
cout<<"diftime:"<<dif<<endl;

اما خروجی برابر با صفر اما خود کمپایلر یک زمان دیگه رو نشون میده
83713
با تشکر

Ananas
دوشنبه 15 اسفند 1390, 19:20 عصر
سلام.
تابع Time و یا GetLocalTime رو هم امتحان کن.

hiwaamiri
چهارشنبه 24 اسفند 1390, 21:30 عصر
سلام دوستان خسته نباشید
میشه لطفا نحوه ی کار با این توابع زمان رو بطور کامل توضیح بدید. من میخوام تو الگوریتم زیر زمان اجرا رو با دقت میکروثانیه اندازه بگیرم ولی نمیدونم این کدی که نوشتم خروجی زمانش واحدش چیه ثانیه است؟ یا میلی ثانیه یا... ؟
تو این کد clock per sec کارش چیه؟؟‌در 1000 ضرب شده هدف چیه؟؟

clock_t begin,end;
int d;
begin=clock();
quick(p,0,n);
end=clock();
d=((end-begin)*1000)/CLOCKS_PER_SEC;
cout<<"\n start time : "<<((begin)*1000)/CLOCKS_PER_SEC;
cout<<"\n end time : "<<((end)*1000)/CLOCKS_PER_SEC;
cout<<"\n time to process : "<<d<<" ؟؟؟؟seconds .\n";

Ananas
چهارشنبه 24 اسفند 1390, 23:58 عصر
سلام.
تو فایل time.h اینو نوشته :

#define CLOCKS_PER_SEC 1000.0

نمی دونم اینجا ضربدر 1000 برای چی هست چون دوباره تقسیم به 1000 میشه.
خروجی clock رو تقسیم کنی به 1000 ، ثانیه بدست میاد یعنی برحسب میلی ثانیه هست.
با دقت میکرو گمون نکنم بشه خیلی که دقیق باشن یک هزارم ثانیه دقت داره.

Ceytar
پنج شنبه 25 اسفند 1390, 11:19 صبح
این (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85).aspx) احتمالا مشکلت رو حل کنه

اما فقط برای win32 هست

mehdi.mousavi
پنج شنبه 25 اسفند 1390, 14:42 عصر
سلام من می خوام زمان محاسبه بین دو الگوریتم را با هم مقایسه کنم

سلام.
برای اینکار، با یک بار Sampling نمیشه به نتیجه رسید، باید کاری که میخواهید انجام بدید رو N بار انجام بدید، بعد متوسط زمان اجرای رو بدست بیارید و این میزان رو با متوسط زمان اجرای الگوریتم دیگه، مقایسه کنید. این کاری هستش که Performance Analysis (http://channel9.msdn.com/Blogs/wriju/CPU-Sampling-using-Visual-Studio-2010-Performance-Analyzer-Tool) در VS2010 بخوبی انجام میده و به شما کمک میکنه تا کارایی یک تابع (یا بخشی از کد رو) اندازه گیری کنید. اگر در Windows اینکارو انجام میدید (و علاقه ای به استفاده از Performance Analyzer ندارید) باید از High Resolution Timer ها بدین شکل (http://stackoverflow.com/questions/2150291/how-do-i-measure-a-time-interval-in-c) استفاده کنید.

موفق باشید.