[英]C++: stress windows system
我想用c ++编写一个能够强调Windows 7系统的程序。 我的目的是希望该程序使用所有安装的ram将cpu的使用率提高到100%。
我尝试了一个很大的FOR循环,该循环在每个步骤运行一个简单的乘法:cpu的使用率增加了,但使用的ram仍然很低。
达到目标的最佳方法是什么?
以与操作系统无关的方式,您可以分配和填充通过malloc(3)获得的堆内存(因此对该区域进行一些计算),或者在C ++中使用operator new
分配。 确保对malloc
进行测试以防失败。 并逐渐增加区域的大小。
如果您的目标是提高CPU和RAM的利用率(不一定要编写程序),请尝试免费的HeavyLoad,它只需http://www.jam-software.com/heavyload/
我为此编写了一个测试程序,使用多线程和Mersenne Primes作为压力测试算法
该代码首先确定计算机上的内核数(仅限Windows的家伙,对不起!)
NtQuerySystemInformation(SystemBasicInformation, &BasicInformation, sizeof(SYSTEM_BASIC_INFORMATION), NULL);
然后运行一个测试方法为每个核心生成一个线程
// make sure we've got at least as many threads as cores
for (int i = 0; i < this->BasicInformation.NumberOfProcessors; i++)
{
threads.push_back(thread(&CpuBenchmark::MersennePrimes, CpuBenchmark()));
}
运行我们的负载
BOOL CpuBenchmark::IsPrime(ULONG64 n) // function determines if the number n is prime.
{
for (ULONG64 i = 2; i * i < n; i++)
if (n % i == 0)
return false;
return true;
}
ULONG64 CpuBenchmark::Power2(ULONG64 n) //function returns 2 raised to power of n
{
ULONG64 square = 1;
for (ULONG64 i = 0; i < n; i++)
{
square *= 2;
}
return square;
}
VOID CpuBenchmark::MersennePrimes()
{
ULONG64 i;
ULONG64 n;
for (n = 2; n <= 61; n++)
{
if (IsPrime(n) == 1)
{
i = Power2(n) - 1;
if (IsPrime(i) == 1) {
// dont care just want to stress the CPU
}
}
}
}
并等待所有线程完成
// wait for them all to finish
for (auto& th : threads)
th.join();
我的博客网站上的完整文章和源代码
http://malcolmswaine.com/c-cpu-stress-test-algorithm-mersenne-primes/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.