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 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 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
Rovnako ako test č.3 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.
_____________________________________________________
No a už musí nasledovať porovnávacia tabuľka časov vykonania jednotlivých testov (časy sú v sec.):
(v pôvodnom zdroji niektoré údaje neboli vyplnené, iné stroje tam neboli uvedené, takže ma prosím nebombardujte upozorneniami na aký ktorý počítač som v tabuľke zabudol uverejniť ...)
| 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.25 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 ZPU |
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 |
| SBC6502 |
65C02 (1.8432MHz) |
OSI v1. rev. 3.2 |
0,72 |
4,80 |
8,48 |
9,18 |
10,00 |
15,00 |
22,00 |
39,20 |
Kompletný, pôvodný originálny článok na túto tému najdete na wikipedii:
Rugg/Feldman benchmarks
_____________________________________________________
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 samotnom článku. (Sám odkedy sa objavil vždy výhradne používam TB.)
____________________________________________________________
Vaše hodnotenie, Rate post: