【问题标题】:How to test the CPU with a simple C++ program [closed]如何使用简单的 C++ 程序测试 CPU [关闭]
【发布时间】:2016-05-11 00:38:23
【问题描述】:

在我看来,我有两种方法可以做到这一点:
一种是使用循环:

t1 = getTime();
for(int i = 0; i < 9999999; i++)
{}
t2 = getTime();

现在我可以查看t2 - t1

另一种是创建多个线程,每个线程执行上面相同的循环。

我不知道第二种方法是否比第一种更好。

或者也许有更好的方法来测试 CPU?

【问题讨论】:

  • 测试 CPU 做什么?
  • @jaket 我认为这措辞很糟糕。看起来他们对代码执行的时间感到好奇。
  • 现代优化器会抛弃你的整个循环。正如@jaket 所说,您想通过此测试实现什么目标?您如何“测试自行车”?您是否举起后轮并用一只手旋转踏板,如果车轮转得快,就得出结论说这辆自行车一定是好的?

标签: c++ cpu benchmarking timing


【解决方案1】:

这个循环什么都不做,每个合理的编译器都会对其进行优化。

要获得合理的基准测试结果,您必须解决(有些)合理的问题,例如计算 pi 的多个数字、找到大素数或任何您想要基于 fast 定义的任务em>,高效算法的良好实现。

【讨论】:

    【解决方案2】:
    t1 = getTime();
    int n=0;
    for (int i = 0; i < 1000000000; i++)
        n += i;
    t2 = getTime();
    cout << n << endl;
    

    【讨论】:

    • a) 这至少会在最常见的平台上溢出int。 b) 仍然优化到 O(1) 操作:coliru.stacked-crooked.com/a/a585579144bf54eb
    • b) 用 g++ -O3 检查它;至少 g++ 没那么聪明
    • a) 那是未定义的行为,就是这样。编译器可以把它变成它想要的任何东西。
    • 赌你 50 美元。
    • 啊 cplusplus.com。好在 C++ 是标准化的:“如果在计算表达式期间,结果未在数学上定义或不在其类型的可表示值范围内,则行为未定义。” 5/4 in N4140 还好有better reference
    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多