【问题标题】:How to count the time the while loop has been running in C++如何计算while循环在C++中运行的时间
【发布时间】:2021-12-29 03:29:51
【问题描述】:

我想知道是否有可能以任何方式计算 while 循环运行的时间(以秒为单位)。我想创建一个循环并更改函数中的变量,它是多少秒。

下面的例子:

bool verif = true;
while(verif)
{
    /*
    Do some operations
    return number of seconds
    */
}

【问题讨论】:

  • 看看std::chrono::steady_clock
  • 这能回答你的问题吗? Measuring execution time of a function in C++
  • 您可以使用 std::chrono::high_precission_clock,确保在循环中运行代码(多次调用)并始终测量多次。但是,我更喜欢在真实代码上使用分析器,它们还为您提供有关调用依赖关系的信息,因此更容易找到代码中真正的瓶颈所在。还要确保您的功能不受内存访问的限制。有时将数据足够快地传输到 CPU 是一个问题,需要采用不同的优化方法。

标签: c++ c++20


【解决方案1】:

基本上有两种非常相似的方式:

  1. 使用 std::chrono::steady_clock::now() 是“标准”方法。这可以看到here in this post。这种方法的问题是例程now() 本身具有不可忽略的执行时间,并且它也具有显着的抖动。因此,建议仅测量持续时间大于 1 毫秒的循环。

  2. 使用时间戳计数器。这是特定于架构的。在 x86 上,每个内核上都有一个时间戳计数器和一条轻松检索它的指令。在 ARM 上,这并不容易,因为您必须在使用内核模块之前启用该性能计数器。这种方法称为“微基准测试”,适用于 1 毫秒以下的快速代码段。这被描述为here in this answer

【讨论】:

  • 为了进行基准测试,您可以通过外部循环多次运行相同的代码/循环以获得更精确的测量结果并使用稳定时钟。但是编译器优化和缓存可能会影响结果。
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2016-07-13
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
相关资源
最近更新 更多