2013-08-06 91 views
1

我運行QNX,獲得來自時鐘週期時間

我使用的功能來獲得每秒的時鐘週期,

uint64_t clockPerSec = getCPS(); 
uint64_t currentClockCycle = getCurrentCycle(); 

功能

uint64_t getCPS() 
{ 
    return (~(uint64_t)0) /SYSPAGE_ENTRY(qtime) -> cycles_per_sec; 
} 

uint63_t getCurrentCycle() 
{ 
    return ClockCycles(); 
} 

然後運行一個函數

我在做

currentClockCycle = getCurrentCycle() - currentClockCycle; 

我沒有在整個應用程序中使用它,所以我沒有超時/溢出的時鐘,只是爲了在添加/更改後測量一個功能的性能。

無論如何, 我只是想知道如果我得到正確的輸出。

我計算的結果是這樣,

double result = static_cast<double>(clockPerSec)/currentClockCycle; 
// this get me the time in second?? 
// then multiplied it by 1000000 to get a micro-sec measurement 

我我做錯了什麼?使用

ftime(&t_start); 

然後

ftime(&t_end); 

和輸出的區別這樣,當

,我看到,我得到的時間比較大,幾乎是兩倍

第一種方法,我得到0.6毫秒 第二個使用ftime我得到結果1.xx ms

回答

0

你只是混合(測量)兩種不同的東西:時鐘週期是內核給你的應用程序的CPU滴答數 - 它不計算其他應用程序運行相同的內核。而ftime返回絕對(掛鐘)時間。所以兩個ftimes之間的差異返回兩個時間點之間的絕對持續時間。而第一隻計數測量多少CPU蜱你(和你的唯一)應用程序已經消耗...所以你可能會認爲這是專門您的應用程序運行時間 - 即如果在這臺主機沒有其他應用,第一次和第二次測量將(理論上)相等(或如此)。