2012-12-03 24 views
0

C++計時方法,我試圖讓我的程序自定時的,我知道使用的getrusage較低SYS時間

truct rusage startu; struct rusage endu; 
getrusage(RUSAGE_SELF, &startu); 

//Do computation here 

getrusage(RUSAGE_SELF, &endu); 
double start_sec = start.ru_utime.tv_sec + startu.ru_utime.tv_usec/1000000.0; 
double end_sec = endu.ru_utime.tv_sec + endu.ru_utime.tv_usec/1000000.0; 
double duration = end_sec - start_sec; 

這取一個程序段的用戶時間兩種方法

1)。使用時鐘(),用於獲取所述處理器的執行時間

double start_sec = (double)clock()/CLOCKS_PER_SEC; 

//Do computation here 

double end_sec = (double)clock()/CLOCKS_PER_SEC; 
double duration = end_sec - start_sec; 

這取一個程序段的實時

2)。

但是,這兩種方法的系統時間都很長。用戶時間也比沒有這些時間長。系統時間有時甚至會使用戶時間增加一倍。

例如,我正在做旅行推銷員問題,對於用戶和實時正常運行約3秒的輸入,這兩個時間都使用戶時間超過5秒,實時超過15秒,這意味着系統時間長達10秒左右。

我希望知道是否有改進方法或其他可以縮短系統時間和用戶時間的庫。如果我必須使用其他庫,我需要用於用戶時間計時和實時計時的庫。

感謝您的任何建議!

+0

你是否在緊密循環中調用你的分析代碼? –

+0

@MarkB是的,我有一個連續調用的回溯遞歸,通過向量執行迭代。 – ljhljh235

回答

0

我建議仔細閱讀time(7)手冊頁,並考慮clock_gettime(2)系統調用。

+0

「系統CPU時間是內核在系統模式下代表進程所花費的時間」。我認爲這意味着只要我調用系統定時功能,系統時間將不得不花費這麼長時間? – ljhljh235

+1

@ ljhljh235:不,這是所有系統調用,不僅是計時功能。通常高系統分數意味着一個進行大量I/O的進程。 – janneb

+0

@janneb謝謝!當我打印大量的調試信息時,我也注意到了這一點。但目前,我沒有太多I/O - 簡單的文件輸入和只有2行標準輸出。 – ljhljh235