gpt4 book ai didi

C:在多线程程序中使用clock()测量时间

转载 作者:行者123 更新时间:2023-11-30 16:19:25 25 4
gpt4 key购买 nike

我总是使用clock()来测量我的应用程序从开始到结束所花费的时间,如下所示:

int main(int argc, char *argv[]) {
const clock_t START = clock();

// ...

const double T_ELAPSED = (double)(clock() - START) / CLOCKS_PER_SEC;
}

自从我开始使用 POSIX 线程以来,这似乎失败了。看起来,使用 N 个线程,clock() 的速度提高了 N 倍。由于我不知道有多少线程将同时运行,因此这种方法失败了。那么我如何测量已经过去了多少时间呢?

最佳答案

clock() 测量进程使用的 CPU 时间,而不是挂钟时间。当多个线程同时运行时,显然可以更快地消耗 CPU 时间。

如果你想知道挂钟执行时间,你需要使用适当的函数。 ANSI C 中唯一的一个是 time(),它通常只有 1 秒的分辨率。

但是,正如您所说,您使用的是 POSIX,这意味着您可以使用 time.h 中定义的 clock_gettime()。特别是 CLOCK_MONOTONIC 时钟最适合用于此目的:

struct timespec start, finish;
double elapsed;

clock_gettime(CLOCK_MONOTONIC, &start);

/* ... */

clock_gettime(CLOCK_MONOTONIC, &finish);

elapsed = (finish.tv_sec - start.tv_sec);
elapsed += (finish.tv_nsec - start.tv_nsec) / 1000000000.0;

(请注意,我已经仔细计算了elapsed,以确保在计时非常短的间隔时不会丢失精度)。

如果您的操作系统不提供 CLOCK_MONOTONIC(您可以在运行时使用 sysconf(_SC_MONOTONIC_CLOCK) 检查),那么您可以使用 CLOCK_REALTIME > 作为后备 - 但请注意,后者有一个缺点,即如果在进程运行时更改系统时间,它将生成不正确的结果。

关于C:在多线程程序中使用clock()测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55624904/

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