我想在工作的新计算机上强调处理器。我想一个好的方法是为每个处理器打开一个线程,该函数具有以下功能:
void soStressful() {
int j = 0;
for (int i = 0; i < 10000; ++i) {
j += i;
}
}
但是由于某种原因,编译器会删除此代码。(因为无论计算的复杂性或 i 的大小如何,程序都会立即运行)而且我们还记录了非常少的 cpu 使用情况。
如何停止编译器编译此代码?
我想在工作的新计算机上强调处理器。我想一个好的方法是为每个处理器打开一个线程,该函数具有以下功能:
void soStressful() {
int j = 0;
for (int i = 0; i < 10000; ++i) {
j += i;
}
}
但是由于某种原因,编译器会删除此代码。(因为无论计算的复杂性或 i 的大小如何,程序都会立即运行)而且我们还记录了非常少的 cpu 使用情况。
如何停止编译器编译此代码?
您的函数不接受输入,也不提供输出。所以编译器很容易发现它什么都不做。
我建议在你的循环中修改一个全局变量,最好声明为 volatile。然后编译器将无法假定它没有被使用。
此外,如果处理器速度很快,您将需要超过 10000 次迭代循环才能获得任何有意义的 CPU 使用率。
您可能想看看那里的一些基准测试代码 - dhrystone 就是其中之一。
只需j
从您的函数返回并在调用者中对其进行处理。但这是对处理器施加压力的一种不好的方法,因为它只加载处理器的一个非常有限的子集。根据您想要加载处理器的原因(您想确保它正常工作吗?您想尽可能地加热它吗?)您应该选择一个专门设计用于执行您想要的程序。Prime95是一种常见的。
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.