clock_getres and clock_gettime

clock_getres and clock_gettime

本文关键字:clock gettime getres and      更新时间:2023-10-16

我正试图用clock_MONOTONIC时钟,用clock_geters和clock_gettime来测量程序的一部分。

如果我理解正确,clock_gettime会通过测量某种外部时钟(而不是cpu)来获取经过的时间,并在他引用的struct-timespec实例中更新它,作为paramer。(即以纳秒分辨率返回结果)

我需要知道的不是实际时间,而是时钟(clock_MONOTONIC)的周期数。

我该怎么做?这可能与时钟有关,但我不明白它到底是如何工作的。

有人知道如何计算循环次数吗?

Clock_gettime为您获取epoch(或过去的其他固定时间,具体取决于您平台上的具体实现)与所选时钟上的当前时间(在您的情况下为Clock_MONOTONIC)之间的经过时间。

要测量一个过程需要多长时间,需要调用两次并计算差值。类似于:

int main()
{
    timespec start, finish;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
    //code you want to profile
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish);
    //calculate the difference between start and finish     
    return 0;
}

注意,这会给你一个时间值,如果你想知道CPU周期,那么你必须使用类似rdtsc:的东西

#include <stdio.h>
#include <intrin.h>
#pragma intrinsic(__rdtsc)
int main()
{
    unsigned __int64 i;
    i = __rdtsc();
    printf_s("%I64d ticksn", i);
}