1

我想在工作的新计算机上强调处理器。我想一个好的方法是为每个处理器打开一个线程,该函数具有以下功能:

void soStressful() {
    int j = 0;
    for (int i = 0; i < 10000; ++i) {
        j += i;
    }
}

但是由于某种原因,编译器会删除此代码。(因为无论计算的复杂性或 i 的大小如何,程序都会立即运行)而且我们还记录了非常少的 cpu 使用情况。

如何停止编译器编译此代码?

4

4 回答 4

6

您的函数不接受输入,也不提供输出。所以编译器很容易发现它什么都不做。

我建议在你的循环中修改一个全局变量,最好声明为 volatile。然后编译器将无法假定它没有被使用。

此外,如果处理器速度很快,您将需要超过 10000 次迭代循环才能获得任何有意义的 CPU 使用率。

您可能想看看那里的一些基准测试代码 - dhrystone 就是其中之一。

于 2013-02-11T02:25:39.677 回答
5

只需j从您的函数返回并在调用者中对其进行处理。但这是对处理器施加压力的一种不好的方法,因为它只加载处理器的一个非常有限的子集。根据您想要加载处理器的原因(您想确保它正常工作吗?您想尽可能地加热它吗?)您应该选择一个专门设计用于执行您想要的程序。Prime95是一种常见的。

于 2013-02-11T02:41:00.613 回答
4

尝试在变量上使用“ volatile ”关键字。这当然是忽略了你需要做更多的事情来给你的电脑带来压力的事实。您可能会发现这个答案很有用,尽管我会非常认真地对待该代码的警告。

于 2013-02-11T02:25:18.943 回答
2

If you really want to stress the processor:

tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(0.5d))))))))))))))))))))));

Add a whole lot more levels, and put it into a loop.

This was a soak-test for the PDP-11 many years ago.

于 2013-02-12T00:08:51.783 回答