gpt4 book ai didi

c - gettimeofday/settimeofday 使函数看起来不花时间

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

我有一个辅助函数可以执行一些非常昂贵的操作。

我正在尝试分析算法的主要部分,但这个辅助函数在其中被调用了很多次。因此,测量的时间考虑了辅助功能的时间。

为了解决这个问题,我决定设置和恢复时间,使辅助功能看起来是瞬时的。我定义了以下宏:

#define TIME_SAVE struct timeval _time_tv; gettimeofday(&_time_tv,NULL);
#define TIME_RESTORE settimeofday(&_time_tv,NULL);

. . .并将它们用作辅助函数的第一行和最后一行。但是,出于某种原因,辅助函数的开销仍然包括在内!

所以,我知道这是一个有点困惑的解决方案,所以我继续前进,但我仍然很好奇为什么这个想法没有奏效。谁能解释一下为什么?

最佳答案

如果您坚持以这种方式进行分析,请不要设置系统时钟。如果您有权这样做,这将破坏各种各样的事情。基本上你应该忘记你曾经听说过 settimeofday。您要做的是在要从测量中排除的函数之前和之后调用 gettimeofday,然后计算差值。然后,您可以从总时间中排除花在该功能上的时间。

话虽如此,这整个“分析”方法存在很大缺陷,因为 gettimeofday 可能 (1) 与您要测量的内容相比花费大量时间,并且 (2 ) 可能涉及到内核空间的转换,这会对程序的缓存一致性造成严重损害。第二个问题是最有问题的,即在试图观察您的程序的性能特征时您实际上改变了它们。

你真正应该做的是忘掉这种分析(gettimeofday 甚至 gcc 的 -pg/gmon 分析),而是使用 oprofileperf 或类似的东西。这些现代分析技术的工作原理是定期对指令指针和堆栈信息进行统计采样;您的程序自己的代码根本没有被修改,因此它的行为尽可能接近没有运行分析器的行为。

关于c - gettimeofday/settimeofday 使函数看起来不花时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370128/

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