View Full Version : محاسبه زمان اجرای برنامه نوشته شده به زبان C++
mgupload
دوشنبه 04 اسفند 1393, 02:56 صبح
با سلام
من یه برنامه به زبان C++ با Visual Studio نوشتم. الان میخوام بدونم اگه روی سیستم خودم اجراش کنم چقدر زمان نیاز داره تا اجرا شه؟ این برنامه بیش از حد سنگینه و شاید حداقل دو هفته ای کار داشته باشه و نیاز دارم بدونم دقیقا چقدر طول میکشه! ( کار اصلی این برنامه نوشتن روی یک فایل هست )
rahnema1
دوشنبه 04 اسفند 1393, 07:31 صبح
با سلام
من یه برنامه به زبان C++ با Visual Studio نوشتم. الان میخوام بدونم اگه روی سیستم خودم اجراش کنم چقدر زمان نیاز داره تا اجرا شه؟ این برنامه بیش از حد سنگینه و شاید حداقل دو هفته ای کار داشته باشه و نیاز دارم بدونم دقیقا چقدر طول میکشه! ( کار اصلی این برنامه نوشتن روی یک فایل هست )
سلام
توضیحات شما فکر کنم کافی نباشه در هر صورت فرض کنید برنامه شما شامل یک حلقه با هزار تکرار باشه شما مثلا 10 تا تکرار را انجام بدید و زمان اجرای اون را ضرب در 100 کنید تا تخمین کل زمان اجرا بدست بیاد
golbafan
دوشنبه 04 اسفند 1393, 08:38 صبح
اگر منظورتون ران شدن اول برنامه است از splashscreen استفاده کنید
اگر منظورتون توابع داخل برنامه است از getticcount بهره ببرید
mgupload
دوشنبه 04 اسفند 1393, 09:48 صبح
من برای بررسی بهتر خود برنامه رو مینویسم ( 21 حلقه تو در تو داره! / روی یک فایل مینویسه ) راهی هست که بشه محاسبه کرد این برنامه واقعا چقدر طول میکشه ؟
#include <fstream>
using namespace std;
void main()
{
register int Sport=0;
register int i=0;
ofstream fout("Sport.fis", std::ios_base::app);
for(register int i1=1 ; i1<=4 ; i1++)
for(register int i2=1 ; i2<=4 ; i2++)
for(register int i3=1 ; i3<=4 ; i3++)
for(register int i4=1 ; i4<=4 ; i4++)
for(register int i5=1 ; i5<=4 ; i5++)
for(register int i6=1 ; i6<=4 ; i6++)
for(register int i7=1 ; i7<=4 ; i7++)
for(register int i8=1 ; i8<=4 ; i8++)
for(register int i9=1 ; i9<=4 ; i9++)
for(register int i10=1 ; i10<=4 ; i10++)
for(register int i11=1 ; i11<=4 ; i11++)
for(register int i12=1 ; i12<=4 ; i12++)
for(register int i13=1 ; i13<=4 ; i13++)
for(register int i14=1 ; i14<=4 ; i14++)
for(register int i15=1 ; i15<=4 ; i15++)
for(register int i16=1 ; i16<=4 ; i16++)
for(register int i17=1 ; i17<=4 ; i17++)
for(register int i18=1 ; i18<=4 ; i18++)
for(register int i19=1 ; i19<=4 ; i19++)
for(register int i20=1 ; i20<=4 ; i20++)
for(register int i21=1 ; i21<=4 ; i21++)
{
i = (i1+i2+i3+i4+i5+i6+i7+i8+i9+i10+i11+i12+i13+i14+i1 5+i16+i17+i18+i19+i20+i21-21);
if(i>-1 && i<11)
Sport = 1;
else
{
if(i>10 && i<17)
Sport = 2;
else
{
if(i>16 && i<21)
Sport = 3;
else
{
if(i>20 && i<31)
Sport = 4;
else
{
if(i>30 && i<41) Sport = 5;
else Sport = 6;
}
}
}
}
fout<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<" "<<i7<<" "<<i8<<" "<<i9<<" "<<i10<<" "<<i11;
fout<<" "<<i12<<" "<<i13<<" "<<i14<<" "<<i15<<" "<<i16<<" "<<i17<<" "<<i18<<" "<<i19<<" "<<i20<<" "<<i21;
fout<<", "<<Sport<<" (1) : 1\n";
}
fout.close();
}
who are you
دوشنبه 04 اسفند 1393, 10:17 صبح
پاسخ دوم:
http://stackoverflow.com/questions/2105411/windows-how-do-i-calculate-the-time-it-takes-a-c-c-application-to-run
mgupload
دوشنبه 04 اسفند 1393, 11:48 صبح
پاسخ دوم:
http://stackoverflow.com/questions/2105411/windows-how-do-i-calculate-the-time-it-takes-a-c-c-application-to-run
این راه حلی که در این سایت قرار داره واسه محاسبه زمان اجرای یک برنامه، نیازی به اجرای برنامه مورد نظر نداره؟ یا باید اون رو کامل اجرا کنه تا مدت زمان اجرا رو بدست بیاره؟ آخه خیلی منطقی نیست یک برنامه ای که هفته ها طول میکشه رو اجرا کنیم تا فقط مدت زمان اجرا اون رو محاسبه کنیم! من فقط میخوام بدونم چند روز باید سیستمم روشن بمونه تا اون برنامه کارش تموم شه!
[[[[[[[[[[...]]]]]]]]]]
دوشنبه 04 اسفند 1393, 12:07 عصر
اگر تنها دور حلقه ها رو حساب کنیم (یعنی به غیر از دستورات داخل حلقه 21)، حدودا 200 دقیقه طول می کشه تا اجرای برنامه ات به پایان برسه.
باید یک زمان معلوم شده رو به تعداد حلقه های مانده ضرب در 4 کنی.
مثلا در سیستم من حدود 11500 میلی ثانیه طول کشید تا 16 حلقه اول به پایان برسن. بنابراین باید 4 رو 21حلقه منهای 16حلقه بار ضرب در 11500 کنی. به صورت گرد شده 200 دقیقه میشه. زمان دقیقی به دست نمیاد. بستگی به قدرت پردازشگر و خلاصه حال و هوای کامپیوتر داره.
[[[[[[[[[[...]]]]]]]]]]
دوشنبه 04 اسفند 1393, 17:20 عصر
در پست قبلی ام در محاسبه زمان اشتباه کرده بودم که اصلاحش کردم. از خواب آلودگی زیاد بود.
rahnema1
دوشنبه 04 اسفند 1393, 18:58 عصر
این برنامه را اجرا کنید تا تخمین زمان اجرا را به شما بده
limit هم تعداد حلقه ای هست که به صورت تست اجرا بشه. هر چه بیشتر باشه مدت زمان اجرای این برنامه بیشتر میشه اما تخمین دقیق تری ارائه می کنه
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
void test(int limit)
{
register int Sport=0;
volatile register int i=0;
int ctr= 0;
ofstream fout("Sport.fis", std::ios_base::app);
for(register int i1=1 ; i1<=4 ; i1++)
for(register int i2=1 ; i2<=4 ; i2++)
for(register int i3=1 ; i3<=4 ; i3++)
for(register int i4=1 ; i4<=4 ; i4++)
for(register int i5=1 ; i5<=4 ; i5++)
for(register int i6=1 ; i6<=4 ; i6++)
for(register int i7=1 ; i7<=4 ; i7++)
for(register int i8=1 ; i8<=4 ; i8++)
for(register int i9=1 ; i9<=4 ; i9++)
for(register int i10=1 ; i10<=4 ; i10++)
for(register int i11=1 ; i11<=4 ; i11++)
for(register int i12=1 ; i12<=4 ; i12++)
for(register int i13=1 ; i13<=4 ; i13++)
for(register int i14=1 ; i14<=4 ; i14++)
for(register int i15=1 ; i15<=4 ; i15++)
for(register int i16=1 ; i16<=4 ; i16++)
for(register int i17=1 ; i17<=4 ; i17++)
for(register int i18=1 ; i18<=4 ; i18++)
for(register int i19=1 ; i19<=4 ; i19++)
for(register int i20=1 ; i20<=4 ; i20++)
for(register int i21=1 ; i21<=4 ; i21++)
{
i = (i1+i2+i3 +i4+i5+i6+ i7+i8+i9+i10+ i11+i12+i13+i14+i15 +i16+i17+i18+i19+i20 +i21-21);
i = 0;
for (int k =0; k< 21; k++)
i += rand() % 4 + 1;
i-=21;
if(i>-1 && i<11)
Sport = 1;
else
{
if(i>10 && i<17)
Sport = 2;
else
{
if(i>16 && i<21)
Sport = 3;
else
{
if(i>20 && i<31)
Sport = 4;
else
{
if(i>30 && i<41) Sport = 5;
else Sport = 6;
}
}
}
}
fout<<i1<<" "<<i2<<" "<<i3<<" "<<i4<<" "<<i5<<" "<<i6<<" "<<i7<<" "<<i8<<" "<<i9<<" "<<i10<<" "<<i11;
fout<<" "<<i12<<" "<<i13<<" "<<i14<<" "<<i15<<" "<<i16<<" "<<i17<<" "<<i18<<" "<<i19<<" "<<i20<<" "<<i21;
fout<<", "<<Sport<<" (1) : 1\n";
if (++ctr > limit)
{
fout.close();
return;
}
}
}
int main()
{
clock_t t1, t2;
volatile int rnd;
int ctr = 0;
int limit = 500000;
unsigned long long numberofRuns = 4398046511104ULL;
srand(time(NULL));
t1 = clock();
test(limit);
t2 = clock();
double time1 = ((double)t2 - t1) / CLOCKS_PER_SEC ;
t1 = clock();
while(1)
{
rnd = 0;
for (int k =0; k< 21; k++)
rnd += rand() % 4 + 1;
rnd -= 21;
if (++ctr > limit)
{
break;
}
}
t2 = clock();
double time2 = ((double)t2 - t1) / CLOCKS_PER_SEC ;
cout <<"modat zamane ejra = " << (time1 - time2) * (((numberofRuns / limit )+ (numberofRuns % limit)/ (double)limit )/3600.0) << " saat";
}
a.r.khoshghalb
پنج شنبه 07 اسفند 1393, 20:57 عصر
یه چیزی وجود داره به نام تحلیل اوردری که ساخته شده تا دیگه لارم نباشه برنامه هایی مثل این رو ران کنیم تا بفهمیم چه قدر طول می کشن...
برنامه شما اوردرش 21^4 هست! یعنی 42 ^ 2!! همینجوریش خیلی زیاده تازه شما داری توی فایل چیزی مینویسی که از کارهای کند هست...
با فرض اینکه کامپیوتر شما در ثانیه 7^10 تا عملیات انجام بده (خوش بینانه گفتم) میشه 42^2 تقسیم بر 7^10!
میشه در حدود 439804 ثانیه. یعنی 122 ساعت یعنی بیشتر از 5 روز.
اما همه این ها خیلی خوش بینانه بود. توی فایل نوشتن واقعا عملیات کندیه...
rahnema1
پنج شنبه 07 اسفند 1393, 21:11 عصر
یه چیزی وجود داره به نام تحلیل اوردری که ساخته شده تا دیگه لارم نباشه برنامه هایی مثل این رو ران کنیم تا بفهمیم چه قدر طول می کشن...
برنامه شما اوردرش 21^4 هست! یعنی 42 ^ 2!! همینجوریش خیلی زیاده تازه شما داری توی فایل چیزی مینویسی که از کارهای کند هست...
با فرض اینکه کامپیوتر شما در ثانیه 7^10 تا عملیات انجام بده (خوش بینانه گفتم) میشه 42^2 تقسیم بر 7^10!
میشه در حدود 439804 ثانیه. یعنی 122 ساعت یعنی بیشتر از 5 روز.
اما همه این ها خیلی خوش بینانه بود. توی فایل نوشتن واقعا عملیات کندیه...
حالا به غیر از اوردر حلقه های تودرتو که به قول شما 21^4 یا 4398046511104ULL بود یک نکته مهم این بود که این if های تو در تو اوردرش چه قدره؟ :متفکر: که مساله را پیچیده می کرد این تخمین که بالا اشاره کردم اوردر if هم در نظر می گیره البته پیگیر یک روش دیگه هستم فکر کنم تخمین دقیق تری بده
a.r.khoshghalb
پنج شنبه 07 اسفند 1393, 21:21 عصر
حالا به غیر از اوردر حلقه های تودرتو که به قول شما 21^4 یا 4398046511104ULL بود یک نکته مهم این بود که این if های تو در تو اوردرش چه قدره؟ که مساله را پیچیده می کرد این تخمین که بالا اشاره کردم اوردر if هم در نظر می گیره البته پیگیر یک روش دیگه هستم فکر کنم تخمین دقیق تری بده
نه اون if ها رو میشه از زمانشون صرف نظر کرد و (1)O در نظر گرفتشون. اما من الان که نگاه کردم دوباره دیدم توی این 21 فور دوباره یه فور داره که تا 21 میره که اگر ضرب کنیم میشه 106 روز.
شما میگی میخوای تلاش کنی چه برنامه ای بنویسی تا کمکت کنیم؟ قطعا این روش، روش خوبی نیست.
rahnema1
پنج شنبه 07 اسفند 1393, 21:23 عصر
نه اون if ها رو میشه از زمانشون صرف نظر کرد و (1)O در نظر گرفتشون. اما من الان که نگاه کردم دوباره دیدم توی این 21 فور دوباره یه فور داره که تا 21 میره که اگر ضرب کنیم میشه 106 روز.
شما میگی میخوای تلاش کنی چه برنامه ای بنویسی تا کمکت کنیم؟ قطعا این روش، روش خوبی نیست.
نمیشه اوردر if را یک گرفت خیلی پیچیده تر از اینهاست و چرا روش خوب نیست؟
a.r.khoshghalb
پنج شنبه 07 اسفند 1393, 21:25 عصر
چرا خوب نیست؟
منظورم از این روش، روشیه که دوستمون براش کد زدن. روش خوبیه به نظر شما؟ اوردرش نماییه :D
rahnema1
پنج شنبه 07 اسفند 1393, 21:32 عصر
منظورم از این روش، روشیه که دوستمون براش کد زدن. روش خوبیه به نظر شما؟ اوردرش نماییه :D
احتمالا ایشان میخواسته تمام ترکیبات را داخل فایل بنویسه؟! از نظر سرعت فکر کنم از روش بازگشتی سرعت بیشتری داشته باشه
a.r.khoshghalb
پنج شنبه 07 اسفند 1393, 21:43 عصر
احتمالا ایشان میخواسته تمام ترکیبات را داخل فایل بنویسه؟! از نظر سرعت فکر کنم از روش بازگشتی سرعت بیشتری داشته باشه
بله اگر اینی که شما میگی رو میخواسته باشن بنویسن همینه.
از بازگشتی بهتر نیست، در هر صورت هر 2شون تمام حالت ها رو میسازن ولی خوب بازگشتی overhead بالایی داره والبته قطعا StackOverFlow میشه...
درضمن! توی پست قبلیم به یه فور که تا 21 میره اشاره کردم که اشتباه بود. کد اون دوستمون نبود. من فکر کردم کد ایشون اینه... هون 5-6 روز طول میکشه...
rahnema1
پنج شنبه 07 اسفند 1393, 21:45 عصر
شما میگی میخوای تلاش کنی چه برنامه ای بنویسی تا کمکت کنیم؟
برای محاسبه اوردر if های تودرتو لازمه توزیع مورد بحث در این مقاله مطالعه بشه البته برای هنگامی که اعداد انتخابی از 1 تا n باشند. اما در مقاله برای اعداد 0 تا n مطالعه کرده
http://community.dur.ac.uk/c.c.d.s.caiado/multinomial.pdf
who are you
پنج شنبه 07 اسفند 1393, 21:52 عصر
دوستان این اوردر که میگید میشه کلمه برابر انگلیسیش رو هم بگید
rahnema1
پنج شنبه 07 اسفند 1393, 21:56 عصر
دوستان این اوردر که میگید میشه کلمه برابر انگلیسیش رو هم بگید
به یاد یکی از چهره های ... افتادم :لبخند: فارسی را پاس بداریم ترجمش میشه مرتبه که البته اینم عربیه
who are you
پنج شنبه 07 اسفند 1393, 22:03 عصر
به یاد یکی از چهره های ... افتادم :لبخند: فارسی را پاس بداریم ترجمش میشه مرتبه که البته اینم عربیه
چهره ی چی ؟ :عصبانی::لبخند:
order ? اقا انگلیسی بگو عربی رو کجای دلم بذارم
rahnema1
پنج شنبه 07 اسفند 1393, 22:09 عصر
چهره ی چی ؟ :عصبانی::لبخند:
order ? اقا انگلیسی بگو عربی رو کجای دلم بذارم
دوست عزیز ، بگذریم حالا یا می تونید واژه «مرتبه» یا «order» استفاده کنید
mgupload
شنبه 09 اسفند 1393, 14:47 عصر
نه اون if ها رو میشه از زمانشون صرف نظر کرد و (1)O در نظر گرفتشون. اما من الان که نگاه کردم دوباره دیدم توی این 21 فور دوباره یه فور داره که تا 21 میره که اگر ضرب کنیم میشه 106 روز.
شما میگی میخوای تلاش کنی چه برنامه ای بنویسی تا کمکت کنیم؟ قطعا این روش، روش خوبی نیست.
این برنامه صرفا جهت تولید پایگاه دانش سیستم خبره هست که با کمک هوش مصنوعی عمل میکنه، نهایتا مجبور میشم اون رو با کمک الگوریتم ژنتیک کمش کنم
این برنامه هم زمان زیادی صرف میکنه و هم حجم زیادی برای ساختن اون فایل لازمه و میشه گفت که حتی میتونه یه هارد 500 رو به راحتی پر کنه!
rahnema1
شنبه 09 اسفند 1393, 15:16 عصر
این برنامه صرفا جهت تولید پایگاه دانش سیستم خبره هست که با کمک هوش مصنوعی عمل میکنه، نهایتا مجبور میشم اون رو با کمک الگوریتم ژنتیک کمش کنم
این برنامه هم زمان زیادی صرف میکنه و هم حجم زیادی برای ساختن اون فایل لازمه و میشه گفت که حتی میتونه یه هارد 500 رو به راحتی پر کنه!
توی تابع test فکر کنم باید به جای
register int i=0;
باید این پایینی را بذارید تا تخمین دقیق بشه که بهش دقت نکرده بودم
volatile register int i=0;
اما در مورد ذخیره این فایل حجیم شاید لازم نباشه این همه تولید کنید اگه بعضی خصوصیات این اعداد را بخواهید بدون حلقه و صرفا با فرمول هم میشه استخراج کرد . مثل همون مقاله ای که گذاشتم
joesef
یک شنبه 10 اسفند 1393, 23:57 عصر
سلام ببم جان؛ با دقت بنویس میدونی که چطوری...؟
<include <iostream#
<include <time.h#
<include <conio.h#
;using namespace std
(int main(void
}
;clock_t start, end
;()start = clock
// instructions of program
;()end = clock
;printf("The time was: %f\n"), (end - start) / CLK_TCK
;()getch
;return 0
{
joesef
دوشنبه 11 اسفند 1393, 00:00 صبح
ببم جان؛ ببینم چه می کنی ها...؟
<include <iostream#
<include <time.h#
<include <conio.h#
;using namespace std
(int main(void
}
;clock_t start, end
;()start = clock
// instructions of program
;()end = clock
;printf("The time was: %f\n"), (end - start) / CLK_TCK
;()getch
;return 0
{
بهروز عباسی
دوشنبه 11 اسفند 1393, 01:19 صبح
بحث تکراری نکنید خواهشا سرچ فراموش نشه !!
لینکو ببین
http://barnamenevis.org/showthread.php?347148-%D8%AA%D8%B3%D8%AA-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87&p=1531433&viewfull=1#post1531433
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.