C ++: система стресс-окон

0

Я хочу написать программу в c++, которая может подчеркнуть систему Windows 7. В своем намерении я хочу, чтобы эта программа приносила использование процессора 100%, используя все установленные барабаны.

Я пробовал с большим циклом FOR, который запускал простое умножение на каждом шаге: увеличение использования процессора, но используемый ram-сервер оставался низким.

Каков наилучший подход к достижению моей цели?!

  • 1
    В случае VirtualAlloc памяти используйте VirtualAlloc API для фиксации как можно большего количества больших буферов, убедитесь, что вы касаетесь всех страниц, чтобы все было в ОЗУ.
  • 0
    Вы понимаете, почему ваш код не увеличивает использование памяти?
Показать ещё 1 комментарий
Теги:
stress-testing

3 ответа

0

Я написал тестовую программу для этого с использованием многопоточности и простых чисел Мерсенна в качестве алгоритма для стресс-тестирования

Изображение 174551

Сначала код определяет количество ядер на машине (только 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/

0

Если ваша цель - повысить нагрузку на процессор и RAM (и не обязательно писать программу), попробуйте HeavyLoad, который является бесплатным и делает это только http://www.jam-software.com/heavyload/

0

В агностическом режиме OS вы можете выделить и заполнить кучную память, полученную с помощью malloc (3) (так что сделайте некоторые вычисления с этой зоной) или в C++ с operator new. Обязательно протестируйте сбой malloc. И постепенно увеличивайте размер вашей зоны.

  • 0
    А когда это не удается, уменьшите размер и повторите попытку. Конечно, это только «использует» RAM в теоретическом смысле. Если вы не пишете в это ОЗУ, это вообще не подчеркивается.
  • 0
    "Заполнить" глагол имел в виду писать память Malloc-Ed
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню