代码被编译器窃取,我该如何规避它的犯罪途径

Code stolen by the compiler, how do I circumvent its criminal ways

本文关键字:何规避 犯罪 编译器 代码      更新时间:2023-10-16

我想在一台正在工作的新计算机上强调处理器。我想一个很好的方法是为每个处理器打开一个线程,函数为:

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

但由于某种原因,编译器会带走这些代码。(因为无论计算的复杂性或i的大小如何,程序都会立即运行)而且我们记录的cpu使用量也很少。

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

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

我建议在循环中修改一个全局变量,最好声明为volatile。那么编译器将不能假定它没有被使用。

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

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

只需从函数中返回j,并在调用方中对其进行处理。但这是一种给处理器带来压力的糟糕方式,因为它只加载处理器的非常有限的子集。根据你想要加载处理器的原因(你想确保它正常工作吗?你想尽可能多地加热它吗?)你应该选择一个专门为你想做的事情而设计的程序。Prime95是一种常见的。

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

如果真的想强调处理器:

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

添加更多级别,并将其放入循环中。

这是多年前PDP-11的浸泡试验。