缓慢循环,时间不一致

时间:2016-05-31 22:09:08

标签: c++ performance for-loop

我有一个大约有这个的for循环:

Timer timer1, timer2;
double inner_loop_time = 0;
timer1.Reset()
for (int i = 0; i < num_steps; i++) {
  timer2.Reset();
  sample_point += delta;

  // Find some points close to the sample_point.
  std::vector<int> point;
  FindClosestPoints(sample_point, &new_keypoints);
  // Insert the keypoints into a global container.
  candidate_keypoints.insert(new_keypoints.begin(),
                             new_keypoints.end());
  inner_loop_time += timer2.ElapsedTimeInSeconds();
}
const double outer_loop_time = timer1.ElapsedTimeInSeconds();
std::cout << "Inner loop time: " << inner_loop_time 
          << " vs outer loop time: " << outer_loop_timer;

当我运行此代码时,内循环和外循环之间的时序之间会出现显着的不一致。例如。外循环报告0.96s,内循环报告0.51s。为什么这些时间不一致?

其他说明:

  • Timer类是c ++ 11时间库的包装器。这是有效的,而不是时间差异的原因。
  • 函数FindClosestPoints是自包含的,不会产生任何线程。
  • 这种奇怪的计时行为在数千次运行中是一致的。
  • num_steps大约为1000

2 个答案:

答案 0 :(得分:0)

inner_loop_time不包括销毁std::vector<int> point的时间或timer2.Reset()内的时间。

答案 1 :(得分:0)

取决于num_steps。每个循环周期确实在两个定时器之间产生很小的差异。因为重置内部计时器和计算通过时间之间存在差距。

时差应该是成比例的。您可以使用

计算它
diff = num_steps * gap_time