gpt4 book ai didi

c++ - 如何获得准确的绩效指标?

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

在我们的项目中,我们试图自动监控测试运行的性能,以确保我们的程序性能不会随着时间的推移而发生任何重大变化。

问题是我们得到的测量值似乎始终存在 5% 的可变性。也就是说,在具有相同程序(无重新编译)的同一台机器上运行相同的测试,我们得到的值在每次运行之间相差大约 5%。这对于我们想要使用这些数字的目的来说太多了。

我们已经从时序考虑中排除了设置成本——也就是说,从 C++ 代码本身,我们在运行时间关键部分之前和之后立即抓取时间,而不是对整个程序进行时序操作系统级别。我们也在做平均和异常值排除。问题是变异性看起来也有长期趋势,所以我们得到了紧挨着彼此的重复时间的紧密聚类,但一两个小时后时间就大不相同了。 (不幸的是,将测试分散在几个小时内是不可行的。)测试也在一台专用机器上运行,而“没有别的”在上面运行。

我们不太确定时序变化的来源,但它可能与处理器和系统有关 - 有迹象表明变化的大小取决于程序运行的机器。

有没有人知道这种变化可能来自哪里,以及如何消除它?测试在专用机器上运行,因此可以更改操作系统设置。

(如标签所示,这是一个在 x86 Linux 系统上运行的 C++ 程序,如果这有助于澄清事情的话。)

编辑:回复评论

我们目前的计时方案是使用 C 标准库中的 clock() 函数,查看我们要测试的函数之前/之后的返回值差异。

我们正在测试的代码应该是确定性的,并且不应涉及繁重的 IO。

我意识到“银弹”答案的情况有点模糊。我想我更想寻找“这些是需要考虑的重要因素,这是您可能应该检查它们的顺序,这是检查每个因素的方法”类型的答案。

最佳答案

我很惊讶你能将变异降低到 5%。

除非您可以摆脱系统上运行的所有不必要的东西,否则您将获得高变化。这是在顶层。

您的操作系统需要确定性。您需要知道正在运行的其他任务和线程及其持续时间。例如,有时钟中断。现在,有多少其他功能链接到此中断?这些其他功能是否有所不同?

您的系统是隔离的吗?例如,如果您的系统连接到网络,您的测量值可能会有所不同。

您的程序是否使用外部资源?例如硬盘。如果程序写入硬盘驱动器,则驱动器将不确定。文件和部分文件可能会在驱动器上移动。驱动器可能会变得碎片化。这种碎片可能会导致您的测量结果出现差异。

操作系统内存可能会碎片化。此外,可执行文件的内存可能会变得碎片化。碎片化可能会增加方差。

关于c++ - 如何获得准确的绩效指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29309234/

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