CPU tối thiểu kiểm tra căng thẳng CPU thử nghiệm


28

Giới thiệu

Có rất nhiều tiện ích ngoài kia có khả năng tạo ra tải CPU cao để kiểm tra căng thẳng (các) bộ xử lý của bạn. Trên Microsoft Windows, bạn thậm chí có thể sử dụng trên máy bay calculator.exe, nhập số lượng lớn như 999999999và nhấn n!nhiều lần để làm cho CPU của bạn hoạt động thêm giờ.

Nhưng những gì trong một giải pháp nếu bạn không tự tạo ra nó?

Nhiệm vụ

Nhiệm vụ của bạn - nếu bạn chọn chấp nhận nó - là tạo ra công cụ kiểm tra căng thẳng CPU nhỏ nhất trên hành tinh.

Phải…

  1. phải tạo ra 100% tải CPU cho đến khi bị hủy bỏ
  2. phải lấy một đầu vào số, biểu thị số giây mà bài kiểm tra căng thẳng sẽ chạy
  3. phải cho phép người dùng tương tác (nhấn phím, đóng cửa sổ đầu cuối hoặc một cái gì đó tương tự) để cho phép người dùng hủy bỏ kiểm tra căng thẳng và / hoặc thoát khỏi chương trình
  4. phải nhắm mục tiêu Microsoft Windows, Mac OSx và / hoặc Linux.
    (Ngay cả một con chuột đồng cũng có thể nhấn mạnh Comodore64, do đó, bạn phải nhắm mục tiêu một hệ điều hành hiện tại.)

Không được…

  1. không được sử dụng các chương trình hoặc công cụ của bên thứ 3 thay thế chức năng dự kiến.
    (Đề xuất các phím tắt theo sở thích system('cpuStressThing.exe')không đủ điều kiện đề xuất của bạn.)

Có thể…

  1. có thể sử dụng bất kỳ cách tiếp cận / thuật toán / chức năng nào để tạo ra tải CPU 100% dự kiến
  2. có thể sử dụng bất kỳ ngôn ngữ lập trình hoặc tập lệnh nào
    (miễn là nó cho phép xác minh thực tế chức năng của nó bằng cách chạy nó)

Điều kiện chiến thắng

Trình bày mã nguồn nhỏ nhất có thể. Người chiến thắng là người trình bày mã nguồn tối thiểu nhất (về kích thước) tuân thủ các điều kiện trên phải bắt buộc và các điều kiện không phải là điều kiện trên. Bây giờ, làm cho em bé đó đốt cháy


CHỈNH SỬA

Vì câu hỏi được đưa ra trong khu vực bình luận, bạn chỉ cần nhắm mục tiêu 1 lõi CPU. Tôi chắc chắn không mong đợi bạn tạo ra một giải pháp đa lõi. Rốt cuộc, điều này nên vui vẻ - không hoạt động.


5
"100% một lõi" đã đủ chưa, hay bạn có nghĩa là "100% CPU đa lõi"?
Tobia

@Tobia Yep, 1 lõi là đủ. Tôi đã chỉnh sửa câu hỏi của mình để bao gồm thông tin đó. Cảm ơn đã chỉ cho tôi thực tế rằng điều đó không quá rõ ràng.
e-sushi

3
đếm số người khai thác tiền điện tử /
TheDoctor

2
@TheDoctor Nếu bạn có thể làm cho nó phù hợp với điều kiện tôi mô tả là khách của tôi. Chắc chắn sẽ rất thú vị khi thấy một công cụ khai thác tiền điện tử có khả năng đánh bại (ví dụ) một tập lệnh bash 36 byte trong kích thước tệp.
e-sushi

Vấn đề là hầu hết các thợ mỏ là vài nghìn dòng mã.
TheDoctor

Câu trả lời:


28

Bash và các tiện ích tiêu chuẩn, 36 31 22 29 28 26 byte

yes :|sh&sleep $1;kill $!

2
Điều đó có vẻ khá tuyệt vời cho một mã Bash! Đó thực sự là một câu trả lời hay!
Ismael Miguel

Bạn không cần :trong do :; done. Tôi đã tìm thấy do;donecông việc - điều đó sẽ kéo bạn trong 2 byte. Ngoài ra +1 vì gần một nửa chiều dài của giải pháp bash của tôi (tôi đã làm cho nó quá phức tạp mà không có lý do chính đáng như tôi đã quên $!).
Chris J

1
@ChrisJ - điều đó không hiệu quả với tôi : bash: syntax error near unexpected token `;'. Tôi đã thử các phiên bản 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)
Digital Chấn thương

1
@ChrisJ - Tôi đoán bạn đã có cho mình kshcâu trả lời 34 byte rồi ;-)
Chấn thương kỹ thuật số

2
Tôi đã đặt nó $110đó, chỉ để biến nó thành một kịch bản "lấy đầu vào số".
Tobia

20

Bash / iputils (Linux), 14 byte

ping6 -fw$1 ::

Lũ quét địa chỉ null IPv6, cho đến khi hết thời gian -w

hãy cẩn thận - chỉ tiêu tốn 55-60% CPU trên máy ảo thử nghiệm của tôi

Chỉnh sửa: - Tôi rút lại lời cảnh báo của mình. Trong khi topbáo cáo ping6quá trình chỉ tiêu tốn 55-60% CPU, tôi thấy tổng số phần trăm nhàn rỗi của CPU (VM 2 lõi) bằng không. Điều này có lẽ là do một lượng lớn quá trình xử lý đang diễn ra trong kernel khi nó xử lý các gói.

Lưu ý - phải được chạy dưới quyền root. Theo nhận xét của @Tobia, đây có vẻ như là một yêu cầu hợp lý cho thứ gì đó sẽ làm hỏng CPU. Và OP đã phê duyệt nó trong các ý kiến.


6
+1. Tôi sẽ loại bỏ sudo và chỉ ra rằng thử nghiệm phải được chạy dưới quyền root. Có vẻ như một yêu cầu hợp lý cho một cái gì đó sẽ hog CPU.
Tobia

@Tobia - cảm ơn - Tôi nghĩ rằng bạn đang tham gia một cái gì đó ;-)
Chấn thương kỹ thuật số

ping -6 :: -t-> chỉ khi điều này trên windows làm cho cpu của tôi phát điên ... Nó chỉ là linux tương đương trên windows, nó chỉ báo lỗi và thậm chí không tải cpu ở mức 1%! Tôi đang sử dụng windows 8 pro x64 trên core2quad 2,63GHz.
Ismael Miguel

@IsmaelMiguel - vâng - Tôi không có cửa sổ để kiểm tra điều này. Đó là lý do tại sao tôi đã nêu "Linux" trong tiêu đề ;-)
Chấn thương kỹ thuật số

Tôi biết, tôi chỉ "đưa ra" câu trả lời này là một câu hỏi không hoạt động, cho những người đang nghĩ về việc thử tương tự trong cửa sổ, như tôi đã làm và thất bại.
Ismael Miguel

9

Elf32 nhị phân độc lập - 86 byte

Tôi cá rằng đây là nhị phân định dạng Elf nhỏ nhất được hình thành chính xác có thể được thực hiện để thực hiện chức năng này. Điều này sẽ thực thi mà không cần bất kỳ sự hỗ trợ bổ sung nào trên bất kỳ nền tảng dựa trên linux nào, hoặc có khả năng ngay cả khi không có hệ điều hành .

Tải xuống nhị phân: http://ge.tt/3m6h2cK1/v/0?c

Đổ lục giác:

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.

Điều này được thực hiện bằng cách xây dựng một tệp asm với tiêu đề Elf tối thiểu của riêng nó và bỏ qua việc sử dụng ldhoàn toàn.

Hội,, tổ hợp:

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

Được xây dựng với nasm -f bin tiny_cpu_stresser_elf32.asm -o tiny_cpu_stresser_elf32


7

bash dựng sẵn chỉ 20 byte

ulimit -t $1;exec $0

@ e-sushi thử với thiết bị đầu cuối nhanh hơn, ví dụ: bảng điều khiển văn bản hoặc xterm hoặc rxvt
Geoff Reedy

6

C, 52

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

Nhấn Ctrl + C để thoát.

nhập mô tả hình ảnh ở đây


Nếu bạn làm điều đó trong php, bạn sẽ giành chiến thắng! Chỉ cần loại bỏ $i=<>một phần và thêm <?vào đầu và bạn là tốt để đi!
Ismael Miguel

5

Perl, 32

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

Bây giờ là phần đáng xấu hổ: Tôi dại dột đặt $t=timetrước mặt $i=<>và đang cố gắng tìm ra lý do tại sao nó thoát ra sớm vài giây.

Một lần nữa, Ctrl + C để thoát.

nhập mô tả hình ảnh ở đây


5

Unix C, 47

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

Vượt qua thời gian trên dòng lệnh. Phím ngắt (Ctrl-C) hủy bỏ.


3
nếu bạn sử dụng scanfthủ thuật của @ ace , bạn có thể giảm xuống còn 39:main(a){for(scanf("%d",&a),alarm(a);;);}
Dave

4

Smalltalk (Smalltalk / X), 34

đầu vào: n; ngắt với CTRL-c hoặc CMD-.

[[]loop]valueWithTimeout:n seconds

có thể chơi golf tốt hơn, nếu tính bằng ngày ;-) (chỉ đùa thôi):

[[]loop]valueWithTimeout:n days

nhập mô tả hình ảnh ở đây

hoặc từ một dòng lệnh: nhập mô tả hình ảnh ở đây


4

Đây không phải là một nỗ lực nghiêm túc về nó, nhưng ...

Bash, 12 byte

:(){ :|:&};:

Như được tìm thấy trên Wikipedia .

CẢNH BÁO: mã độc hại, không chạy nó trên máy tính của bạn!


Về mặt kỹ thuật:
- Nó tạo ra tải CPU 100% cho đến khi hệ thống gặp sự cố;
- Cho phép người dùng tương tác để ngăn chặn nó (nếu bạn quản lý để giết tất cả các nhánh, bạn thực sự có thể ngăn chặn nó ...);
- Bạn có thể cung cấp cho nó một đầu vào số đại diện cho số giây nó sẽ chạy, nhưng nó sẽ không sử dụng nó.


4

PHP 43 40 byte:

Tôi hy vọng đây là một câu trả lời chấp nhận được:

set_time_limit ($ _ YÊU CẦU ['t']); while (! 0);

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

Tôi có thể làm như thế này: <?for(set_time_limit($_POST['t']);;);nhưng nó sẽ mất tính linh hoạt và 3 byte.


Và tôi có thể gian lận và làm như thế này : <?for(set_time_limit($_REQUEST[t]);;);. Nó tắt 2 byte, nhưng nó không phải là giải pháp "chuẩn". Hãy giữ cho trò chơi công bằng.


Như @fireeyedboy và @primo đề xuất, bạn cũng có thể sử dụng giải pháp này (34 byte):

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

Điều này cho phép nó sử dụng từ bảng điều khiển, gọi nó như thế này:

php <filename> <time in seconds>

Như tôi đã nói, tôi không nhắm mục tiêu giải pháp giao diện điều khiển, nhưng họ phải nhận được tín dụng cho giải pháp này.

Một câu trả lời khác có thể là "quái vật" này, đó chỉ là cả hai câu trả lời kết hợp:

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

Không thể có được các lần nhấn phím trong php, mà không có trên bảng điều khiển, điều mà tôi không nhắm mục tiêu!

Để dừng nó, bạn PHẢI hủy bỏ quá trình (dừng trang tải có thể dừng mã)!

Thêm vào đó, nó cũng hoạt động trong Android! Nếu bạn cài đặt máy chủ php (miễn phí trên Google Play).

Để làm cho nó hoạt động, chỉ cần làm như thế này:

Bạn tạo một trang web .php và nối ?t=<time in seconds>vào cuối url hoặc gửi bài đăng (sử dụng biểu mẫu hoặc thậm chí ajax).


1
@ e-sushi Tôi đã sửa câu trả lời và giảm 3 byte. Không nhỏ như giải pháp Bash, nhưng gần gũi. Và với sự linh hoạt!
Ismael Miguel

Chạy từ dòng lệnh: thay thế $_REQUEST['t']bằng $argv[1]sau đó gọi nó bằng: php -f cpustresstest.php <timelimit>và hủy bỏ bằng ^C.
Dabbler Decent

Tại sao không sử dụng $_GETthay thế $_REQUEST? 4 byte và bạn đang sử dụng GETnào
Kristoffer Sall-Storgaard

@KristofferSHansen Vì tính linh hoạt của mã của tôi sẽ bị tổn thương nghiêm trọng.
Ismael Miguel

@fireeyedboy Nghe có vẻ là một ý tưởng hay, nhưng như tôi đã nói, tôi không nhắm mục tiêu vào bảng điều khiển.
Ismael Miguel

3

BrainFuck / BrainFuck mở rộng : 3

+[]

Nó sẽ sử dụng 100% cpu trên một lõi cho đến khi bị hủy bỏ. Tất cả các chương trình Brainfuck là các chương trình EBF hợp lệ.

Zozotez LISP : 7 15 19

Khi sử dụng trình điều khiển nhỏ.

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

Là một biểu thức độc lập không có trình điều khiển: 15

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

Sử dụng: echo '((\(L)(L))(\()(L)))' | jitbf zozotez.bf


3

Perl - 14 byte

alarm<>;{redo}

Đặt a SIGALRMsẽ được gửi trong inputvài giây, kết thúc tập lệnh. Trong khi đó, nó quay vòng trong sự chờ đợi bận rộn.

Sử dụng mẫu:

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

Perl - 12 (+1) byte

Nếu các tùy chọn dòng lệnh được tính là một byte mỗi, thì điều này có thể giảm xuống còn 13 byte bằng cách sử dụng -n:

alarm;{redo}

Sử dụng mẫu:

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

+1 để sử dụng thông minh các tín hiệu để đáp ứng chính xác yêu cầu thoát.
Ốc cơ khí

3

lắp ráp x86_64 trên Linux - 146 (nguồn), 42 (mã được lắp ráp)

Nguồn rút gọn 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

Chấp nhận một tham số trên dòng lệnh chỉ định số giây sẽ chạy trong phạm vi (0, 9999999]; có thể bị gián đoạn với Ctrl-C thông thường.

Bạn có thể lắp ráp nó với

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

Về lý thuyết, cần phải thêm một nhãn global _starttheo sau _start:ở đầu, nhưng ldquản lý để tự sửa nó với một chút phiền phức.

Mã máy tương ứng (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

(được tạo bằng nasmcách thêm BITS 64chỉ thị)

Một phiên bản dễ đọc hơn:

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

2

Con trăn, 58 55 51

Wow ... dài hơn cái C. Có một cách tốt hơn. Vẫn còn một chút dài, nhưng ít nhất nó cũng đánh bại giải pháp C!

import time;t=time.time;u=t()+input()
while t()<u:1

1
Haha, tôi yêu câu đầu tiên của bạn Cá nhân tôi coi một câu trả lời C là mệnh.
dùng12205

1
@ace (Hoàn toàn) Đã sửa!
Bob

2
Bây giờ giải pháp C khác đánh bại bạn!
dùng12205

1
@ace Ah, tôi bỏ cuộc, Ít nhất cái này là hàng xách tay! : P (Tôi thực sự đã xem sigalrm trước đó, nhưng nó quá tốn kém để thiết lập và sử dụng tín hiệu ... Python có thể khá dài dòng khi các lib của nó được yêu cầu: [)
Bob

2

Java - 154 148 186

Lỗi lạ đã ăn Thread.sleep()phần của tôi

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

và một phiên bản dễ đọc hơn:

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

Sinh ra a new Threadvới một vòng lặp vô tận đẹp ( for(;;);) sau đó trên luồng chính a thread.sleep()System.exit(0)sau khi hết thời gian để thoát; ctrl-c thoát, quá trên cmdline đã không thể viết tắt điều đó exit(). sự cố không hoạt động;


2

Mẻ, 2 ký tự

%0

Về bản chất, chương trình liên tục tự khởi động lặp đi lặp lại. Kết quả của bạn có thể khác nhau, do ưu tiên phân bổ tác vụ của bộ xử lý, nhưng nó hoạt động với tôi.


2

Powershell, 18 54 50 byte

Để tạo ra tải 100% cho tất cả các lõi CPU.

for($s=date;($s|% AddS* "$args")-ge(date)){sajb{}}
  • Kịch bản mất một thời gian tính bằng giây.
  • | AddS*lối tắt cho .AddSeconds()phương thức.
  • sajblà bí danh cho Start-Joblệnh ghép ngắn.

1
Làm thế nào để đáp ứng yêu cầu 2 ( must take a numeric input, representing the number seconds the stress-test should run)?
Οurous

Cảm ơn. Đã sửa ..
mazzy

1

Linux sh và các tiện ích tiêu chuẩn, 14

Coreutils gnu gần đây bao gồm một timeouttiện ích rất hữu ích:

 timeout $1 yes

1
Không nơi nào gần CPU 100% cho tôi; Tôi nghĩ điều đó quá nhiều bằng cách phải in Tôi nghĩ rằng ... có lệnh khác không?
Nick T

timeout $1 yes :|sh- 19 có lẽ là tốt nhất bạn có thể làm và sử dụng 100%. Bị cám dỗ để đánh cắp điều này vì câu trả lời của tôi, nhưng tôi sẽ giống như người chơi thể thao :)
Chấn thương kỹ thuật số

1

Matlab - 19

tic;while toc<5;end

Thay thế 5với thời gian thực hiện mong muốn.


1

Đi, 215 212 193 byte (đầy đủ)

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

Tiền thưởng, nhấn mạnh tất cả CPU.

Các Now()trong vòng lặp là có để đá trong lịch trình, Nowlà tên hàm ngắn nhất tôi có thể tìm thấy trong không gian tên của tôi

Nếu tôi chạy go fmtkích thước tăng lên tới 286 277 254 byte



1

Hội: 16 byte

_start:jg _start

Chỉnh sửa: Không nhận thấy yêu cầu lấy đầu vào số, tôi sẽ tuyên bố rằng nó sẽ lấy một trong dòng lệnh, nhưng bỏ qua nó =)


Điều này có một đầu vào số cho số giây thử nghiệm chạy? Có vẻ như tôi chỉ đơn giản là vòng lặp vô tận. Dù đó là gì, hãy nhớ thêm một lời giải thích trong câu trả lời của bạn.
Justin

Ồ ... hoàn toàn đọc qua phần đó của câu hỏi: /
Riot

1

DOS Batch - 5 byte

%0|%0

Batch DOS - 8 byte

%0|%0&%0

Thứ hai là một bản dịch của forkbomb sh khét tiếng.

Ctrl + C phá vỡ chương trình (trừ khi bạn tinh chỉnh cài đặt một chút).


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

Không nén

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

Điều này đòi hỏi một số làm đối số là số giây để chạy. Nó sẽ sử dụng 100% một lõi trong khoảng thời gian đó hoặc cho đến khi crtl + c. Tôi khá chắc chắn rằng điều này nhỏ như C # sẽ đi cùng với tính dài dòng của nó.


1

C # - 178 ký tự

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

Và dễ đọc hơn:

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

Đó là 178 ký tự trong C # và sử dụng tất cả các lõi.

Điểm yếu duy nhất mà nó luôn kết thúc là do giới hạn số nguyên 1 << 30.


1

Java - 88 ký tự

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

Điều này cho phép các vòng lặp 2⁶³-1.

Phiên bản dễ đọc hơn

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

C # - 87 ký tự

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

Phiên bản dễ đọc hơn

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

Chương trình chốt lõi

(Đây là trên hệ thống 4 lõi)


OP đã yêu cầu 100%
Milo

OP cũng chỉ định rằng bạn chỉ cần chốt một lõi. Nó có thể lên tới 25% (là 100% của 1 lõi).
Justin Krejcha

2
Không kén chọn nhưng hình ảnh của bạn hiển thị 24,89% chứ không phải 25%
Milo

Thật. Nó phụ thuộc vào những gì xảy ra trên lõi đó. Nếu không có gì xảy ra trên lõi, nó sẽ sử dụng toàn bộ 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)

Điều này sẽ sử dụng 100% CPU trên máy lõi đơn và với Firefox, nó có thêm phần thưởng mà Firefox tiếp tục sử dụng ngày càng nhiều bộ nhớ; toàn bộ giao diện bị khóa và cách duy nhất để ngăn chặn nó là giết Firefox trong trình quản lý tác vụ.


1

perl, 23 byte

Tôi không thể tìm ra cách dán một điều khiển bằng chữ T ở đây, vì vậy tôi đã gõ $ ^ T thay vào đó, nhưng cả hai đều hoạt động (nghĩa đen là 1 char ngắn hơn ở 23 byte):

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

$ ^ T chỉ là thời gian trình thông dịch bắt đầu, vì vậy về cơ bản bạn có thể đọc đó là thời gian () vì đó là điều đầu tiên chúng tôi tính toán.


1

Con trăn, 30

Tôi thấy câu đố cũ này rất thú vị, tôi hy vọng sẽ ổn khi đăng câu trả lời cho một câu hỏi cũ. Tôi không thể để câu trả lời C đánh bại Python. ;)

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

Điều này cần điều chỉnh cho các CPU khác nhau, nhưng tôi không nghĩ rằng việc vi phạm OP ... sum(range(2**27))chốt một trong số các lõi i7 2,8 GHz của tôi trong khoảng một giây. :)


1
Chào mừng đến với PPCG! Đăng câu trả lời cho các câu hỏi cũ là hoàn toàn chấp nhận được ở đây, tuy nhiên theo như tôi thấy câu trả lời này không đầy đủ yêu cầu must produce 100% CPU load until aborted.
Laikoni

Cảm ơn! :) Trên máy của tôi, mã này tạo ra tải 100% cho một lõi và tôi có thể hủy bỏ nó như bất kỳ tập lệnh nào khác bằng cách nhấn Ctrl-C hoặc tắt tiến trình cha mẹ (ví dụ: bằng cách đóng cửa sổ đầu cuối) hoặc v.v. yêu cầu 2 : must take a numeric input, representing the number seconds the stress-test should run. Vì vậy, mã cần phải lấy đầu vào của người dùng bằng cách nào đó và tự giới hạn cho phù hợp, cũng như chỉ cần chốt CPU. Đây là phần tôi thấy thú vị nhất về câu đố ...
James

Bạn nói đúng, cảm ơn đã làm rõ.
Laikoni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.