gpt4 book ai didi

c++ - clock_gettime 返回一些异常值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:35 26 4
gpt4 key购买 nike

我正在尝试用这个类分析一个程序:

namespace smtx{
class CPerformance_clock
{
timespec t1;

timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

public :
CPerformance_clock(){}
/**
* Starts the clock by taking the initial measure
*/
void start()
{
assert(clock_gettime(CLOCK_MONOTONIC_RAW,&t1) == 0);
}
long int getElapsedTime()
{
timespec t2, final;
assert (clock_gettime(CLOCK_MONOTONIC_RAW,&t2) == 0);
final = diff(t1, t2);
return (final.tv_sec * 1000000000) + final.tv_nsec;

}

void restart()
{
clock_gettime(CLOCK_REALTIME,&t1);
}
};
};

我用这段代码控制最小、最大和平均时间

if(t > max_time)
{
max_time = t;
}
if(t < min_time)
{
min_time = t;
}
++count_time;
sum_time += t;
chunk_sum_time +=t;
++chunk_count_time;

没什么特别的。但是当我执行程序时,最大时间总是有一个额外的时间值:最短时间:40784 时为 831 ns,Max_time:1123 时为 9773850 ns最长时间比总执行时间长得多,所以我不明白这一点。我在显示数据的过程中不做任何除法转换,以免丢失数据。

我读过这篇文章,Linux clock_gettime(CLOCK_MONOTONIC) strange non-monotonic behavior , 但我的内核是最新的,尽管也是 ubuntu。

最后,我用 CLOCK_MONOTONIC、CLOCK_REALTIME、CLOCK_MONOTONIC_RAW 进行了测试,但没有解决这个问题。

此外,我不确定这是否重要,但我正在虚拟机上编写和执行该程序。

有帮助吗?

编辑:举例说明我的问题:我在大约 60 秒内处理了 4.000.000 个结果。每个结果的平均时间为 4000 纳秒。一个奇怪的错误可能是 14 秒,但程序运行平稳,并在任何时候停止 14 秒。

在执行 500.000 个结果时(在 3 秒内执行),我得到类似的 MAX_TIME,比如 9 秒。

提前致谢

最佳答案

波动是由操作系统调度程序引起的。它会暂停您的进程并让其他进程有机会运行。

你能用 CLOCK_PROCESS_CPUTIME_ID 报告结果吗?

关于c++ - clock_gettime 返回一些异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788960/

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