Введение
Существует множество утилит, способных создать высокую нагрузку на процессор для нагрузочного тестирования вашего процессора (ов). В Microsoft Windows вы даже можете использовать встроенную плату calculator.exe
, ввести большое число, например 999999999
, и нажать n!
несколько раз, чтобы заставить ваши процессоры работать сверхурочно.
Но что за решение, если вы не создали его сами?
Миссия
Ваша миссия - если вы решите принять это - создать самый маленький инструмент для стресс-тестирования процессора на планете.
Должен…
- должен производить 100% загрузку процессора, пока не прервано
- должен принимать числовой ввод, представляющий количество секунд, которое должен пройти стресс-тест
- должен разрешать взаимодействие с пользователем (нажатие клавиши, закрытие окна терминала или что-то подобное), что должно позволить пользователю отменить стресс-тест и / или выйти из программы
- должен быть ориентирован на Microsoft Windows, Mac OSx и / или Linux.
(Даже хомяк может подчеркнуть Comodore64 ... поэтому вы должны ориентироваться на текущую операционную систему.)
Не должен…
- не должны использовать сторонние программы или инструменты, которые заменяют ожидаемую функциональность.
(Предложение ярлыков в виде подобныхsystem('cpuStressThing.exe')
дисквалифицирует ваше предложение.)
Май…
- может использовать любой подход / алгоритм / функциональность для получения ожидаемой 100% загрузки процессора
- может использовать любой язык программирования или сценариев
(при условии, что он позволяет на практике проверить его функциональность, запустив его)
Условие победы
Представьте наименьший возможный исходный код. Победителем становится тот, кто представит самый минимальный (по размеру) исходный код, соответствующий указанным выше условиям «должен» и «не должен». Теперь, чтобы этот ребенок сгорел ...
РЕДАКТИРОВАТЬ
Так как вопрос возник в области комментариев ... вам нужно только нацелиться на 1 ядро процессора. Я определенно не ожидаю, что вы создадите многоядерное решение. В конце концов, это должно быть весело, а не работать.
Ответы:
Bash и стандартные утилиты,
363122292826 байтисточник
:
вdo :; done
. Я нашел, чтоdo;done
делает работу - это потянет вас на 2 байта. Также +1 за почти половину длины моего решения bash (я сделал его слишком сложным без веской причины, о чем я забыл$!
).bash: syntax error near unexpected token `;'
. Я пробовал эти версии Баш:3.00.15(1)-release (x86_64-redhat-linux-gnu)
,3.2.48(1)-release (x86_64-apple-darwin12)
,4.2.25(1)-release (x86_64-pc-linux-gnu)
ksh
ответ ;-)$1
их10
там, чтобы превратить в сценарий, который «принимает числовой ввод».Bash / iputils (Linux), 14 байт
Захватывает нулевой адрес IPv6 до истечения таймера крайнего срока -w
предостережение - только 55-60% процессора потребляет на моей тестовой ВМИзменить: - Я убираю свою оговорку. Хотя
top
отчетыping6
показывают, что процесс потребляет только 55-60% ЦП, я вижу, что общий процент простоя ЦП (2 ядра ВМ) приближается к нулю. Вероятно, это связано с тем, что во время обработки пакетов в ядре происходит большая часть обработки.Примечание - должен быть запущен от имени пользователя root. Как комментирует @Tobia, это кажется разумным требованием для чего-то, что нагружает процессор. И ФП одобрил это в комментариях.
источник
sudo
и просто заявить, что тест должен быть запущен от имени пользователя root. Это кажется разумным требованием для чего-то, что нагружает процессор.ping -6 :: -t
-> только если это в Windows заставило мой процессор нервничать ... Это просто эквивалент Linux на Windows, который только выдает ошибки и даже не загружает процессор на 1%! Я использую Windows 8 Pro x64 на Core2quad 2,63 ГГц.Автономный двоичный файл Elf32 - 86 байт
Могу поспорить, что это самый маленький правильно сформированный двоичный файл формата Elf, который можно сделать для выполнения этой функции. Это будет выполняться без какой-либо дополнительной поддержки на любой платформе, основанной на Linux, или даже без операционной системы .
Двоичная загрузка: http://ge.tt/3m6h2cK1/v/0?c
Шестнадцатеричный дамп:
Это делается путем создания asm-файла с минимальным собственным заголовком Elf и полного
ld
исключения использования .Монтаж:
Построен с
nasm -f bin tiny_cpu_stresser_elf32.asm -o tiny_cpu_stresser_elf32
источник
встроенные bash только 20 байтов
источник
С, 52
Нажмите Ctrl + C, чтобы выйти.
источник
$i=<>
часть и добавьте<?
в начало, и все готово!Perl, 32
Теперь неловкая часть: я по глупости поставил
$t=time
перед собой$i=<>
и яростно пытался выяснить, почему он выходит на несколько секунд раньше.Снова Ctrl + C для выхода.
источник
Unix C, 47
Проведите время в командной строке. Прерывание клавиши (Ctrl-C) отменяется.
источник
scanf
трюк @ туза , вы можете уменьшить его до 39:main(a){for(scanf("%d",&a),alarm(a);;);}
Smalltalk (Smalltalk / X), 34
вход: n; прерывать с помощью CTRL-c или CMD-.
может гольф лучше, если измерять в днях ;-) (шучу):
или из командной строки:
источник
Это не серьезная попытка, но ...
Баш, 12 байт
Как найдено в Википедии .
ВНИМАНИЕ: вредный код, не запускайте его на своем компьютере!
Технически:
- Он производит 100% загрузку процессора, пока не произойдет сбой системы;
- Позволяет взаимодействию с пользователем, чтобы остановить его (если вам удастся убить все вилки, вы можете остановить его ...);
- Вы могли бы дать ему числовой ввод, который представляет количество секунд, которое он должен выполнить, но он не будет его использовать.
источник
PHP
4340 байт:Я надеюсь, что это приемлемый ответ:
set_time_limit ($ _ REQUEST [ 'т']), в то время (0!);Я мог бы сделать так:
<?for(set_time_limit($_POST['t']);;);
но он потерял бы гибкость и 3 байта.И я мог обмануть и сделать так:
<?for(set_time_limit($_REQUEST[t]);;);
. Он сбрасывает 2 байта, но это не «стандартное» решение. Давайте держать игру честно.Как предложили @fireeyedboy и @primo, вы также можете использовать это решение (34 байта):
Это позволяет использовать его из консоли, вызывая его так:
Как я уже сказал, я не нацеливаюсь на консольное решение, но они должны получить кредит за это.
Другим ответом может быть этот «монстр», который объединяет оба ответа:
Невозможно получать нажатия клавиш в php, не находясь на консоли, на которую я не нацеливаюсь!
Чтобы остановить его, вы ДОЛЖНЫ прервать процесс (остановка загрузки страницы может остановить код)!
Как плюс, это работает и в Android! Если вы устанавливаете php-сервер (бесплатно в Google Play).
Чтобы это работало, просто сделайте так:
Вы создаете веб-страницу .php и добавляете
?t=<time in seconds>
ее в конец URL или отправляете сообщение (используя форму или даже ajax).источник
$_REQUEST['t']
на,$argv[1]
затем вызовите его с помощью:php -f cpustresstest.php <timelimit>
и прервите с помощью^C
.$_GET
вместо$_REQUEST
? 4 байта, и вы всеGET
равно используетеBrainFuck / Расширенный BrainFuck : 3
Он будет использовать 100% процессор на одном ядре, пока не прервется. Все программы Brainfuck являются действительными программами EBF.
Zozotez LISP : 7
1519При использовании маленького драйвера.
Как автономное выражение без водителя: 15
Использование:
echo '((\(L)(L))(\()(L)))' | jitbf zozotez.bf
источник
Perl - 14 байт
Устанавливает
SIGALRM
отправку вinput
секундах, что завершает сценарий. Тем временем, это вращается в занятом ожидании.Пример использования:
Perl - 12 (+1) байт
Если параметры командной строки считаются по одному байту каждый, это можно уменьшить до 13 байтов, используя
-n
:Пример использования:
источник
Сборка x86_64 в Linux - 146 (исходный код), 42 (собранный код)
Минимизированный источник NASM (146 байт):
Принимает параметр в командной строке, указывающий количество секунд для запуска в диапазоне (0, 9999999]; может быть прерван с помощью обычного Ctrl-C.
Вы можете собрать его с
Теоретически, в начале необходимо добавить метку,
global _start
за которой следует_start:
метка, но этоld
удается исправить самому с небольшим суетой.Соответствующий машинный код (42 байта):
(генерируется с
nasm
добавлениемBITS 64
директивы)Несколько более читаемая версия:
источник
Python,
585551Вау ... дольше, чем Си. Должен быть лучший способ.Все еще немного, но по крайней мере это бьет решение C!источник
Ява -
154 148186Странная ошибка съела мою
Thread.sleep()
частьи более читаемая версия:
Создает a
new Thread
с хорошим бесконечным циклом (for(;;);
), затем в главном потоке athread.sleep()
и aSystem.exit(0)
после тайм-аута для выхода; ctrl-c завершает работу, также на cmdline не смог записать этоexit()
. сбой не сработает;источник
Пакет, 2 персонажа
%0
По сути, программа постоянно запускается снова и снова. Ваши результаты могут отличаться из-за приоритета распределения задач процессора, но это работает для меня.
источник
Powershell,
185450 байтПроизводить 100% загрузку для всех процессорных ядер.
| AddS*
это ярлык для.AddSeconds()
метода.sajb
это псевдоним дляStart-Job
командлета.источник
must take a numeric input, representing the number seconds the stress-test should run
)?Linux sh и стандартные утилиты, 14
Последняя версия gnu coreutils содержит
timeout
полезную утилиту:источник
timeout $1 yes :|sh
- 19, вероятно, лучшее, что вы можете сделать и получить 100% использования. Соблазн украсть это для моего ответа, но я буду похож на спортсмена :)Матлаб - 19
tic;while toc<5;end
Замените
5
на желаемое время выполнения.источник
Go,
215212193 байта (полное)Бонус, подчеркивает все процессоры.
Цикл
Now()
in, который нужно включить в планировщике,Now
был самым коротким именем функции, которое я мог найти в своем пространстве именЕсли я бегу
go fmt
размер увеличивается до286277254 байтисточник
Баш: 19 символов
источник
Сборка: 16 байт
Изменить: не заметив требования для ввода числового ввода, я собираюсь утверждать, что он принимает один в командной строке, но игнорирует его =)
источник
DOS Batch - 5 байт
DOS Batch - 8 байт
Во-вторых, это перевод печально известной ш-вилки.
Ctrl + C ломает программу (если вы немного не изменили настройки).
источник
C #, 118
несжатого
Это требует числа в качестве аргумента, который является количеством секунд для запуска. Он будет использовать 100% одного ядра в течение этого времени или до crtl + c. Я уверен, что это так мало, как C # будет идти с его многословием.
источник
C # - 178 символов
И более читабельно:
Это 178 символов в C # и использует все ядра.
Единственная слабость в том, что она всегда заканчивается из-за целого предела 1 << 30.
источник
Java - 88 символов
Это учитывает 2⁶³-1 петли.
Более читаемая версия
C # - 87 символов
Более читаемая версия
(Это на 4 ядре системы)
источник
EcmaScript 6:
Это будет использовать 100% ЦП на одноядерном компьютере, а с Firefox у него есть дополнительный бонус, который Firefox продолжает использовать все больше и больше памяти; весь интерфейс блокируется, и единственный способ остановить это - убить Firefox в диспетчере задач.
источник
perl, 23 байта
Я не могу понять, как вставить литеральный элемент управления T здесь, поэтому я вместо этого набрал $ ^ T, но любой из них работает (литерал на 1 символ короче на 23 байта):
$ ^ T - это просто время запуска интерпретатора, поэтому вы можете в основном прочитать его как time (), так как это первое, что мы вычисляем.
источник
Python, 30
Я нашел эту старую головоломку интересной, я надеюсь, что все в порядке, чтобы опубликовать ответ на старый вопрос. Я просто не мог позволить C-ответам победить Python. ;)
sum(range(int(input())*2**26))
Это нужно настроить для разных процессоров, но я не думаю, что это нарушает OP ...
sum(range(2**27))
привязывает одно из моих 2.8 ГГц i7-ядер примерно на секунду. :)источник
must produce 100% CPU load until aborted
.must take a numeric input, representing the number seconds the stress-test should run
. Так что код должен каким-то образом принимать пользовательский ввод и самостоятельно ограничивать его, а также просто привязывать процессор. Это часть, которая мне показалась наиболее интересной в этой головоломке ...