Kode minimal penguji stres CPU ...

28

pengantar

Ada banyak utilitas di luar sana yang mampu menciptakan beban CPU yang tinggi untuk menguji-stres prosesor Anda. Di Microsoft Windows, Anda bahkan dapat menggunakan on-board calculator.exe, memasukkan angka seperti 999999999, dan menekan n!beberapa kali untuk membuat CPU Anda bekerja lembur.

Tapi apa solusinya jika Anda tidak membuatnya sendiri?

Misi

Misi Anda - jika Anda memilih untuk menerimanya - adalah menciptakan alat uji stres CPU terkecil di planet ini.

Harus…

  1. harus menghasilkan 100% beban CPU hingga dibatalkan
  2. harus mengambil input numerik, mewakili angka detik stress-test harus dijalankan
  3. harus memungkinkan interaksi pengguna (penekanan tombol, jendela terminal penutupan, atau sesuatu seperti itu) yang harus memungkinkan pengguna untuk membatalkan stress-test dan / atau keluar dari program
  4. harus menargetkan Microsoft Windows, Mac OSx, dan / atau Linux.
    (Bahkan seekor hamster dapat menekankan Comodore64 ... karena itu, Anda harus menargetkan sistem operasi saat ini.)

Tidak harus…

  1. tidak boleh menggunakan program atau alat pihak ketiga yang menggantikan fungsi yang diharapkan.
    (Mengusulkan cara pintas seperti system('cpuStressThing.exe')mendiskualifikasi proposal Anda.)

Mungkin…

  1. dapat menggunakan pendekatan / algoritma / fungsionalitas apa pun untuk menghasilkan 100% beban CPU yang diharapkan
  2. dapat menggunakan bahasa pemrograman atau skrip apa saja
    (asalkan memungkinkan verifikasi praktis fungsinya dengan menjalankannya)

Kondisi Menang

Hadirkan kode sumber sekecil mungkin. Pemenangnya adalah yang menyajikan kode sumber paling minimal (dalam ukuran) yang memenuhi syarat "harus" dan "tidak boleh" di atas. Sekarang, buat bayi itu terbakar ...


EDIT

Karena pertanyaan muncul di area komentar ... Anda hanya perlu menargetkan 1 inti CPU. Saya jelas tidak mengharapkan Anda untuk menghasilkan solusi multi-core. Bagaimanapun, ini harusnya menyenangkan - bukan bekerja.

e-sushi
sumber
5
Apakah "100% dari satu inti" cukup, atau maksud Anda "100% dari CPU multi-inti"?
Tobia
@Tobia Yap, 1 core sudah cukup. Saya telah mengedit pertanyaan saya untuk secara khusus memasukkan informasi itu. Terima kasih telah menunjukkan kepada saya bahwa itu tidak terlalu jelas.
e-sushi
3
melakukan cryptocurrency miners count /
TheDoctor
2
@TheDoctor Jika Anda dapat membuatnya sesuai dengan kondisi yang saya jelaskan ... menjadi tamu saya. Tentunya akan menarik untuk melihat penambang cryptocurrency yang mampu mengalahkan (misalnya) skrip bash 36 byte dalam filesize.
e-sushi
Masalahnya adalah bahwa sebagian besar penambang adalah beberapa ribu baris kode.
TheDoctor

Jawaban:

28

Bash dan utilitas standar, 36 31 22 29 28 26 byte

yes :|sh&sleep $1;kill $!
Trauma Digital
sumber
2
Itu terlihat sangat cantik untuk kode Bash! Itu jawaban yang sangat bagus!
Ismael Miguel
Anda tidak perlu :masuk do :; done. Saya telah menemukan do;donepekerjaan - yang akan menarik Anda dalam 2 byte. Juga +1 karena hampir setengah panjang dari solusi bash saya (saya membuatnya terlalu rumit tanpa alasan yang baik karena saya lupa tentang $!).
Chris J
1
@ChrisJ - yang tidak bekerja untuk saya: bash: syntax error near unexpected token `;'. Saya sudah mencoba versi pesta ini: 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)
Digital Trauma
1
@ ChrisJ - Saya kira Anda memiliki sendiri kshjawaban 34-byte lalu ;-)
Digital Trauma
2
Saya menempatkannya $1di 10sana, hanya untuk membuatnya menjadi skrip yang "mengambil input numerik".
Tobia
20

Bash / iputils (Linux), 14 byte

ping6 -fw$1 ::

Banjir-ping alamat IPv6 null, sampai -w tenggat waktu berakhir

peringatan - hanya mengkonsumsi 55-60% CPU pada VM pengujian saya

Sunting: - Saya menarik kembali peringatan saya. Sementara topmelaporkan ping6proses hanya mengkonsumsi 55-60% CPU, saya melihat persentase total CPU idle (2 core VM) mendekati nol. Ini mungkin karena banyak proses yang terjadi di kernel karena menangani paket-paket.

Catatan - harus dijalankan sebagai root. Seperti komentar @Tobia, ini sepertinya persyaratan yang masuk akal untuk sesuatu yang akan memakan CPU. Dan OP menyetujuinya dalam komentar.

Trauma Digital
sumber
6
+1. Saya akan menghapus sudo dan hanya menyatakan bahwa tes harus dijalankan sebagai root. Sepertinya persyaratan yang masuk akal untuk sesuatu yang akan memakan CPU.
Tobia
@Tobia - terima kasih - Saya pikir Anda ke sesuatu ;-)
Digital Trauma
ping -6 :: -t-> hanya jika ini pada windows membuat cpu saya menjadi liar ... Ini hanya setara linux di windows, yang hanya memberikan kesalahan dan bahkan tidak memuat cpu pada 1%! Saya menggunakan windows 8 pro x64 pada core2quad 2.63GHz.
Ismael Miguel
@ IsmaelMiguel - ya - Saya tidak punya jendela untuk menguji ini. Itulah mengapa saya menyatakan "Linux" dalam judul ;-)
Digital Trauma
Saya tahu, saya hanya "memberikan" jawaban ini sebagai jawaban yang tidak berfungsi, bagi mereka yang berpikir untuk mencoba hal yang sama di windows, seperti yang saya lakukan dan gagal.
Ismael Miguel
9

Elf32 biner mandiri - 86 byte

Saya yakin ini adalah biner format Elf terkecil yang terbentuk dengan benar yang dapat dibuat untuk melakukan fungsi ini. Ini akan dijalankan tanpa dukungan tambahan pada platform berbasis linux apa pun, atau berpotensi bahkan tanpa sistem operasi .

Unduhan biner: http://ge.tt/3m6h2cK1/v/0?c

Hex dump:

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.

Ini dilakukan dengan membangun file asm dengan header Elf minimal sendiri, dan melewatkan penggunaan ldsemuanya.

Majelis:

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     $ - $$

Dibangun dengan nasm -f bin tiny_cpu_stresser_elf32.asm -o tiny_cpu_stresser_elf32

Kerusuhan
sumber
7

bash builtins hanya 20 byte

ulimit -t $1;exec $0
Geoff Reedy
sumber
@ e-sushi coba dengan terminal yang lebih cepat, mis. konsol teks atau xterm atau rxvt
Geoff Reedy
6

C, 52

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

Tekan Ctrl + C untuk keluar.

masukkan deskripsi gambar di sini

pengguna12205
sumber
Jika Anda melakukannya di php, Anda akan menang! Hapus saja $i=<>bagian dan tambahkan <?ke awal dan Anda baik untuk pergi!
Ismael Miguel
5

Perl, 32

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

Sekarang bagian yang memalukan: Aku dengan bodohnya meletakkan $t=timedi depan $i=<>dan dengan marah berusaha mencari tahu mengapa itu keluar beberapa detik lebih awal.

Sekali lagi, Ctrl + C untuk keluar.

masukkan deskripsi gambar di sini

pengguna12205
sumber
5

Unix C, 47

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

Lewati waktu pada baris perintah. Kunci interupsi (Ctrl-C) dibatalkan.

Nate Eldredge
sumber
3
jika Anda menggunakan scanftrik @ ace , Anda bisa mendapatkan ke 39:main(a){for(scanf("%d",&a),alarm(a);;);}
Dave
4

Smalltalk (Smalltalk / X), 34

masukan: n; interupsi dengan CTRL-c atau CMD-.

[[]loop]valueWithTimeout:n seconds

bisa bermain golf lebih baik, jika diukur dalam hari ;-) (hanya bercanda):

[[]loop]valueWithTimeout:n days

masukkan deskripsi gambar di sini

atau dari baris perintah: masukkan deskripsi gambar di sini

blabla999
sumber
4

Ini bukan upaya serius untuk itu, tapi ...

Bash, 12 byte

:(){ :|:&};:

Seperti yang ditemukan di Wikipedia .

PERINGATAN: kode berbahaya, jangan jalankan di komputer Anda!


Secara teknis:
- Ini menghasilkan 100% beban CPU sampai sistem crash;
- Mengizinkan interaksi pengguna untuk menghentikannya (jika Anda berhasil membunuh semua garpu, Anda benar-benar dapat menghentikannya ...);
- Anda bisa memberikannya input numerik yang mewakili jumlah detik yang harus dijalankan, tetapi itu tidak akan menggunakannya.

Vereos
sumber
4

PHP 43 40 byte:

Saya harap ini jawaban yang bisa diterima:

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

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

Saya bisa melakukan ini: <?for(set_time_limit($_POST['t']);;);tetapi akan kehilangan fleksibilitas dan 3 byte.


Dan saya bisa menipu dan melakukan seperti ini: <?for(set_time_limit($_REQUEST[t]);;);. Ini memangkas 2 byte, tapi itu bukan solusi "standar". Mari kita menjaga permainan tetap adil.


Seperti yang disarankan @fireeyedboy dan @primo, Anda juga dapat menggunakan solusi ini (34 byte):

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

Ini memungkinkan penggunaannya dari konsol, menyebutnya seperti ini:

php <filename> <time in seconds>

Seperti yang saya katakan, saya tidak menargetkan solusi konsol, tetapi mereka harus mendapatkan kredit untuk yang satu ini.

Jawaban lain bisa berupa "monster" ini, yang hanya merupakan gabungan kedua jawaban:

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

Tidak mungkin mendapatkan penekanan tombol di php, tanpa di konsol, yang tidak saya targetkan!

Untuk menghentikannya, Anda HARUS membatalkan prosesnya (menghentikan halaman dari memuat mungkin menghentikan kode)!

Sebagai nilai tambah, ini juga berfungsi di Android! Jika Anda menginstal server php (gratis di Google Play).

Untuk membuatnya bekerja, lakukan saja seperti ini:

Anda membuat halaman web .php dan menambahkan ?t=<time in seconds>ke akhir url atau mengirim posting (menggunakan formulir atau bahkan ajax).

Ismael Miguel
sumber
1
@ e-sushi saya memperbaiki jawabannya dan mengurangi 3 byte. Tidak sekecil solusi Bash, tapi tutup. Dan dengan fleksibilitas!
Ismael Miguel
Jalankan dari baris perintah: ganti $_REQUEST['t']dengan $argv[1]lalu panggil dengan: php -f cpustresstest.php <timelimit>dan batalkan dengan ^C.
Decent Dabbler
Mengapa tidak menggunakan $_GETbukan $_REQUEST? 4 byte dan Anda GETtetap menggunakan
Kristoffer Sall-Storgaard
@ KristofferSHansen Karena fleksibilitas kode saya akan sangat terluka.
Ismael Miguel
@fireeyedboy Kedengarannya seperti ide yang bagus, tapi seperti yang saya katakan, saya tidak menargetkan ke konsol.
Ismael Miguel
3

BrainFuck / Extended BrainFuck : 3

+[]

Ini akan menggunakan 100% CPU pada satu inti sampai dibatalkan. Semua program Brainfuck adalah program EBF yang valid.

Zozotez LISP : 7 15 19

Saat menggunakan driver kecil.

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

Sebagai ekspresi mandiri tanpa pengemudi: 15

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

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

Sylwester
sumber
3

Perl - 14 byte

alarm<>;{redo}

Set a SIGALRMuntuk dikirim dalam inputdetik, yang mengakhiri skrip. Sementara itu, ia berputar dalam penantian yang sibuk.

Penggunaan sampel:

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

Perl - 12 (+1) byte

Jika opsi baris perintah dihitung masing-masing satu byte, ini dapat dikurangi menjadi 13 byte menggunakan -n:

alarm;{redo}

Penggunaan sampel:

$ echo 4 | perl -n stress.pl
Terminating on signal SIGALRM(14)
primo
sumber
+1 untuk penggunaan sinyal yang cerdas agar secara ringkas memenuhi persyaratan keluar.
Siput mekanik
3

x86_64 rakitan di Linux - 146 (sumber), 42 (kode rakitan)

Sumber yang diperkecil NASM (146 byte):

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

Menerima parameter pada baris perintah yang menetapkan jumlah detik untuk dijalankan dalam kisaran (0, 9999999]; dapat diinterupsi dengan Ctrl-C yang biasa.

Anda dapat merakitnya dengan

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

Secara teori akan perlu untuk menambahkan global _startdiikuti oleh _start:label di awal, tetapi ldberhasil memperbaikinya sendiri dengan sedikit keributan.

Kode mesin yang sesuai (42 byte):

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

(dihasilkan dengan nasmmenambahkan BITS 64arahan)

Versi yang lebih mudah dibaca:

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
sumber
2

Python, 58 55 51

Wow ... lebih lama dari C satu. Pasti ada cara yang lebih baik. Masih agak lama, tapi setidaknya itu mengalahkan solusi C!

import time;t=time.time;u=t()+input()
while t()<u:1
Bob
sumber
1
Haha, aku suka kalimat pertamamu. Secara pribadi saya menganggap jawaban C sebagai par.
user12205
1
@ace (Nyaris) Diperbaiki!
Bob
2
Sekarang solusi C lainnya mengalahkan milik Anda!
user12205
1
@ace Ah, saya menyerah, Setidaknya ini portabel! : P (saya benar-benar melihat sigalrm sebelumnya, tapi itu terlalu mahal untuk membuat dan menggunakan sinyal ... Python bisa agak bertele-tele saat libs perusahaan diwajibkan: [)
Bob
2

Jawa - 154 148 186

Kesalahan aneh memakan Thread.sleep()bagian saya

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);}}

dan versi yang lebih mudah dibaca:

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);
    }
}

Memunculkan new Threaddengan loop tak berujung yang bagus ( for(;;);) lalu pada utas utama thread.sleep()dan System.exit(0)setelah batas waktu untuk keluar; ctrl-c keluar, juga pada cmdline tidak dapat menyingkatnya exit(). menabrak tidak akan bekerja;

masterX244
sumber
2

Batch, 2 karakter

%0

Intinya, program terus-menerus memulai sendiri. Hasil Anda dapat bervariasi, karena prioritas alokasi tugas prosesor, tetapi itu berfungsi untuk saya.

Stack Tracer
sumber
2

Powershell, 18 54 50 byte

Untuk menghasilkan beban 100% untuk semua core CPU.

for($s=date;($s|% AddS* "$args")-ge(date)){sajb{}}
  • Script membutuhkan waktu dalam detik sebagai argumen.
  • | AddS*adalah jalan pintas untuk .AddSeconds()metode.
  • sajbadalah alias untuk Start-Jobcmdlet.
mazzy
sumber
1
Bagaimana ini memenuhi persyaratan 2 ( must take a numeric input, representing the number seconds the stress-test should run)?
Surous
Terima kasih. Diperbaiki ..
mazzy
1

Linux sh dan utilitas standar, 14

Coreuils gnu baru-baru ini mencakup timeoututilitas yang bermanfaat:

 timeout $1 yes
Nate Eldredge
sumber
1
Tidak ada CPU 100% dekat bagi saya; terlalu diperketat dengan harus mencetak saya pikir ... apakah ada perintah lain?
Nick T
timeout $1 yes :|sh- 19 mungkin adalah yang terbaik yang dapat Anda lakukan dan dapatkan utilisasi 100%. Tergoda untuk mencuri ini untuk jawaban saya, tetapi saya akan seperti olahragawan :)
Digital Trauma
1

Matlab - 19

tic;while toc<5;end

Ganti 5dengan waktu eksekusi yang diinginkan.

Moriarty
sumber
1

Go, 215 212 193 byte (penuh)

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, menekankan semua CPU.

Di Now()dalam loop ada di sana untuk menendang penjadwal, Nowadalah nama fungsi terpendek yang bisa saya temukan di namespace saya

Jika saya menjalankan go fmtukuran meningkat menjadi 286 277 254 byte

Kristoffer Sall-Storgaard
sumber
1

Bash: 19 karakter

function f(){ f;};f
Kerusuhan
sumber
1

Majelis: 16 byte

_start:jg _start

Sunting: Setelah tidak memperhatikan persyaratan untuk mengambil input numerik, saya akan mengklaim itu mengambil satu di commandline, tetapi mengabaikannya =)

Kerusuhan
sumber
Ini membutuhkan input numerik selama beberapa detik tes berjalan? Bagi saya sepertinya hanya loop tak terhingga. Apa pun itu, ingatlah untuk menambahkan penjelasan dalam jawaban Anda.
Justin
Oh ... benar-benar membaca melewati bagian dari pertanyaan: /
Kerusuhan
1

DOS Batch - 5 byte

%0|%0

DOS Batch - 8 byte

%0|%0&%0

Kedua adalah terjemahan dari forkbomb sh yang terkenal.

Ctrl + C merusak program (kecuali jika Anda sedikit mengubah pengaturan).

Isiah Meadows
sumber
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){}}}

Tidak terkompresi

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

Ini membutuhkan angka sebagai argumen yang merupakan jumlah detik untuk dijalankan. Ini akan menggunakan 100% dari satu inti untuk waktu sebanyak itu atau sampai crtl + c. Saya cukup yakin ini sekecil C # akan sesuai dengan verbositasnya.

gSamp
sumber
1

C # - 178 karakter

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();});}}

Dan lebih mudah dibaca:

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(); 
            });
        }
    }
}

Itu 178 karakter di C # dan menggunakan semua core.

Satu-satunya kelemahan yang selalu berakhir karena 1 << 30 batas integer.

Nipokkio
sumber
1

Java - 88 karakter

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

Ini memungkinkan untuk loop 2⁶³-1.

Versi Lebih Mudah Dibaca

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

C # - 87 karakter

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

Versi Lebih Mudah Dibaca

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

Program mematok inti

(Ini pada sistem 4 inti)

Justin Krejcha
sumber
OP meminta 100%
Milo
OP juga menentukan bahwa Anda hanya perlu mematok satu inti. Dapat mencapai 25% (yang merupakan 100% dari 1 inti).
Justin Krejcha
2
Jangan pilih-pilih tetapi gambar Anda menunjukkan 24,89% bukan 25%
Milo
Benar. Itu tergantung pada apa yang terjadi pada inti itu. Jika tidak ada yang terjadi pada inti, itu akan menggunakan 25% penuh.
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)

Ini akan menggunakan 100% CPU pada mesin single-core, dan dengan Firefox, ia memiliki bonus tambahan bahwa Firefox terus menggunakan semakin banyak memori; seluruh antarmuka terkunci dan satu-satunya cara untuk menghentikannya adalah dengan mematikan Firefox di task manager.

Sikat gigi
sumber
1

perl, 23 byte

Saya tidak tahu bagaimana cara menempelkan kontrol literal-T di sini, jadi saya mengetik $ ^ T sebagai gantinya, tetapi salah satu kerjanya (literalnya adalah 1 char lebih pendek pada 23 byte):

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

$ ^ T hanyalah waktu penerjemah dimulai, jadi Anda pada dasarnya dapat membacanya sebagai waktu () karena ini adalah hal pertama yang kami hitung.

skibrianski
sumber
1

Python, 30

Saya menemukan puzzle lama ini menarik, saya harap tidak apa-apa untuk mengirim jawaban atas pertanyaan lama. Saya tidak bisa membiarkan jawaban C mengalahkan Python. ;)

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

Ini perlu disetel untuk CPU yang berbeda, tapi saya tidak berpikir itu melanggar OP ... sum(range(2**27))mematok salah satu dari core i7 2.8GHz saya selama sekitar satu detik. :)

James
sumber
1
Selamat datang di PPCG! Posting jawaban untuk pertanyaan lama dapat diterima di sini, namun sejauh yang saya lihat jawaban ini tidak memenuhi persyaratan must produce 100% CPU load until aborted.
Laikoni
Terima kasih! :) Di mesin saya, kode ini menghasilkan 100% beban pada satu inti, dan saya dapat membatalkannya seperti skrip lain dengan menekan Ctrl-C atau mematikan proses induk (misalnya, dengan menutup jendela terminal) atau lain-lain. Perhatikan juga persyaratan 2: must take a numeric input, representing the number seconds the stress-test should run. Sehingga kode perlu mengambil input pengguna entah bagaimana dan membatasi diri sesuai, serta hanya mematok CPU. Ini adalah bagian yang saya temukan paling menarik tentang teka-teki ...
James
Anda benar, terima kasih atas klarifikasi.
Laikoni