如何测量共享资源计算机上进程的实际执行时间

How to measure real execution time for a process on a shared-resource machine

提问人:mrozo 提问时间:11/16/2023 最后编辑:mrozo 更新时间:11/16/2023 访问量:50

问:

我正在研究优化算法,并且正在一台在多个用户(C++)上共享资源的机器上测试这些算法。

对我来说很重要的一件事是我的算法的执行时间。它应该工作一分钟,然后给我结果。但是,由于我并行运行多个实例,并且我不是唯一一个使用这些计算机的人,因此我不确定测量执行时间的方法。

我是什么意思? 假设我独自一人在机器上,我的算法在一分钟的实时时间内将进行 n 次迭代。问题是,当机器被其他用户超载时,它可能会影响结果,在同一个中,我们将给我 0.9n 次迭代。

如何测量实际执行时间?我的意思是,CPU 在我的进程上花费的实时时间?更重要的是,我如何测试这些条件下的措施是否有效?我正在检查睡眠或任务暂停是否会影响时间,但对于不同的编译器来说似乎有所不同。

我在 Ubuntu 和 Cygwin for Windows 上使用 g++ 和 mingw32-g++。但我们可以假设,我将转向两者的“正常”g++。

我尝试过 std::chrono::steady_clockQueryPerformanceCounter(但它仅适用于 Windows)和 clock()。看起来最后一个应该可以解决问题,但我读到它不应该被使用。我的目标是0.5秒的精度,所以我不需要任何超精确的方法。

我希望你能帮助我,特别是我应该如何尝试模拟这种超载行为。

C++ 时间 共享资源

评论

0赞 Pepijn Kramer 11/16/2023
不要给自己计时,使用分析器(可以根据花费的 CPU 周期进行测量)。您将无法通过使用 C++ 计时函数获得准确的读数。分析的额外好处是,您将确切地看到哪个函数调用(在您的算法中)将成为您的瓶颈(并且在运行并行算法时,这很可能正在等待锁定)
1赞 Howard Hinnant 11/17/2023
用。如果这给您带来了问题,请报告不满意的地方。clock()
0赞 mrozo 11/20/2023
@HowardHinnant它没有给我带来任何问题,我只是阅读了不应该使用的 HEREclock()
1赞 Howard Hinnant 11/20/2023
该问题的公认答案是,当您想要测量处理器时间而不是“挂钟”时间时,应该使用该答案。 恰恰适合您的用例,否则就不好了。clock()clock()
1赞 Howard Hinnant 11/20/2023
还行。我不相信有任何其他便携式工具可以测量 C 或 C++ 中的处理器时间。

答: 暂无答案