Нужна программа, которая заставит процессор работать на 100% - PullRequest
3 голосов
/ 23 марта 2011

Мне нужна программа, которая заставит мой процессор работать на 100%.

Желательно на C, крошечная программа, которая заставит процессор работать на 100%, и одна, которая не "оптимизирована"компилятором, поэтому он ничего не делает.

Предложения?

Ответы [ 6 ]

6 голосов
/ 23 марта 2011
int main(void) {
  volatile unsigned x=0, y=1;
  while (x++ || y++);
  return 0;
}

Или, если у вас многоядерный процессор - не проверено ... как и выше:)

int main(void) {
#pragma omp parallel
  {
    volatile unsigned x=0, y=1;
    while (x++ || y++);
  }
  return 0;
}
6 голосов
/ 23 марта 2011

А как насчет этого:

int main() { for (;;); }
3 голосов
/ 23 марта 2011

Вот хорошая, старомодная вилочная бомба.

#include <unistd.h>
int main(void)
{
  while(1)
    fork();
  return 0;
}
1 голос
/ 23 марта 2011

Скопируйте и вставьте это в файл с именем source.c:

int main(int argc, char *argv) {
    while(1);
}

Компиляция source.c: gcc source.c -o myprogram

Запустите его: ./myprogram

0 голосов
/ 24 ноября 2014

Собственное решение Windows для многопоточных систем.Компилируется в Visual C ++ (или Visual Studio) без какой-либо библиотеки.

/* Use 100% CPU on multithreaded Windows systems */

#include <Windows.h>
#include <stdio.h>
#define NUM_THREADS 4

DWORD WINAPI mythread(__in LPVOID lpParameter)
{
    printf("Thread inside %d \n", GetCurrentThreadId());
    volatile unsigned x = 0, y = 1;
    while (x++ || y++);
    return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE handles[NUM_THREADS];
    DWORD mythreadid[NUM_THREADS];
    int i;

    for (i = 0; i < NUM_THREADS; i++)
    {
        handles[i] = CreateThread(0, 0, mythread, 0, 0, &mythreadid[i]);
        printf("Thread after %d \n", mythreadid[i]);
    }

    getchar();
    return 0;
}
0 голосов
/ 23 марта 2011

Ответы, предполагающие пустую петлю, должны довести двухъядерный процессор до 50%, четырехъядерный до 25% и т. Д.

Так что, если это проблема, можно использовать что-то вроде

void main(void)
{
    omp_set_dynamic(0);
    // In most implemetations omp_get_num_procs() return #cores 
    omp_set_num_threads(omp_get_num_procs());
    #pragma omp parallel for
    for(;;) {}
}
...