clock_getres和clock_gettime

时间:2012-01-26 16:18:01

标签: c++ linux

我正在尝试使用clock_getres和clock_gettime来测量我的程序的一部分,使用CLOCK_MONOTONIC时钟。

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

我需要知道的不是实际时间,而是时钟(CLOCK_MONOTONIC)的循环次数。

我该怎么做?这可能与clock_getres有关,但我无法理解它是如何工作的。

有谁知道如何获得周期数?

1 个答案:

答案 0 :(得分:0)

Clock_gettime可以获取纪元之间经过的时间(或过去的其他固定时间,具体取决于您平台上的具体实施)和所选时钟的当前时间(在您的情况下为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 ticks\n", i);
}