gpt4 book ai didi

c++ - clock_getres 和 clock_gettime

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:29 27 4
gpt4 key购买 nike

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

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

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

我该怎么做?这可能与 clock_getres 有关,但我不明白它究竟是如何工作的。

有谁知道如何获取循环数?

最佳答案

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);
}

关于c++ - clock_getres 和 clock_gettime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9021288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com