我正在创建一个测试程序来测试程序的功能,它计算CPU利用率.
现在我想在CPU利用率为100%,50%0%等的不同时间测试该程序.
我的问题是如何使CPU能够利用到100%,也可以是> 80%.
我认为创建一个while循环就足够了
while(i++< 2000) { cout<<" in while "<< endl; Sleep(10); // sleep for 10 ms. }
运行此后,我没有获得高CPU利用率.什么是可能的解决方案,使高CPU密集?
你使用循环是正确的,但是:
你有IO
你有一个睡眠
基本上,与正在睡眠或等待IO的时间相比,该循环中的任何内容都不会花费很多CPU时间.
要杀死CPU,你需要给它只是 CPU的东西.唯一棘手的问题是确保C++编译器不会优化循环.这样的事可能应该没问题:
// A bit like generating a hashcode. Pretty arbitrary choice, // but simple code which would be hard for the compiler to // optimise away. int running_total = 23; for (int i=0; i < some_large_number; i++) { running_total = 37 * running_total + i; } return running_total;
请注意我将值返回循环的事实.这应该阻止C++编译器注意到循环是无用的(如果你从未在任何地方使用过这个值,那么循环没有用处).您可能也想要禁用内联,否则我猜智能编译器可能会注意到您在不使用返回值的情况下调用函数,并将其内联到任何内容.(正如Suma在答案中指出的那样,volatile
在调用函数时使用应禁用内联.)