A zase som u benchmarkov, neviem, neviem, nejako sa mi stále pletú pod nohami .... Napriek tomu že som už nejaké benchmarky uverejnil tak sem pridám ďalšie, nakoniec väčšina z nás má rada predstavu o tom ako naše staré mašinky bežia - teda ako sú rýchle, alebo pomalé - podľa toho ako to vnímame.
Poďme na vec:
Uverejnené benchmarkové testy a aj tabuľka rýchlosti vykonávania testov sú prevzaté z Wikipedie, tabuľka z mojej strany bola iba doplnená o údaje ktoré som nameral na SBC6502 (úplne na spodku tabuľky). Príjemné je zistenie, že si SBC6502 v uvedenej "konkurencii" vedie naozaj slušne, čo ma teší. Ak je osadený v SBC6502 procesor 14809 od Atari (čo je vlastne procesor 6502C s pridaným pinom HALT) tak časy sú úplne identické - čiže nevidel som dôvod písať rovnaké časy do ďalšieho riadku tabuľky. Jediný rozdiel je v spotrebe týchto procesorov, kde je výrazne nižší príkon ak je použitý procesor 65C02, proste staršia NMOS technológia proti novšej CMOS nemá v odbere šancu. Možno sa ešte oplatí pripomenúť že SBC6502 používa 8kByte verziu jazyku Microsoft Basic z roku 1977.
Pretože niektoré časy sú skutočne krátke tak vtedy najlepším riešením merania času je zväčšiť meraciu slučku na 10-násobok, potom po stopnutí sa čas jednoducho vydelí :10 a ste dostatočne presní v určení doby trvania jednotlivého testu, tu sa to hlavne týkalo konkrétne testu č.1.
Testy číslo 1 až 7 vznikli v roku 1977, test číslo 8 pochádza z neskoršieho obdobia.
_____________________________________________________
Benchmark 1:
300 PRINT "START"
400 FOR K=1 TO 1000
500 NEXT K
700 PRINT "END"
800 END
Slučky FOR-NEXT sú jednou z najzákladnejších konštrukcií v jazyku BASIC a ak je výkon týchto slučiek pomalý, je tiež veľmi pravdepodobné, že akýkoľvek program bežiaci v tomto BASICu bude tiež pomalý. Známym príkladom je Atari Basic , ktorý mal v sebe niekoľko problémov, ktoré výrazne spomaľovali výkonnosť slučiek FOR-NEXT - a mimochodom základné programy v Atari Basicu sú výrazne pomalé.
_____________________________________________________
Benchmark 2:
300 PRINT "START"
400 K=0
500 K=K+1
600 IF K<1000 THEN 500
700 PRINT "END"
800 END
Tento test vykonáva rovnaké operácie ako test č.1, ale používa sa explicitný test a skok namiesto použitia vstavaného FOR-NEXT. Všeobecne platí že tento program beží podstatne pomalšie ako test č.1, pretože väčšina Basic-ov tlačí adresu FOR cez zásobník, potom je NEXT relatívne rýchly, zatiaľ čo použitie GOTO vyžaduje aby interpreter prezeral program pre zodpovedajúce číslo riadku (tu je to 500). Niektoré verzie programu Basic optimalizovali GOTO pomocou explicitných štítkov (labels) alebo posúvaním cieľov GOTO v zásobníku aby ich vykonávali ako NEXT. Turbo Basic XL urobil oboje a vďaka tomu bežal omnoho rýchlejšie ako akýkoľvek podobný BASIC.
_____________________________________________________
Benchmark 3:
300 PRINT "START"
400 K=0
500 K=K+1
510 LET A=K/K*K+K-K
600 IF K<1000 THEN 500
700 PRINT "END"
800 END
Test č. 3 je rozšírením testu č.2, tentoraz pridaním základnej matematiky a variabilného prístupu. Porovnaním času na spustenie testov č.2 a č.3 je možné získať predstavu o matematickej knižnici daného BASIC-u.
_____________________________________________________
Benchmark 4:
300 PRINT "START"
400 K=0
500 K=K+1
510 LET A=K/2*3+4-5
600 IF K<1000 THEN 500
700 PRINT "END"
800 END
Rovnaké ako č.3 test č.4 okrem toho, že konštanta K je nahradená číselnými premennými. To si vyžaduje, aby interpreter konvertoval hodnoty z ich textovej reprezentácie do svojho interného úložného formátu, čo si vyžaduje určitý čas. Určitú predstavu o výkonnosti tejto funkcie konverzie možno určiť porovnaním tohoto času s benchmarkom č.3.
_____________________________________________________
Benchmark 5:
300 PRINT "START"
400 K=0
500 K=K+1
510 LET A=K/2*3+4-5
520 GOSUB 820
600 IF K<1000 THEN 500
700 PRINT "END"
800 END
820 RETURN
Test č.5 zavádza volanie podprogramu. Dlhé programy v skorých verziách BASICu by značne využívali podprogramy, a preto bola dôležitá efektivita volacieho mechanizmu. V závislosti od spôsobu, akým systém fungoval, môže návratnosť vyrovnávať umiestnenie volajúceho účastníka spôsobom podobným NEXT, a tak bežať veľmi rýchlo.
_____________________________________________________
Benchmark 6:
300 PRINT "START"
400 K=0
430 DIM M(5)
500 K=K+1
510 LET A=K/2*3+4-5
520 GOSUB 820
530 FOR L=1 TO 5
540 NEXT L
600 IF K<1000 THEN 500
700 PRINT "END"
800 END
820 RETURN
Test č.6 definuje malé pole na začiatku a pridáva ďalšiu slučku FOR-NEXT vnútri hlavnej slučky. To má malý vplyv na kód, ale používa sa na nastavenie základnej línie pre test č.7.
_____________________________________________________
Benchmark 7:
300 PRINT"START"
400 K=0
430 DIM M(5)
500 K=K+1
510 LET A=K/2*3+4-5
520 GOSUB 820
530 FOR L=1 TO 5
535 M(L)=A
540 NEXT L
600 IF K<1000 THEN 500
700 PRINT"END"
800 END
820 RETURN
Tu sa priradí hodnota každému elementu poľa zakaždým, keď sa ide cez slučku. Porovnanie času potrebného na spustenie č.7 až č.6 indikuje účinnosť prístupu poľa.
_____________________________________________________
Benchmark 8:
300 PRINT"S"
400 K=0
500 K=K+1
530 A=K^2
540 B=LOG(K)
550 C=SIN(K)
600 IF K<1000 THEN GOTO 500
700 PRINT"E"
800 END
Test č. 8 bol pridaný od PCW (podrobnejšie popísané v pôvodnom zdroji), vykonáva sa niekoľko transcendentých funkcií, aby sa otestoval ich výkon.
_____________________________________________________
Nasleduje porovnávacia tabuľka časov vykonania jednotlivých testov (časy sú v sec.):
System |
CPU |
Basic |
Test 1 |
Test2 |
Test3 |
Test 4 |
Test 5 |
Test 6 |
Test 7 |
Test 8 |
IBM 5100 |
|
|
4,50 |
21,10 |
57,40 |
54,50 |
59,00 |
88,20 |
174,90 |
201,60 |
BBC Micro |
6502 (2MHz) |
BBC |
0,80 |
3,10 |
8,10 |
8,70 |
9,00 |
13,90 |
21,10 |
49,90 |
Atari 800XL |
6502 (1.79MHz) |
Atari |
2,20 |
7,30 |
19,70 |
24,10 |
26,30 |
40,30 |
60,10 |
424,00 |
Commodore 64 |
6510 (1MHz) |
MS |
1,20 |
9,30 |
17,60 |
19,50 |
21,00 |
29,50 |
47,50 |
119,30 |
Sinclair ZX80 |
Z80 (3.25 MHz) |
Sinclair |
1,50 |
4,70 |
9,20 |
9,00 |
12,70 |
25,90 |
39,20 |
|
Sinclair Spectrum |
Z80 (3.5 MHz) |
Sinclair |
4,40 |
8,20 |
20,00 |
19,20 |
23,10 |
53,40 |
77,60 |
239,10 |
Apple II |
6502 (1MHz) |
Integer |
1,30 |
3,10 |
7,20 |
7,20 |
8,80 |
18,50 |
28,00 |
|
Apple II |
6502 (1MHz) |
Applesoft |
1,30 |
8,50 |
16,00 |
17,80 |
19,10 |
28,60 |
44,80 |
55,50 |
Altair 8800 |
8080 (1MHz) |
Altair 4.0 |
1,90 |
7,50 |
20,60 |
20,90 |
22,10 |
38,80 |
57,00 |
67,80 |
Altair 8800/TDL
|
Z80 (2MHz) |
Zapple |
1,70 |
9,50 |
20,60 |
21,70 |
23,70 |
36,70 |
52,40 |
|
Compucolor 8001 |
8080 (2MHz) |
Compucolor 8k |
2,10 |
13,10 |
27,00 |
29,00 |
31,30 |
47,50 |
67,80 |
|
SWTCP 6800 |
6800 (0.898MHz) |
SWT 8k |
1,40 |
9,00 |
16,80 |
18,10 |
20,00 |
31,00 |
45,20 |
53,70 |
SWTCP 6800 |
6800 (0.898MHz) |
Altair 680 |
14,90 |
24,70 |
96,10 |
105,30 |
109,80 |
174,10 |
204,50 |
|
Altair 680 |
6800 (0.5MHz) |
Altair 680 1.1 |
2,60 |
16,40 |
30,90 |
33,70 |
36,60 |
56,00 |
81,90 |
96,90 |
|
|
|
|
|
|
|
|
|
|
|
Kompletný, pôvodný originálny článok na túto tému najdete na wikipedii:
Rugg/Feldman benchmarks
(v pôvodnom zdroji niektoré údaje neboli vyplnené, iné stroje tam neboli uvedené, takže ma prosím nebombardujte upozorneniami na to aký ktorý počítač som v tabuľke zabudol uverejniť ...)
__________________________________________________________
01.10.2019
Pre SBC6502 som vytvoril extra tabuľku s dosiahnutými výkonmi podľa taktu hodín:
P a r á d a !!!
_____________________________________________________
27.06.2019
Ten doplňujúci údaj od Jirku pre Atari je fakt tragický ..., našťastie je k dispozícii v článku spomenutý Turbo Basic XL, ktorý je skutočne svojím výkonom niekde inde. Pretože nepatrí do základného vybavenia počítača tak údaje o jeho rýchlosti nie sú zaradené v tomto článku. (Sám odkedy sa objavil vždy výhradne používam TB.) Na druhú stranu - sú aj iní výrobcovia počítačov ktorých Basic stojí tak isto za ..., pritom ich procesor je taktovaný na dvojnásobok taktu Atari.
___________________________________________________________
Návrat do všetkých pokračovaní o SBC6502:
http://blog.3b2.sk/igi/post/Directory-SBC6502.aspx
____________________________________________________________
Vaše hodnotenie, Rate post: