【问题标题】:obtaining time from clock cycles从时钟周期中获取时间
【发布时间】:2023-03-22 09:21:01
【问题描述】:

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

【问题讨论】:

    标签: c++ performance algorithm clock qnx


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2018-06-02
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      相关资源
      最近更新 更多