gpt4 book ai didi

c++ - 计算 CPU 节拍

转载 作者:行者123 更新时间:2023-11-28 00:15:40 25 4
gpt4 key购买 nike

我正在构建一个项目,在速度方面比较一些单例方法。

我想做的是要求用户输入他们希望每个方法运行多少次,遍历它们并计算 CPU 滴答。

问题是CPU thick全为0,怎么办?

这是我的代码:

int numOfCalls;
cout << "How many calls do you want for each?";
cin >> numOfCalls;
clock_t beg, end;
beg = clock();
for (size_t i = 0; i != numOfCalls; i++)
Object* p = GofFixed::instance_GofFixed();
end = clock();
cout << (beg-end) / CLOCKS_PER_SEC << endl;
beg = clock();
for (size_t i = 0; i != numOfCalls; i++)
Boost::instance_Boost();
end = clock();
cout << (beg - end) / CLOCKS_PER_SEC << endl;

最佳答案

clock_t 是标准允许的整数类型。如果是,则它受整数除法规则的约束。看起来您的基准测试可能会在不到一秒的时间内运行。如果是,则 (beg - end)/CLOCKS_PER_SECOND 将生成小于 1 的结果,然后将其截断为 0。

更好的计时方式是使用 std::chrono::high_resolution_clock。然后您可以转换为标准库支持的任何时间单位。最好使用较小的时间单位,以便保持亚秒级测量。使用 chrono 会将您的代码更改为:

auto beg = std::chrono::high_resolution_clock::now();
for (size_t i = 0; i != numOfCalls; i++)
Object* p = GofFixed::instance_GofFixed();
auto end = std::chrono::high_resolution_clock::now();
cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - beg).count() << endl;
// ^^^^^^^^^^^^ Used milliseconds instead
// for greater accuracy

如果基准测试没有被优化或者花费的时间不少于一毫秒,这应该可以工作。

您可以在 std::chrono::high_resolution_clock 上阅读更多信息 herestd::chrono::duration_cast here .

关于c++ - 计算 CPU 节拍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30495286/

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