![](/img/trans.png)
[英]Unexpected execution time of a program in clock cycles with respect to dynamic scalling in linux
[英]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.