Tester obciążenia procesora z minimalnym kodem…

28

Wprowadzenie

Istnieje wiele narzędzi, które mogą generować duże obciążenie procesora w celu przetestowania procesora (ów). W systemie Microsoft Windows można nawet używać urządzenia pokładowego calculator.exe, wprowadzać dużą liczbę, np. 999999999I naciskać n!kilka razy, aby procesory działały w nadgodzinach.

Ale co jest w rozwiązaniu, jeśli sam go nie stworzyłeś?

Misja

Twoim zadaniem - jeśli zdecydujesz się to zaakceptować - jest stworzenie najmniejszego narzędzia do testowania obciążenia procesora na świecie.

Musi…

  1. musi generować 100% obciążenia procesora aż do przerwania
  2. musi przyjmować dane liczbowe reprezentujące liczbę sekund, które powinien wykonać test warunków skrajnych
  3. musi umożliwiać interakcję użytkownika (naciśnięcie klawisza, zamknięcie okna terminala itp.), co powinno umożliwić użytkownikowi przerwanie testu warunków skrajnych i / lub wyjście z programu
  4. musi być ukierunkowany na Microsoft Windows, Mac OSx i / lub Linux.
    (Nawet chomik może zestresować Comodore64 ... dlatego musisz celować w bieżący system operacyjny.)

Nie wolno…

  1. nie wolno używać programów ani narzędzi innych firm, które zastępują oczekiwaną funkcjonalność.
    (Proponowanie skrótów takich jak system('cpuStressThing.exe')dyskwalifikuje twoją propozycję).

Może…

  1. może wykorzystywać dowolne podejście / algorytm / funkcjonalność w celu uzyskania oczekiwanego 100% obciążenia procesora
  2. może korzystać z dowolnego języka programowania lub skryptów
    (o ile pozwala to na praktyczną weryfikację jego funkcjonalności przez uruchomienie)

Warunki wygranej

Przedstaw najmniejszy możliwy kod źródłowy. Zwycięzcą jest ten, który prezentuje najbardziej minimalny (pod względem wielkości) kod źródłowy, który spełnia powyższe warunki „musi” i „nie może”. Teraz spraw, aby to dziecko paliło…


EDYTOWAĆ

Ponieważ pytanie pojawiło się w polu komentarza ... musisz tylko celować w 1 rdzeń procesora. Na pewno nie oczekuję, że stworzysz rozwiązanie wielordzeniowe. W końcu powinna to być zabawa - nie praca.

e-sushi
źródło
5
Czy „100% jednego rdzenia” wystarczy, czy masz na myśli „100% wielordzeniowego procesora”?
Tobia,
@Tobia Tak, wystarczy 1 rdzeń. Zredagowałem swoje pytanie, aby uwzględnić te informacje. Dzięki za wskazanie mi, że nie było to zbyt jasne.
e-sushi
3
liczą górnicy kryptowaluty /
TheDoctor
2
@TheDoctor Jeśli potrafisz dopasować go do warunków, które opisałem… bądź moim gościem. Na pewno byłoby interesujące zobaczyć górnika kryptowaluty, który jest w stanie pokonać (na przykład) 36-bajtowy skrypt bash w rozmiarze pliku.
e-sushi
Problem polega na tym, że większość górników ma kilka tysięcy linii kodu.
TheDoctor

Odpowiedzi:

28

Bash i standardowe narzędzia, 36 31 22 29 28 26 bajtów

yes :|sh&sleep $1;kill $!
Cyfrowa trauma
źródło
2
To wygląda cudownie jak na kod Bash! To naprawdę miła odpowiedź!
Ismael Miguel
Nie trzeba się :in do :; done. Znalazłem do;donepracę - to wciągnie cię na 2 bajty. Również +1 za bycie prawie połową długości mojego rozwiązania bashowego (zrobiłem to zbyt skomplikowane bez żadnego powodu, ponieważ o tym zapomniałem $!).
Chris J
1
@ChrisJ - że nie działa dla mnie bash: syntax error near unexpected token `;'. Próbowałem te wersje 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)
Cyfrowy Trauma
1
@ChrisJ - Myślę, że masz 34-bajtową kshodpowiedź ;-)
Digital Trauma
2
Chciałbym umieścić $1w miejscu 10tam, po prostu zrobić to do skryptu, który „ma wejście numeryczne”.
Tobia,
20

Bash / iputils (Linux), 14 bajtów

ping6 -fw$1 ::

Flood-ping pinguje adres zerowy IPv6, aż do upływu czasu -w timera

zastrzeżenie - zużywa tylko 55-60% procesora na mojej testowej maszynie wirtualnej

Edycja: - Cofam swoje zastrzeżenie. Chociaż topraporty o tym ping6, że proces zużywa tylko 55–60% procesora, widzę, że całkowity procent bezczynności procesora (2 rdzenie VM) zbliża się do zera. Przypuszczalnie dzieje się tak, ponieważ w jądrze podczas przetwarzania pakietów odbywa się spora część przetwarzania.

Uwaga - należy uruchomić jako root. Jak komentuje @Tobia, wydaje się to rozsądnym wymogiem dla czegoś, co spowoduje zawieszenie procesora. I PO zatwierdziło to w komentarzach.

Cyfrowa trauma
źródło
6
+1. Chciałbym usunąć sudo i po prostu stwierdzić, że test musi być uruchomiony jako root. Wydaje się, że jest to uzasadnione wymaganie dotyczące czegoś, co spowoduje zawieszenie procesora.
Tobia,
@Tobia - dzięki - myślę, że coś Ci się podoba ;-)
Digital Trauma
ping -6 :: -t-> tylko jeśli to w systemie Windows spowodowało, że mój procesor oszalał ... To tylko odpowiednik linuksa w systemie Windows, który daje tylko błędy i nawet nie ładuje procesora na poziomie 1%! Używam Windows 8 pro x64 na core2quad 2.63GHz.
Ismael Miguel
@ IsmaelMiguel - tak - nie mam pod ręką okien, aby to przetestować. Dlatego w tytule podałem „Linux” ;-)
Digital Trauma
Wiem, że „rozdaję” tę odpowiedź jako niedziałającą, dla tych, którzy myślą o wypróbowaniu tego samego w systemie Windows, tak jak ja to zrobiłem i nie udało mi się.
Ismael Miguel
9

Samodzielny plik binarny Elf32 - 86 bajtów

Założę się, że jest to najmniejszy poprawnie sformatowany plik binarny w formacie Elf, który można wykonać w celu wykonania tej funkcji. Uruchomi się to bez dodatkowej pomocy na platformie opartej na systemie Linux lub potencjalnie nawet bez systemu operacyjnego .

Pobieranie binarne: http://ge.tt/3m6h2cK1/v/0?c

Zrzut szesnastkowy:

0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 5480 0408 3400 0000  ........T...4...
0000020: 0000 0000 0000 0000 3400 2000 0100 0000  ........4. .....
0000030: 0000 0000 0100 0000 0000 0000 0080 0408  ................
0000040: 0080 0408 5600 0000 5600 0000 0500 0000  ....V...V.......
0000050: 0010 0000 75fe                           ....u.

Odbywa się to poprzez zbudowanie pliku asm z minimalnym własnym nagłówkiem Elf i pominięcie korzystania z niego ldcałkowicie.

Montaż:

BITS 32

              org     0x08048000

ehdr:                                                 ; Elf32_Ehdr
              db      0x7F, "ELF", 1, 1, 1, 0         ;   e_ident
times 8       db      0
              dw      2                               ;   e_type
              dw      3                               ;   e_machine
              dd      1                               ;   e_version
              dd      _start                          ;   e_entry
              dd      phdr - $$                       ;   e_phoff
              dd      0                               ;   e_shoff
              dd      0                               ;   e_flags
              dw      ehdrsize                        ;   e_ehsize
              dw      phdrsize                        ;   e_phentsize
              dw      1                               ;   e_phnum
              dw      0                               ;   e_shentsize
              dw      0                               ;   e_shnum
              dw      0                               ;   e_shstrndx

ehdrsize      equ     $ - ehdr

phdr:                                                 ; Elf32_Phdr
              dd      1                               ;   p_type
              dd      0                               ;   p_offset
              dd      $$                              ;   p_vaddr
              dd      $$                              ;   p_paddr
              dd      filesize                        ;   p_filesz
              dd      filesize                        ;   p_memsz
              dd      5                               ;   p_flags
              dd      0x1000                          ;   p_align

phdrsize      equ     $ - phdr

section .text
global  _start
_start:       jnz     _start

filesize      equ     $ - $$

Zbudowany z nasm -f bin tiny_cpu_stresser_elf32.asm -o tiny_cpu_stresser_elf32

Zamieszki
źródło
7

bash wbudował tylko 20 bajtów

ulimit -t $1;exec $0
Geoff Reedy
źródło
@ e-sushi spróbuj z szybszym terminalem, np. konsolą tekstową lub xterm lub rxvt
Geoff Reedy
6

C, 52

t;main(s){for(scanf("%d",&s),t=time();time()-t<s;);}

Naciśnij Ctrl + C, aby wyjść.

wprowadź opis zdjęcia tutaj

użytkownik12205
źródło
Jeśli zrobisz to w php, wygrasz! Po prostu usuń $i=<>część i dodaj <?do początku i możesz zacząć!
Ismael Miguel
5

Perl, 32

for($i=<>,$t=time;time-$t<$i;){}

Teraz zawstydzająca część: głupio stawiam $t=timeprzed sobą $i=<>i wściekle próbuję dowiedzieć się, dlaczego wychodzi kilka sekund wcześniej.

Ponownie, Ctrl + C, aby wyjść.

wprowadź opis zdjęcia tutaj

użytkownik12205
źródło
5

Unix C, 47

main(int a,char**b){alarm(atoi(b[1]));for(;;);}

Spędź czas w wierszu poleceń. Klawisz Przerwania (Ctrl-C) zostaje przerwany.

Nate Eldredge
źródło
3
jeśli użyjesz scanfsztuczki @ ace , możesz sprowadzić ją do 39:main(a){for(scanf("%d",&a),alarm(a);;);}
Dave
4

Smalltalk (Smalltalk / X), 34

wejście: n; przerwać za pomocą CTRL-c lub CMD-.

[[]loop]valueWithTimeout:n seconds

lepiej grać w golfa, jeśli mierzy się go w dniach ;-) (tylko żartuję):

[[]loop]valueWithTimeout:n days

wprowadź opis zdjęcia tutaj

lub z linii poleceń: wprowadź opis zdjęcia tutaj

blabla999
źródło
4

To nie jest poważna próba, ale ...

Bash, 12 bajtów

:(){ :|:&};:

Jak znaleziono na Wikipedii .

UWAGA: szkodliwy kod, nie uruchamiaj go na swoim komputerze!


Technicznie:
- Wytwarza 100% obciążenia procesora, aż do awarii systemu;
- Umożliwia interakcję użytkownika, aby go zatrzymać (jeśli uda ci się zabić wszystkie widelce, możesz faktycznie to zatrzymać ...);
- Możesz podać dane liczbowe, które reprezentują liczbę sekund, które powinien uruchomić, ale nie będą go używać.

Vereos
źródło
4

PHP 43 40 bajtów:

Mam nadzieję, że to akceptowalna odpowiedź:

set_time_limit ($ _ REQUEST ['t']); while (! 0);

<?for(set_time_limit($_REQUEST['t']);;);

Mógłbym zrobić tak: <?for(set_time_limit($_POST['t']);;);ale straciłoby to elastyczność i 3 bajty.


I mogę oszukać i zrobić tak: <?for(set_time_limit($_REQUEST[t]);;);. Ogolił 2 bajty, ale nie jest to „standardowe” rozwiązanie. Pozwala zachować uczciwość gry.


Jak sugerują @fireeyedboy i @primo, możesz również użyć tego rozwiązania (34 bajty):

<?for(set_time_limit($argv[1]);;);

Dzięki temu można go używać z konsoli, nazywając go w następujący sposób:

php <filename> <time in seconds>

Jak powiedziałem, nie celuję w rozwiązanie konsolowe, ale oni muszą zdobyć kredyt na to.

Inną odpowiedzią może być ten „potwór”, który jest połączeniem obu odpowiedzi:

<?for(set_time_limit($argv[1]|$_REQUEST['t']);;);

Nie można uzyskać naciśnięć klawiszy w php, nie będąc na konsoli, na którą nie celuję!

Aby go zatrzymać, MUSISZ przerwać proces (zatrzymanie ładowania strony może zatrzymać kod)!

Na plus działa również w Androidzie! Jeśli zainstalujesz serwer php (bezpłatny w Google Play).

Aby to działało, po prostu wykonaj następujące czynności:

Tworzysz stronę .php i dołączasz ?t=<time in seconds>na końcu adresu URL lub wysyłasz post (używając formularza, a nawet ajax).

Ismael Miguel
źródło
1
@ e-sushi Naprawiłem odpowiedź i zmniejszyłem 3 bajty. Nie tak małe jak rozwiązanie Bash, ale blisko. I z elastycznością!
Ismael Miguel
Uruchom z wiersza poleceń: zamień na, $_REQUEST['t']a $argv[1]następnie wywołaj za pomocą: php -f cpustresstest.php <timelimit>i przerwij za pomocą ^C.
Przyzwoity Dabbler
Dlaczego nie użyć $_GETzamiast $_REQUEST? 4 bajty, a GETmimo to używasz
Kristoffer Sall-Storgaard
@KristofferSHansen Ponieważ elastyczność mojego kodu zostanie poważnie naruszona.
Ismael Miguel
@fireeyedboy To brzmi jak dobry pomysł, ale jak powiedziałem, nie celuję w konsolę.
Ismael Miguel
3

BrainFuck / Extended BrainFuck : 3

+[]

Użyje 100% procesora na jednym rdzeniu, aż do przerwania. Wszystkie programy Brainfuck są prawidłowymi programami EBF.

Zozotez LISP : 7 15 19

Podczas korzystania z małego sterownika.

(:'r s) ; redfine read in the read-eval-print-loop

Jako samodzielne wyrażenie bez sterownika: 15

((:'L(\()(L))))     ; setq a loop function and execute it    

Stosowanie: echo '((\(L)(L))(\()(L)))' | jitbf zozotez.bf

Sylwester
źródło
3

Perl - 14 bajtów

alarm<>;{redo}

Ustawia SIGALRMwysyłanie w inputciągu kilku sekund, co kończy skrypt. W międzyczasie kręci się w oczekiwaniu na zajęcie.

Przykładowe użycie:

$ echo 4 | perl stress.pl
Terminating on signal SIGALRM(14)

Perl - 12 (+1) bajtów

Jeśli opcje wiersza poleceń są liczone jako jeden bajt, można to zmniejszyć do 13 bajtów, używając -n:

alarm;{redo}

Przykładowe użycie:

$ echo 4 | perl -n stress.pl
Terminating on signal SIGALRM(14)
primo
źródło
+1 za sprytne wykorzystanie sygnałów w celu zwięzłego spełnienia wymogu wyjścia.
Ślimak mechaniczny
3

Montaż x86_64 w systemie Linux - 146 (źródło), 42 (złożony kod)

Zminimalizowane źródło NASM (146 bajtów):

xor rdi,rdi
mov rcx,[rsp+16]
mov rcx,[rcx]
l:
sub cl,'0'
jl k
imul rdi,10
movsx rdx,cl
add rdi,rdx
ror rcx,8
jmp l
k:
mov rax,37
syscall
s:
jmp s

Akceptuje parametr w wierszu poleceń określający liczbę sekund do uruchomienia w zakresie (0, 9999999]; można go przerwać zwykłym Ctrl-C.

Możesz go złożyć za pomocą

nasm -f elf64 -o stress.o stress.asm && ld -o stress stress.o

Teoretycznie na początku konieczne byłoby dodanie etykiety, global _startpo której następuje _start:etykieta, ale ldudało się to naprawić samemu bez większego zamieszania.

Odpowiedni kod maszynowy (42 bajty):

00000000  48 31 ff 48 8b 4c 24 10  48 8b 09 80 e9 30 7c 11  |H1.H.L$.H....0|.|
00000010  48 6b ff 0a 48 0f be d1  48 01 d7 48 c1 c9 08 eb  |Hk..H...H..H....|
00000020  ea b8 25 00 00 00 0f 05  eb fe                    |..%.......|
0000002a

(wygenerowany po nasmdodaniu BITS 64dyrektywy)

Nieco bardziej czytelna wersja:

global _start

_start:
    xor rdi,rdi
    mov rcx,[rsp+16]
    mov rcx,[rcx]
argparse:
    sub cl,'0'
    jl alarm
    imul rdi,10
    movsx rdx,cl
    add rdi,rdx
    ror rcx,8
    jmp argparse
alarm:
    mov rax,37
    syscall
loop:
    jmp loop
Matteo Italia
źródło
2

Python, 58 55 51

Wow ... dłużej niż C. Musi być lepszy sposób. Jeszcze trochę, ale przynajmniej bije rozwiązanie C!

import time;t=time.time;u=t()+input()
while t()<u:1
Kok
źródło
1
Haha, uwielbiam twoje pierwsze zdanie. Osobiście uważam odpowiedź C za wartość nominalną.
user12205
1
@ace (ledwo) Naprawiono!
Bob
2
Teraz inne rozwiązanie C bije twoje!
user12205
1
@ace Ah, poddaję się, przynajmniej ten jest przenośny! : P (faktycznie patrzyłem na sigalrm wcześniej, ale konfigurowanie i używanie sygnałów jest po prostu zbyt drogie ... Python może być dość pracowity, gdy wymagane są jego biblioteki lib: [)
Bob
2

Java - 154 148 186

Dziwny błąd zjadł moją Thread.sleep()część

public class Z{public static void main(String[]a) throws Exception{new Thread(){public void run(){for(;;);}.start();Thread.sleep(Byte.valueOf(a[0])*1000);System.exit(0);}}

i bardziej czytelna wersja:

public class Z {
    public static void main(String[] a) throws Exception {
        new Thread() {
            public void run() {
                for (;;)
                    ;
            }
        }.start();
        Thread.sleep(Byte.valueOf(a[0]) * 1000);
        System.exit(0);
    }
}

Odradza się new Threadz ładną nieskończoną pętlą ( for(;;);), a następnie w głównym wątku thread.sleep()ai System.exit(0)po upływie limitu czasu, aby wyjść; ctrl-c wychodzi, również na cmdline nie był w stanie tego skrócić exit(). zawieszanie się nie zadziała;

masterX244
źródło
2

Partia, 2 znaki

%0

W gruncie rzeczy program ciągle zaczyna się od nowa. Twoje wyniki mogą się różnić ze względu na priorytet przydzielania zadań procesorowi, ale działa dla mnie.

Stack Tracer
źródło
2

PowerShell, 18 54 50 bajtów

Aby wytworzyć 100% obciążenia dla wszystkich rdzeni procesora.

for($s=date;($s|% AddS* "$args")-ge(date)){sajb{}}
  • Skrypt zajmuje czas w sekundach jako argument.
  • | AddS*jest skrótem do .AddSeconds()metody.
  • sajbjest aliasem polecenia Start-Jobcmdlet.
mazzy
źródło
1
W jaki sposób spełnia to wymaganie 2 ( must take a numeric input, representing the number seconds the stress-test should run)?
Οurous
Dzięki. Naprawiono ..
mazzy
1

Linux sh i standardowe narzędzia, 14

Najnowsze gnu coreutils zawiera timeoutnarzędzie, które jest pomocne:

 timeout $1 yes
Nate Eldredge
źródło
1
Nigdzie blisko 100% procesora dla mnie; jest zbyt dławiony przez konieczność drukowania Myślę, że ... czy jest jeszcze jedno polecenie?
Nick T
timeout $1 yes :|sh- 19 to prawdopodobnie najlepsze, co możesz zrobić i uzyskać 100% wykorzystania. Kusiło mnie, by ukraść to za moją odpowiedź, ale będę sportowcem :)
Cyfrowa trauma
1

Matlab - 19

tic;while toc<5;end

Zamień na 5żądany czas wykonania.

Moriarty
źródło
1

Go, 215 212 193 bajtów (pełny)

package main
import(."runtime"
f"flag"
."strconv"
."time")
func main(){f.Parse()
c:=NumCPU()*2
t,_:=Atoi(f.Arg(0))
GOMAXPROCS(c)
for;c>0;c--{go(func(){for{Now()}})()}
<-After(Duration(t)*1e9)}

Bonus, podkreśla wszystkie procesory.

Now()W pętli jest tam kopać w harmonogramie, Nowbyła najkrótsza nazwa funkcji mogę znaleźć w moim nazw

Jeśli uruchomię, go fmtrozmiar wzrośnie do 286 277 254 bajtów

Kristoffer Sall-Storgaard
źródło
1

Bash: 19 znaków

function f(){ f;};f
Zamieszki
źródło
1

Montaż: 16 bajtów

_start:jg _start

Edycja: Nie zauważyłem wymogu wprowadzania danych numerycznych, zamierzam twierdzić, że zajmuje jedno z wiersza poleceń, ale ignoruje je =)

Zamieszki
źródło
Czy to wymaga wprowadzenia danych liczbowych przez liczbę sekund, które wykonuje test? Wydaje mi się, że po prostu zapętla się w nieskończoność. Cokolwiek to jest, pamiętaj, aby dodać wyjaśnienie w swojej odpowiedzi.
Justin
Och ... całkowicie przeczytałem tę część pytania: /
Riot
1

Partia DOS - 5 bajtów

%0|%0

Partia DOS - 8 bajtów

%0|%0&%0

Drugi to tłumaczenie niesławnego widełka sh.

Ctrl + C psuje program (chyba że trochę poprawiłeś ustawienia).

Isiah Meadows
źródło
1

C #, 118

using a=System.DateTime;class b{static void Main(string[]c){var d=a.Now.AddSeconds(int.Parse(c[0]));while(d>a.Now){}}}

Bez kompresji

using a = System.DateTime;
class b 
{ 
    static void Main(string[] c) 
    {
        var d = a.Now.AddSeconds(int.Parse(c[0]));
        while (d > a.Now) { } 
    } 
}

Wymaga to podania liczby jako argumentu, który jest liczbą sekund do uruchomienia. Użyje 100% jednego rdzenia przez tak długi czas lub do momentu crtl + c. Jestem prawie pewien, że jest tak mały, że C # pójdzie z jego gadatliwością.

gSamp
źródło
1

C # - 178 znaków

using A=System.DateTime;class P{static void Main(string[]a){var b=A.Now.AddSeconds(int.Parse(a[0]));System.Threading.Tasks.Parallel.For(0,1<<30,(i,l)=>{if(A.Now>b)l.Stop();});}}

I bardziej czytelny:

using A = System.DateTime;
{ 
    class P 
    {
        static void Main(string[] a)
        { 
            var b = A.Now.AddSeconds(int.Parse(a[0]));
            System.Threading.Tasks.Parallel.For(0, 1 << 30, (i, l) => 
            {
                if (A.Now > b)l.Stop(); 
            });
        }
    }
}

To 178 znaków w C # i wykorzystuje wszystkie rdzenie.

Jedyną słabością jest to, że zawsze kończy się z powodu limitu liczby całkowitej 1 << 30.

Nipokkio
źródło
1

Java - 88 znaków

class S{public static void main(String[]a){for(long i=0;i<Long.valueOf(a[0]);){i=i+1;}}}

Pozwala to na 2⁶³-1 pętli.

Bardziej czytelna wersja

class S {
    public static void main(String[] a) {
      for (long i = 0; i < Long.valueOf(a[0]);) { i = i + 1; }
}

C # - 87 znaków

class S{public static void Main(string[]a){for(long i=0;i<long.Parse(a[0]);){i=i+1;}}}

Bardziej czytelna wersja

class S {
public static void Main(string[] a) {
    for(long i = 0;i < long.Parse(a[0]);i++) { i = i + 1; }
}
}

Program ustalający rdzeń

(Jest to system 4-rdzeniowy)

Justin Krejcha
źródło
OP poprosił o 100%
Milo
OP określił również, że wystarczy tylko przypiąć jeden rdzeń. Może wzrosnąć do 25% (co stanowi 100% 1 rdzenia).
Justin Krejcha
2
Nie być wybrednym, ale twój obraz pokazuje 24,89%, a nie 25%
Milo
Prawdziwe. To zależy od tego, co dzieje się na tym rdzeniu. Jeśli nic się nie dzieje na rdzeniu, wykorzysta pełne 25%.
Justin Krejcha,
1

EcmaScript 6:

z=z=>{while(1)z()};_=i=>(i+=1,i-=1,i++,i--,--i,++i,i<<=2,i>>=2,i+=0|Math.round(1+Math.random())&1|0,z(x=>setInterval(x=>z(x=>new Worker('data:text/javascript,'+_.toSource()),5))));setInterval(x=>z(x=>_(...Array(i=9e3).map((x,z)=>z*3/2*2/4*4e2>>2<<2))),5)

To zużyje 100% procesora na maszynie z jednym rdzeniem, a dzięki Firefox ma dodatkową zaletę, że Firefox zużywa coraz więcej pamięci; cały interfejs się blokuje, a jedynym sposobem na jego zatrzymanie jest zabicie Firefoksa w menedżerze zadań.

Szczoteczka do zębów
źródło
1

perl, 23 bajty

Nie mogę wymyślić, jak wkleić tutaj literalną kombinację-T, więc zamiast tego wpisałem $ ^ T, ale jedno z nich działa (literał jest o 1 znak krótszy przy 23 bajtach):

$e=$^T+<>;1 until$e<time

$ ^ T to tylko czas uruchomienia interpretera, więc możesz w zasadzie odczytać to jako time (), ponieważ jest to pierwsza rzecz, którą obliczamy.

skibrianski
źródło
1

Python, 30

Ta stara łamigłówka była dla mnie interesująca, mam nadzieję, że można w niej odpowiedzieć na stare pytanie. Po prostu nie mogłem pozwolić, aby odpowiedzi C pokonały Pythona. ;)

sum(range(int(input())*2**26))

To wymaga dostrojenia dla różnych procesorów, ale nie sądzę, że narusza OP ... sum(range(2**27))peguje jeden z moich rdzeni i7 2,8 GHz przez około sekundę. :)

James
źródło
1
Witamy w PPCG! Publikowanie odpowiedzi na stare pytania jest tutaj w pełni akceptowalne, jednak, o ile widzę, odpowiedź ta nie spełnia całego wymogu must produce 100% CPU load until aborted.
Laikoni,
Dzięki! :) Na mojej maszynie ten kod generuje 100% obciążenia na jednym rdzeniu i mogę go przerwać jak każdy inny skrypt, naciskając Ctrl-C lub zabijając proces nadrzędny (np. Zamykając okno terminala) lub itp. Uwaga również wymaganie 2: must take a numeric input, representing the number seconds the stress-test should run. Aby kod musiał w jakiś sposób pobierać dane wejściowe użytkownika i odpowiednio się ograniczać, a także po prostu ustalać procesor. To jest najbardziej interesująca dla mnie zagadka ...
James
Masz rację, dzięki za wyjaśnienie.
Laikoni,