慢速 for 循环,时序不一致
Slow for loop with inconsistent timing
我有一个大约这样的 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.96 秒,内循环报告 0.51 秒。为什么这些时间不一致?
其他注意事项:
- Timer 类是 c++11 时间库的包装器。这是有效的,而不是时间差异的原因。
- 函数 FindClosestPoints 是自包含的,不会生成任何线程。
- 这种奇怪的计时行为在数千次运行中是一致的。
- num_steps大约 1000 个
inner_loop_time
不包括摧毁std::vector<int> point
的时间或在timer2.Reset()
内花费的时间。
取决于num_steps
.每个循环周期都会在两个计时器之间产生很小的差异。因为重置内部计时器和计算经过的时间之间存在差距。
时差应该是成比例的。你可以用
diff = num_steps * gap_time
相关文章:
- 大于65535的C++数组[size]引发不一致的溢出
- 在 C++(和 C)中进行类型转换时明显不一致
- 填充上编译器生成的复制构造函数之间的不一致
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- CreateDIBSection为同一图像返回不一致的位图位值
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 模板参数推导不一致
- 声明中不一致的no是否违反ODR?
- 如何删除分支因子不一致的树,最大为 30,40
- C++ 使用递归而不是 for 循环
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 从 C 字符串构造 std::string 与从另一个 std::string 构造 std::string 不一致
- 这种比较是否不一致(或者存在其他问题)?
- 以下可变参数模板行为是否不一致?
- 如何修复我的链表读数不一致的问题?
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- void 函数中的指针参数返回不一致的值
- 为什么 C 编译器不在 for 循环体中给出重新声明错误?
- 慢速 for 循环,时序不一致