从时钟周期中获取时间

时间:2013-08-06 19:52:31

标签: c++ performance algorithm clock qnx

我正在运行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

1 个答案:

答案 0 :(得分:0)

你只是混合(测量)两个不同的东西:时钟周期是内核为你的应用程序提供的CPU滴答计数 - 它不计算运行其他的应用程序由同一个内核。而ftime返回绝对(挂钟)时间。因此,两个ftimes之间的差异会返回两个时间点之间的绝对持续时间。虽然第一个计算只是衡量你的(并且只有你的)应用消耗了多少CPU滴答...所以你可以认为这只是你的app运行时间 - 即如果没有该主机上的其他应用程序,第一次和第二次测量将(理论上)相等(或等)。