C++ 中以高精度测量执行时间

2025 年 5 月 24 日 | 4 分钟阅读

在许多软件应用程序中,精确测量执行时间至关重要,尤其是在优化代码或评估各种算法的性能时。

为了在C++中精确测量执行时间,必须使用 C++11 中引入的 <chrono> 库捕获和计算时间间隔。<chrono> 库提供了一系列时钟类型和时间相关实用程序,旨在比传统的 C 风格时间函数更准确和可移植。C++ 中有几个函数用于高精度测量执行时间。

1. 时钟类型

<chrono> 库提供了几种时钟类型,包括 std::chrono::steady_clock、std::chrono::high_resolution_clock 和 std::chrono::system_clock。high_resolution_clock 因为它在系统上提供最大的精度,所以通常被选择用于测量执行时间。

2. 时间点

时钟函数用于获取时间点和离散的时间时刻。为了找出代码段执行所需的时间,我们记下它的开始时间和结束时间。

3. 持续时间

两个时间点之间的差异表示为持续时间。它们计算代码段开始和结束之间的经过时间。

4. 持续时间单位

根据我们的要求,我们可以选择持续时间单位,例如毫秒、秒或微秒。

5. 精度和可移植性

虽然它通常以纳秒或更短的时间进行测量,但 <chrono> 的精度是实现定义的。

由于其跨平台和跨编译器兼容性,该库运行一致。

6. 优点

  1. 精度:由于 <chrono> 比传统的 C 时间函数更精确,因此可以更准确地进行测量。
  2. 可移植性:该库由于其平台无关性,可以在各种系统上测量执行时间。
  3. 一致性:通过保证跨平台和编译器的一致行为,时间测量不一致的可能性降低了。
  4. 易用性:由于语法简单,将高精度计时集成到我们的 C++ 代码中相当容易。

7. 用例

  1. 性能分析:查找瓶颈并增强关键代码段。
  2. 算法比较:通过测量执行时间来比较不同算法的效率。
  3. 实时系统:确保在实时应用程序中,特定进程在预定时间限制内完成。

示例

让我们举一个例子来说明如何在 C++ 中高精度测量执行时间。

输出

Execution Time: 1152 microseconds   

说明

1. 包含所需的头文件

这些行中包含的头文件需要用于输入/输出操作(<iostream>)和高精度计时功能(<chrono>)。

2. 捕获开始时间

在这种情况下,当前时间点是使用 std::chrono::high_resolution_clock::now() 获取的,并保存在变量 start_time 中。执行时间可以从这个点开始计算。

3. 测量执行时间的代码

此循环模拟计算密集型过程。它只是我们想要评估的代码的替代品。因此,计算执行时间时,了解操作的具体细节并不重要。

4. 捕获结束时间

与开始时间类似,此行将当前时间捕获到变量 end_time 中。这是我们需要测量其执行持续时间的代码块的结束点。

5. 计算持续时间

std::chrono::duration_cast 方法用于查找 start_time 和 end_time 之间的时间。之后,它被转换为微秒,以便使结果持续时间更易于阅读。

6. 打印执行时间

最终,执行时间计算将输出到控制台。持续时间以微秒为单位通过 duration.count() 检索。

7. 返回 0

为了通知操作系统程序已成功执行,主函数返回 0。

结论

总之,此代码记录了计算密集型任务的开始和结束时间,确定了它们之间的时间间隔,并将执行时间(以微秒为单位)输出到控制台。它提供了一个基本框架,我们可以修改该框架来衡量特定C++ 程序段的执行时间。