gpt4 book ai didi

c++ - 简单 for 循环中的大量时间损失

转载 作者:行者123 更新时间:2023-12-03 06:50:25 27 4
gpt4 key购买 nike

我有一个非常简单的程序来测量一个函数花费了多少时间。

#include <iostream>
#include <vector>
#include <chrono>
struct Foo
{
void addSample(uint64_t s)
{
}
};

void test(const std::vector<uint64_t>& samples)
{
uint32_t onlyCallTime = 0;
uint32_t loopOnlyTime = 0;
Foo stats;
std::chrono::high_resolution_clock::time_point callStart,callEnd;
auto start = callStart = callEnd = std::chrono::high_resolution_clock::now();
for(auto &s : samples)
{
callStart = std::chrono::high_resolution_clock::now();
loopOnlyTime += std::chrono::duration_cast<std::chrono::microseconds>(callStart-callEnd).count();
stats.addSample(s);
callEnd = std::chrono::high_resolution_clock::now();
onlyCallTime += std::chrono::duration_cast<std::chrono::microseconds>(callEnd-callStart).count();
}
auto end = std::chrono::high_resolution_clock::now();

std::cout << "overall duration: " << std::chrono::duration_cast<std::chrono::microseconds>(end-start).count() << std::endl;
std::cout << "only call duration: " << onlyCallTime << std::endl;
std::cout << "only loop duration: " << loopOnlyTime << std::endl;
}

int main()
{
std::vector<uint64_t> dataSetDecreasing;
for(uint32_t i = 0; i < 1000000; ++i)
dataSetDecreasing.push_back(1000000-i);
test(dataSetDecreasing);
}
输出真的很困惑。这里有些例子:
overall duration: 56047
only call duration: 195
only loop duration: 285
overall duration: 40984
only call duration: 177
only loop duration: 243
overall duration: 47328
only call duration: 187
only loop duration: 177
我怎么看是 callEnd-callStart捕获对 addSample 的调用+ duration_cast . callStart-callEnd捕获其他所有内容,因此循环初始化、迭代、条件和第二个 duration_cast .我错过了什么?其他 ~40000 微秒去哪里了?
编译 g++ -Wall -Wextra -std=c++17 -O3 g++ (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)我的操作系统是 Fedora 版本 32(三十二)

最佳答案

1 000 000 次迭代大约需要 50 000 微秒。平均每次迭代不到 1μs, std::chrono::duration_cast<std::chrono::microseconds>将在小于 1μs 的任何时间舍入到 0 .这意味着您的循环只计算由于某种原因(调度、页面错误、缓存可能)花费比平均时间更长的迭代。
由于每次测量都有一个与所测量的持续时间(加上其他误差)无关的基本误差,因此进行多次小测量并将它们相加将比一次测量整个持续时间精确得多。

关于c++ - 简单 for 循环中的大量时间损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63799127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com