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

我正在尝试做的是让用户输入他们要运行每种方法多少次,遍历它们并计算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 herestd::chrono::duration_cast here的更多信息。

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

10-12 14:59