我正在构建一个项目,该项目在速度方面比较了单例的一些方法。
我正在尝试做的是让用户输入他们要运行每种方法多少次,遍历它们并计算CPU滴答声。
问题是CPU厚度全为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>(beg - end).count() << endl;
// ^^^^^^^^^^^^ Used milliseconds instead
// for greater accuracy
如果未优化基准测试或不超过一毫秒,则应该可以使用该方法。
您可以阅读有关
std::chrono::high_resolution_clock
here和std::chrono::duration_cast
here的更多信息。关于c++ - 计算CPU滴答,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30495286/