gpt4 book ai didi

c - gettimeofday() 微秒不限于秒以下

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

当我输出 gettimeofday() 的微秒字段时,我注意到微秒字段大于 1,000,000。有人知道为什么吗?这是否意味着我对 gettimeofday() 的解释是错误的?

郑重声明,我的假设是,根据 gettimeofday() 的当前时间(以微秒为单位)如下:

struct timeval ts;
gettimeofday(&ts, NULL);
printf("%zu", ts.tv_sec * 1000000 + ts.tv_usec);

编辑:这是导致问题的代码。在下面的注释之后, printf() 可能有问题。

struct timeval curr_time;
gettimeofday(&curr_time, NULL);
printf("Done-arino! Onto the matrix multiplication (at %zu s, %03zu ms)\n", curr_time.tv_sec, curr_time.tv_usec);

// Matrix Multiplication
struct timeval start_tv, end_tv, elapsed_tv;
gettimeofday(&start_tv, NULL);
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
for (k = 0; k < N; k++)
C[i][j] += A[i][k] * B[k][j];
gettimeofday(&end_tv, NULL);
timersub(&end_tv, &start_tv, &elapsed_tv);

// Print results
printf("Elapsed time: %zu s, %03zu ms\n", elapsed_tv.tv_sec, elapsed_tv.tv_usec / 1000);

最佳答案

成功gettimeofday后,是的,tv_usec保证严格小于1000000。

如果您(认为您)看到的值为 1000000 或更大,那么是的,您可能做错了什么。

一个常见的错误是天真地添加或减去两个 struct timeval 值,而没有在 tv_sectv_usec 字段之间实现适当的进位或借位,这很容易导致(错误的)tv_usec 中的值大于 1000000。(在您编辑的帖子中,您提到减去时间规范,但您正在使用系统提供的 timersub 应该正确借用的函数。)

如果您使用 struct timespec 而不是 struct timeval,并且如果正在进行闰秒,并且如果 你(奇迹般地)使用了一个操作系统内核,该内核实现了 Markus Kuhn 在 https://www.cl.cam.ac.uk/~mgk25/posix-clocks.html 中提出的 CLOCK_UTC 时钟类型。 ,您会看到 tv_nsec 值大于 1000000000,但这是很多“if”。 (据我所知,广泛使用的内核还没有实现过 CLOCK_UTC。)

关于c - gettimeofday() 微秒不限于秒以下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50547661/

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