【问题标题】:Timestamp in C++C++中的时间戳
【发布时间】:2020-01-17 00:57:37
【问题描述】:

我想知道使用时间戳来测试某个程序或代码块执行多长时间的程序的运行时间。我不明白时间戳的概念,因为我一直在阅读时间戳的定义及其用途,而且我还遇到了显示当前日期和时间的问题,这对解决我的问题没有帮助。我期待着对这个话题有所启发。祝你今天过得愉快!谢谢!

【问题讨论】:

  • 提醒,系统中发生的其他活动可能会影响程序的执行。一项活动是更高优先级的任务(这些任务会随着您的程序“切换出去”)。另一个是数据总线的使用(由其他内核和硬件组件)。你必须适应平均持续时间。一个简单的测量将涉及最少 1.0E6 次迭代。在互联网上搜索“基准 C++ 程序”
  • 老兄,时间戳和基准测试有什么区别?我可以阅读一些 cmets,它们都非常适合了解某个代码块的 Big O 表示法,但这不能相似。希望能对这件事情多多指教,谢谢!
  • 时间戳是一个时间点。它的编码方式和分辨率各不相同。可以使用两个时间戳来计算它们之间的距离,即经过的时间。
  • 时间复杂度与时间关系不大。 Big O 仅告诉您随着输入大小的增加可能会发生多少工作。给定数据集的经过时间和已知的时间复杂度,您可以估计对不同大小的数据集执行相同操作需要多长时间,但仅此而已。
  • 基准测试是衡量程序或程序的一部分的性能。时间戳是一个时间点。您可能需要在时间戳之间多次运行代码才能获得有效的持续时间(例如,如果您的时间戳分辨率以毫秒为单位,但代码以纳秒为单位运行)。基准测试过程包括有关如何处理异常的信息,例如任务交换。记得在分析之前验证构建的优化级别。

标签: c++ timestamp runtime


【解决方案1】:

假设你有一个时钟。如果您检查时间并将其写在纸上,那就是时间戳。就在您开始一些活动之前,您可以写下当前时间,然后开始您的活动。完成后,您再次查看时钟并记下新的时间戳。然后,您可以计算两个时间戳的差异,以查看该活动需要多长时间才能完成。

在 C++ 中,您可以使用 chrono library。 下面的程序是一个例子

#include <iostream>
#include <chrono>

using namespace std::chrono;
using Clock = std::chrono::steady_clock;

int main(int argc, char *argv[])
{
    // That's your first time stamp
    auto tic = Clock::now();

    // Some complicated code

    // That is your second timestamp
    auto toc = Clock::now();

    // Compute the difference between the timestamps and cast it to a number
    // expressing the difference into some unit (how many milliseconds that
    // difference is).
    std::cout << "Elapsed time: " << duration_cast<milliseconds>(toc - tic).count() << std::endl;

    return 0;
}

像这样计算时间戳之间的差异是对代码的某些部分进行基准测试的一种可能方法。当然,持续时间会受到其他因素的影响,例如系统负载等。通常您希望在循环中多次运行相同的代码块并平均持续时间以获得更好的估计。

【讨论】:

  • 注意:chrono 受限于它从底层系统获得的支持。虽然它提供纳秒级分辨率,但通常无法达到纳秒级精度。有时你能得到的最佳时间是几十毫秒,这不足以为每秒可以做数十亿件事情的计算机所执行的工作计时,除非你让这台计算机去做数十亿件事情。
猜你喜欢
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 2014-04-07
  • 2020-10-10
  • 2019-01-22
相关资源
最近更新 更多