Я хочу написать программу в c++, которая может подчеркнуть систему Windows 7. В своем намерении я хочу, чтобы эта программа приносила использование процессора 100%, используя все установленные барабаны.
Я пробовал с большим циклом FOR, который запускал простое умножение на каждом шаге: увеличение использования процессора, но используемый ram-сервер оставался низким.
Каков наилучший подход к достижению моей цели?!
Я написал тестовую программу для этого с использованием многопоточности и простых чисел Мерсенна в качестве алгоритма для стресс-тестирования
Сначала код определяет количество ядер на машине (только 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/
Если ваша цель - повысить нагрузку на процессор и RAM (и не обязательно писать программу), попробуйте HeavyLoad, который является бесплатным и делает это только http://www.jam-software.com/heavyload/
В агностическом режиме OS вы можете выделить и заполнить кучную память, полученную с помощью malloc (3) (так что сделайте некоторые вычисления с этой зоной) или в C++ с operator new
. Обязательно протестируйте сбой malloc
. И постепенно увеличивайте размер вашей зоны.
VirtualAlloc
памяти используйтеVirtualAlloc
API для фиксации как можно большего количества больших буферов, убедитесь, что вы касаетесь всех страниц, чтобы все было в ОЗУ.