Introducción
Hay muchas utilidades por ahí capaces de crear una alta carga de CPU para probar sus procesadores. En Microsoft Windows, incluso puede usar el dispositivo integrado calculator.exe
, ingresar un número grande como 999999999
y presionar n!
varias veces para hacer que su CPU (s) trabaje horas extras.
Pero, ¿qué hay en una solución si no la creaste tú mismo?
La misión
Su misión, si elige aceptarla, es crear la herramienta de prueba de esfuerzo de CPU más pequeña del planeta.
Debe…
- debe producir una carga de CPU del 100% hasta que se cancele
- debe tomar una entrada numérica, que representa el número de segundos que debe ejecutarse la prueba de esfuerzo
- debe permitir la interacción del usuario (presionar una tecla, cerrar la ventana del terminal o algo así) que debería permitir al usuario abortar la prueba de esfuerzo y / o salir del programa
- debe apuntar a Microsoft Windows, Mac OSx y / o Linux.
(Incluso un hámster podría estresar a un Comodore64 ... por lo tanto, debe apuntar a un sistema operativo actual).
No debe…
- no debe usar programas o herramientas de terceros que reemplacen la funcionalidad esperada.
(Proponer accesos directos comosystem('cpuStressThing.exe')
descalifica su propuesta).
Mayo…
- puede usar cualquier enfoque / algoritmo / funcionalidad para producir una carga de CPU del 100% esperada
- puede usar cualquier lenguaje de programación o scripting
(siempre que permita una verificación práctica de su funcionalidad ejecutándolo)
Condición ganadora
Presente el código fuente más pequeño posible. El ganador es el que presenta el código fuente más mínimo (en tamaño) que cumple con las condiciones "obligatorias" y "obligatorias" anteriores. Ahora, haz que el bebé se queme ...
EDITAR
Dado que la pregunta surgió en el área de comentarios ... solo necesita apuntar a 1 núcleo de CPU. Definitivamente no espero que produzcas una solución multi-core. Después de todo, esto debería ser divertido, no trabajo.
Respuestas:
Bash y utilidades estándar,
363122292826 bytesfuente
:
endo :; done
. He encontrado quedo;done
hace el trabajo, eso te atraerá en 2 bytes. También +1 por tener casi la mitad de la longitud de mi solución bash (lo hice demasiado complicado sin ninguna razón, ya que me olvidé$!
).bash: syntax error near unexpected token `;'
. He probado estas versiones de bash: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
respuesta de 34 bytes ;-)$1
en lugar de10
allí, solo para convertirlo en un script que "toma datos numéricos".Bash / iputils (Linux), 14 bytes
La inundación hace ping a la dirección nula IPv6, hasta que caduque el temporizador de fecha límite -w
advertencia: solo consume 55-60% de CPU en mi máquina virtual de pruebaEditar: - Retraigo mi advertencia. Si bien
top
informa que elping6
proceso solo consume 55-60% de CPU, veo que el porcentaje de inactividad total de la CPU (VM de 2 núcleos) se aproxima a cero. Presumiblemente, esto se debe a que gran parte del procesamiento se está llevando a cabo en el núcleo mientras maneja los paquetes.Nota: debe ejecutarse como root. Como comenta @Tobia, esto parece un requisito razonable para algo que acaparará la CPU. Y el OP lo aprobó en los comentarios.
fuente
sudo
y solo declararía que la prueba debe ejecutarse como root. Parece un requisito razonable para algo que acaparará la CPU.ping -6 :: -t
-> solo si esto en Windows hizo que mi CPU se volviera loca ... ¡Es solo el equivalente de Linux en Windows, que solo da errores y ni siquiera carga la CPU al 1%! Estoy usando Windows 8 Pro x64 en un Core2quad 2.63GHz.Binario independiente Elf32 - 86 bytes
Apuesto a que este es el binario de formato Elf más pequeño y correctamente formado que se puede hacer para realizar esta función. Esto se ejecutará sin ningún soporte adicional en ninguna plataforma basada en Linux, o potencialmente incluso sin un sistema operativo .
Descarga binaria: http://ge.tt/3m6h2cK1/v/0?c
Volcado hexadecimal:
Esto se hace construyendo un archivo asm con un encabezado Elf mínimo propio, y omitiendo el uso de
ld
.Montaje:
Construido con
nasm -f bin tiny_cpu_stresser_elf32.asm -o tiny_cpu_stresser_elf32
fuente
bash incorpora solo 20 bytes
fuente
C, 52
Presione Ctrl + C para salir.
fuente
$i=<>
parte y agréguela<?
al principio y listo!Perl, 32
Ahora la parte vergonzosa: tontamente me puse
$t=time
delante$i=<>
y estaba tratando furiosamente de descubrir por qué sale unos segundos antes.De nuevo, Ctrl + C para salir.
fuente
Unix C, 47
Pase el tiempo en la línea de comando. La tecla de interrupción (Ctrl-C) aborta.
fuente
scanf
truco de @ ace , puede reducirlo a 39:main(a){for(scanf("%d",&a),alarm(a);;);}
Smalltalk (Smalltalk / X), 34
entrada: n; interrumpir con CTRL-c o CMD-.
puede jugar mejor al golf, si se mide en días ;-) (es broma):
o desde una línea de comando:
fuente
Este no es un intento serio, pero ...
Bash, 12 bytes
Como se encuentra en Wikipedia .
ADVERTENCIA: código dañino, ¡no lo ejecute en su computadora!
Técnicamente:
- Produce una carga de CPU del 100% hasta que el sistema falla;
- Permite que la interacción del usuario lo detenga (si logra matar todos los tenedores, puede detenerlo ...);
- Puede darle una entrada numérica que represente la cantidad de segundos que debe ejecutarse, pero no la usará.
fuente
PHP
4340 bytes:Espero que esta sea una respuesta aceptable:
set_time_limit ($ _ REQUEST ['t']); while (! 0);Podría hacer esto:
<?for(set_time_limit($_POST['t']);;);
pero perdería flexibilidad y 3 bytes.Y podría hacer trampa y hacer esto:
<?for(set_time_limit($_REQUEST[t]);;);
. Reduce 2 bytes, pero no es una solución "estándar". Mantengamos el juego justo.Como sugirieron @fireeyedboy y @primo, también puede usar esta solución (34 bytes):
Esto permite su uso desde la consola, llamándolo así:
Como dije, no estoy apuntando a la solución de consola, pero tienen que obtener el crédito por esta.
Otra respuesta podría ser este "monstruo", que es solo ambas respuestas combinadas:
Es imposible obtener pulsaciones de teclas en PHP, sin estar en la consola, ¡a lo que no estoy apuntando!
Para detenerlo, DEBE abortar el proceso (detener la carga de la página puede detener el código).
Como ventaja, ¡también funciona en Android! Si instala un servidor php (gratis en Google Play).
Para que funcione, simplemente haga lo siguiente:
Crea una página web .php y la agrega
?t=<time in seconds>
al final de la url o envía una publicación (usando un formulario o incluso ajax).fuente
$_REQUEST['t']
con$argv[1]
luego llamarlo con:php -f cpustresstest.php <timelimit>
y abortar con^C
.$_GET
lugar de$_REQUEST
? 4 bytes y lo estás utilizando deGET
todos modosBrainFuck / BrainFuck extendido : 3
Utilizará 100% de CPU en un núcleo hasta que se cancele. Todos los programas Brainfuck son programas EBF válidos.
Zozotez LISP : 7
1519Cuando se usa el pequeño controlador.
Como una expresión independiente sin conductor: 15
Uso:
echo '((\(L)(L))(\()(L)))' | jitbf zozotez.bf
fuente
Perl - 14 bytes
Establece
SIGALRM
que se envíeinput
segundos, que finaliza el script. Mientras tanto, gira en una espera ocupada.Uso de la muestra:
Perl - 12 (+1) bytes
Si las opciones de la línea de comandos se cuentan como un byte cada una, esto podría reducirse a 13 bytes usando un
-n
:Uso de la muestra:
fuente
Ensamblado x86_64 en Linux - 146 (fuente), 42 (código ensamblado)
La fuente minimizada NASM (146 bytes):
Acepta un parámetro en la línea de comando que especifica el número de segundos que se ejecutarán en el rango (0, 9999999]; se puede interrumpir con el Ctrl-C habitual.
Puedes armarlo con
En teoría, sería necesario agregar un
global _start
seguido de una_start:
etiqueta al principio, pero se lasld
arregla por sí solo con poco alboroto.El código de máquina correspondiente (42 bytes):
(generado al
nasm
agregar laBITS 64
directiva)Una versión algo más legible:
fuente
Pitón,
585551Wow ... más largo que el de C. Tiene que haber una mejor manera.Todavía es un poco largo, ¡pero al menos supera la solución C!fuente
Java -
154 148186Extraño error se comió mi
Thread.sleep()
partey una versión más legible:
Genera un
new Thread
con un bonito bucle sin fin (for(;;);
), entonces en la rosca de un principalthread.sleep()
y unSystem.exit(0)
después de tiempo de espera a la salida; ctrl-c sale, también en cmdline no fue capaz de abreviar esoexit()
. estrellarse no funcionará;fuente
Lote, 2 personajes
%0
En esencia, el programa se inicia constantemente una y otra vez. Sus resultados pueden variar, debido a la prioridad de asignación de tareas del procesador, pero funciona para mí.
fuente
Powershell,
185450 bytesPara producir una carga del 100% para todos los núcleos de CPU.
| AddS*
es el atajo para el.AddSeconds()
método.sajb
es el alias paraStart-Job
cmdlet.fuente
must take a numeric input, representing the number seconds the stress-test should run
)?Linux sh y utilidades estándar, 14
Los recientes gutilu coreutils incluyen una
timeout
utilidad que es útil:fuente
timeout $1 yes :|sh
- 19 es probablemente lo mejor que puede hacer y obtener un 100% de utilización. Tentado a robar esto por mi respuesta, pero seré como un deportista :)Matlab - 19
tic;while toc<5;end
Reemplace
5
con el tiempo de ejecución deseado.fuente
Go,
215212193 bytes (completo)Bonificación, enfatiza todas las CPU.
El
Now()
en el bucle está ahí para patear el planificador,Now
fue el nombre de función más corto que pude encontrar en mi espacio de nombresSi ejecuto
go fmt
el tamaño aumenta a286277254 bytesfuente
Golpe: 19 caracteres
fuente
Asamblea: 16 bytes
Editar: al no haber notado el requisito de tomar una entrada numérica, voy a afirmar que toma una en la línea de comando, pero la ignora =)
fuente
Lote DOS - 5 bytes
Lote DOS - 8 bytes
El segundo es una traducción de la infame sh forkbomb.
Ctrl + C interrumpe el programa (a menos que haya modificado un poco la configuración).
fuente
C #, 118
Sin comprimir
Esto requiere un número como argumento, que es el número de segundos para ejecutarse. Utilizará el 100% de un núcleo durante ese tiempo o hasta crtl + c. Estoy bastante seguro de que esto es tan pequeño como C # irá con su verbosidad.
fuente
C # - 178 caracteres
Y más legible:
Eso es 178 caracteres en C # y usa todos los núcleos.
La única debilidad que siempre está terminando debido al límite de enteros 1 << 30.
fuente
Java - 88 caracteres
Esto permite 2⁶³-1 bucles.
Versión más legible
C # - 87 caracteres
Versión más legible
(Esto está en un sistema de 4 núcleos)
fuente
EcmaScript 6:
Esto usará el 100% de la CPU en una máquina de un solo núcleo, y con Firefox, tiene la ventaja adicional de que Firefox sigue usando más y más memoria; toda la interfaz se bloquea y la única forma de detenerla es matar a Firefox en el administrador de tareas.
fuente
perl, 23 bytes
No puedo entender cómo pegar un control-T literal aquí, así que escribí $ ^ T en su lugar, pero funciona (el literal es 1 char más corto en 23 bytes):
$ ^ T es justo el momento en que comenzó el intérprete, por lo que básicamente puede leerlo como time () ya que es lo primero que calculamos.
fuente
Python, 30
Encontré este viejo rompecabezas interesante, espero que esté bien publicar una respuesta a una vieja pregunta. Simplemente no podía dejar que las respuestas C vencieran a Python. ;)
sum(range(int(input())*2**26))
Esto necesita ajustarse para diferentes CPU, pero no creo que eso viole el OP ...
sum(range(2**27))
conecta uno de mis núcleos i7 de 2.8GHz por aproximadamente un segundo. :)fuente
must produce 100% CPU load until aborted
.must take a numeric input, representing the number seconds the stress-test should run
. Por lo tanto, el código debe tomar la entrada del usuario de alguna manera y autolimitarse en consecuencia, así como solo vincular una CPU. Esta es la parte que me pareció más interesante sobre el rompecabezas ...