簡體   English   中英

從時鍾周期獲取時間

[英]obtaining time from clock cycles

我正在運行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毫秒

您只需混合(衡量)兩種不同的事物: 時鍾周期是內核給您的應用提供的CPU滴答計數–它不計算由同一內核運行的其他應用。 ftime返回絕對(掛鍾)時間。 因此兩個ftimes之間的ftimes返回兩個時間點之間的絕對持續時間。 而第一個計數只是衡量您(並且只有您)的應用已消耗了多少CPU滴答聲...因此,您可以將其視為應用的運行時間 -即,如果該主機上沒有其他應用,則進行第一次和第二次測量(理論上)將相等(或如此)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM