繁体   English   中英

C ++:强调Windows系统

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM