【问题标题】:Measure the execution time of a function call in C++测量 C++ 中函数调用的执行时间
【发布时间】:2016-06-23 06:19:23
【问题描述】:

如何测量C++inWindows中的一行代码的执行时间。我正在插入大约 1,00,000 条记录 boost::multi_index_container,如下所示:

while(...) //read a single record from a csv file until EOF
{
    ...
    while(...) // split the record into components based on delimiter
    {
        ...
    }
    //insert into boost::multi_index_container
} 

我需要找到插入所有记录所需的时间,但没有循环的执行时间。在插入函数之前启动 timer 或任何东西,并在函数调用之后计算经过的时间,结果为 0 nanoseconds。所以我无法通过总结各个时间来计算时间。解决办法是什么?

【问题讨论】:

  • 原则上,您可以这样处理: 1. 测量空循环的时间(但要确保它没有被优化掉)。 2. 测量插入循环的时间。 3.拿差价。 Devil 很详细,但如果你想测量,你应该测量优化的代码,而不是调试代码。然后,有一个机会,优化器会让你更难。检查汇编器输出以确保您测量的是您认为自己测量的内容。由于您也不希望文件读取时间,因此您可能会想出一些额外的步骤和差异来最终获得所需的内容。
  • 不知你为什么需要这个度量呢?
  • @pradyot:我想要一个Windows系统的解决方案
  • @BitTickler:我会试一试..但不太确定我理解你的意思..
  • @Jackzz。很明显。为什么需要衡量绩效?

标签: c++ windows execution-time boost-multi-index


【解决方案1】:

在 Windows 上,您可以使用 QueryPerformanceCounter 获得准确的测量结果。

【讨论】:

  • QPC 将每次插入的执行时间设为 0。正如我所提到的,我需要总执行时间来插入 10 万条记录。
  • 您可能需要以某种方式测量 CPU 周期以获得细粒度的东西。
  • 正如我上面提到的,如果您要测量的内容太小,请测量多次执行所需的时间(因此需要可测量的时间)。然后,魔术操作是“除法”:total_time / N 如果 N 是该操作已执行的次数。由于您的循环和文件访问也增加了总时间,因此您需要在没有插入操作的情况下比较运行相同的代码。然后(total_time - total_time_compare) / N.
【解决方案2】:

How to calculate a time difference in C++ 的可能重复项。 有很多方法可以做到这一点。我喜欢的一个使用chrono。

   #include <iostream>
   #include <chrono>

   using namespace std;
   using namespace std::chrono;



   int main()
  {
    high_resolution_clock::time_point t1 = high_resolution_clock::now();
    //your code here
    high_resolution_clock::time_point t2 = high_resolution_clock::now();

    auto duration = duration_cast<microseconds>( t2 - t1 ).count();

    cout << duration;
    return 0;
  }

【讨论】:

  • 计算时间以微秒为单位。
  • 我已经尝试过了......再次它不会给出不包括循环的执行时间
  • 它在我的电脑上运行良好。你介意我问一下,你到底在做什么。您是否尝试过链接中提供的其他方法。
猜你喜欢
  • 2023-03-09
  • 2016-01-28
  • 2014-10-04
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多