代码被编译器窃取,我该如何规避其犯罪方式

Fan*_*Fox 1 c++ compiler-construction multithreading for-loop compiler-optimization

我想在工作的新计算机上强调处理器.我认为一个好方法是用每个处理器为这个函数打开一个线程:

void soStressful() {
    int j = 0;
    for (int i = 0; i < 10000; ++i) {
        j += i;
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,编译器将此代码移除.(因为无论计算的复杂程度或i的大小,程序都会立即运行,并且我们也记录了很少的CPU使用率.

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

Cly*_*yde 6

您的功能不带输入,也不提供输出.所以编译器很容易发现它什么都不做.

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

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

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


Dav*_*rtz 5

只需j从您的函数返回并在调用者中执行某些操作.但这是一种强调处理器的坏方法,因为它只加载非常有限的处理器子集.根据你为什么要负载的处理器(你要确保它的工作吗?你想将其加热尽可能?)你应该选择专为你想要做什么的程序.Prime95是一个常见的.