我想簡報的程序與這個類:clock_gettime返回一些交流中心值
namespace smtx{
class CPerformance_clock
{
timespec t1;
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}
public :
CPerformance_clock(){}
/**
* Starts the clock by taking the initial measure
*/
void start()
{
assert(clock_gettime(CLOCK_MONOTONIC_RAW,&t1) == 0);
}
long int getElapsedTime()
{
timespec t2, final;
assert (clock_gettime(CLOCK_MONOTONIC_RAW,&t2) == 0);
final = diff(t1, t2);
return (final.tv_sec * 1000000000) + final.tv_nsec;
}
void restart()
{
clock_gettime(CLOCK_REALTIME,&t1);
}
};
};
我控制最小,最大和平均時間,使用此代碼
if(t > max_time)
{
max_time = t;
}
if(t < min_time)
{
min_time = t;
}
++count_time;
sum_time += t;
chunk_sum_time +=t;
++chunk_count_time;
沒有特別之處在所有。 但是當我執行程序時,最大時間總是有一個引渡時間值: 最小時間:831 ns在40784,最大時間:9773850 ns在1123 最大時間遠遠長於總執行時間,所以我不'不明白這一點。我不會在顯示數據的過程中進行任何轉換或分割,以免丟失數據。
我readed這個職位,Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior,但我的內核是最新的,雖然是一個Ubuntu了。
要完成,我做了測試與CLOCK_MONOTONIC,CLOCK_REALTIME,CLOCK_MONOTONIC_RAW,並沒有解決這個問題。
而且,我不知道這個問題,但我的編程和虛擬機上執行此程序。
有幫助嗎?
編輯:爲了把我的問題的一個例子:我處理結果4.000.000在約60秒。每個結果的平均時間是4000納秒。一個奇怪的錯誤可能是14秒,但程序運行平穩,並在任何時刻停止14秒。
在500.000結果(execued在3秒內)出現了類似MAX_TIMEs,像9秒執行。
在此先感謝
也許這只是一個調度問題? –
調度程序?這是什麼? – Killrazor
你知道,操作系統會暫停你的進程,並給其他進程運行的機會..如果你使用CLOCK_PROCESS_CPUTIME_ID,會發生什麼? –