Nastartoval jsem emulátor ZX Spectra, program přepsal, změřil čas a výsledek společně s výzvou pro ostatní hodil na Technomorouse. Během osmačtyřiceti hodin se díky ctěnému čtenářstvu podařilo nashromáždit pětadvacet hodnot, po dalších třech dnech je tu celkem více než pět desítek výsledků, v tomto článku vám je přináším.
Měřilo se tímto kódem, který byl v několika případech upraven dle potřeb konkrétní platformy:
10 LET W=250: DIM F(W):LET P=1:LET A=3
20 LET F(P)=A:LET P=P+1:IF P>W THEN STOP
30 LET A=A+2:LET X=1
40 LET S=A/F(X):IF S=INT(S) THEN 30
50 LET X=X+1:IF X>=P THEN 60
51 IF F(X)*F(X)<=A THEN 40
60 GOTO 20
A zde jsou již výsledky, z nichž je patrné, že spíš než o ukazatel hrubého výkonu daného procesoru se jedná o ukazatel rychlosti konkrétního BASIC interpretu či kompilátoru:Počítač | Čas (s) | Poznámka |
---|---|---|
Acorn Archimedes A4000 (float proměnné) | 3.24 | |
Acorn Archimedes A4000 (integer proměnné) | 2.91 | |
Amstrad CPC464 | 50 | |
Amstrad CPC6128 | 46.93 | |
Amstrad 6128plus | 46 | |
Amstrad NC100 | 47 | |
Apple IIe (Applesoft BASIC) | 74 | |
Atari 130XE (Altirra Basic, FAST) | 50.76 | emulátor |
Atari 130XE (Altirra Basic, SLOW) | 69.08 | emulátor |
Atari 130XE (Atari Basic rev. C, FAST) | 81.58 | emulátor |
Atari 130XE (Atari Basic rev. C, SLOW) | 111.02 | emulátor |
Atari 130XE (Basic XE, FAST) | 53.54 | emulátor |
Atari 130XE (Basic XE, SLOW) | 73 | emulátor |
Atari 130XE (Basic XL, FAST) | 51.54 | emulátor |
Atari 130XE (Basic XL, SLOW) | 70.18 | emulátor |
Atari 130XE (Basic++ 1.02, FAST) | 77.14 | emulátor |
Atari 130XE (Basic++ 1.02, SLOW) | 104.98 | emulátor |
Atari 130XE (Microsoft Basic 1.0, FAST) | 58 | emulátor |
Atari 130XE (Microsoft Basic 1.0, SLOW) | 79 | emulátor |
Atari 130XE (OSS Basic A+ v3.04, FAST) | 74.64 | emulátor |
Atari 130XE (OSS Basic A+ v3.04, SLOW) | 101.58 | emulátor |
Atari 130XE (Turbo Basic XL, FAST) | 32.16 | emulátor |
Atari 130XE (Turbo Basic XL, SLOW) | 43.78 | emulátor |
Atari 800XL (Atari Basic) | 112 | emulátor |
Atari 800XL (Turbo BASIC 1.5) | 45 | emulátor |
Atari Portfolio (Power BASIC) | 53 | |
Atari STE (Enhanced Basic 68k) | 20.2 | |
Atari STE (GFA Basic) | 3.6 | |
Atari STE (Omikron Basic) | 4.5 | |
Atari STE (ST BASIC) | 29.5 | |
BBC Master (float proměnné) | 27 | |
BBC Master (integer proměnné) | 22 | |
Ben NanoNote (Bywater BASIC) | 6.1 | |
Cambridge Z88 | 69.5 | |
Casio PB-1000 | 292 | |
Commodore 64 (FAST) | 82 | emulátor |
Commodore 64 (SLOW) | 86 | |
Commodore 64 (Simon's BASIC) | 99.05 | emulátor |
Commodore 8296 | 86 | |
Commodore Plus/4 (ROM BASIC V3.5) | 92 | |
Commodore VIC-20 (ROM BASIC V2) | 71 | |
Didaktik Kompakt (1993) | 114 | |
DuinoMite-Mini (MM BASIC 2.7) | 2 | |
Elektronika BK0010-1 (Vilnius BASIC) | 408 | |
Elektronika MK-90 | 492 | |
eZ80 (18.432MHz, Microsoft Basic 5.21) | 6.5 | |
HP 200LX (GW BASIC) | 25 | |
Grundy NewBrain | 100.3 | |
IBM PS/2 P70 (QuickBASIC, float proměnné) | 0.6768 | |
IBM PS/2 P70 (QuickBASIC, integer proměnné) | 0.4656 | |
iPad 3,1 (iOS 8, Hand BASIC) | 0.5 | |
NEC PC8201 | 85 | |
Palm Centro (SmallBASIC) | 5 | |
Palm Treo 650 (SmallBASIC) | 4.6 | |
Palm Tungsten T5 (SmallBASIC) | 3.7 | |
PC-XT (IBM PC BASIC 1.10, 4.77MHz) | 61 | |
PC-XT (IBM PC BASIC 1.10, 10MHz) | 29 | |
Philips VG8235/20 (MSX BASIC 2.1) | 98 | |
Psion MC600 (GW-BASIC, 4.77MHz) | 38 | |
Replica 1 (Applesoft Lite) | 76.2 | |
Replica 1 (Enhanced BASIC 1.10) | 65.5 | |
SAM Coupé | 8 | |
SAPI-1 ZPS-2 (BASIC EXP V5.0/G, konec) | 223 | |
SAPI-1 ZPS-2 (BASIC EXP V5.0/G, začátek) | 100 | |
SBC6502 (1.8432MHz, OSI Basic 1.0 rev 3.2) | 36 | |
SGI O2, Bywater BASIC | 12 | |
Sharp MZ-821 | 63 | |
Sharp MZ-821 (BASIC 1Z-016A V1.0A) | 62 | |
Sharp MZ-821 (BASIC MZ-5Z009 V1.0B) | 63 | |
Sharp MZ-821 (F-BASIC V.700) | 60 | |
Sharp MZ-821 (GI-BASIC V1.3) | 55 | |
Sharp MZ-821 (HU-BASIC) | 92 | |
Sharp MZ-821 (MZ-800 Disk-Basic V1.5A) | 63 | |
Sharp MZ-821 (S-BASIC 1Z-013B V1.0A) | 65 | |
Sharp MZ-821 (S-BASIC-COMPILER) | 19 | |
Sharp PC-1248 | 249 | |
Sharp PC-1480U | 111 | |
Sharp Zaurus SC-C760 (Bywater BASIC) | 8.5 | |
Sinclair QL (Minerva ROM 1.98) | 46 | |
Sinclair QL+SuperGoldCard (Minerva ROM 1.98) | 6 | |
Sinclair QL+SuperGoldCard (SMSQ/E 2.58) | 2 | |
Sinclair ZX80 (ZX81 ROM) | 95 | |
Sinclair ZX81 (FAST) | 98 | |
Sinclair ZX81 (SLOW) | 394 | |
Sinclair ZX Spectrum (BETA BASIC 3.0) | 142 | |
Sinclair ZX Spectrum (ROM BASIC) | 113 | emulátor |
Sinclair ZX Spectrum (ToBoS Fp V2.0) | 10.5 | emulátor |
Tesla Ondra SPO-186 | 514 | emulátor |
Tesla Ondra SPO-186 (jiný BASIC, FAST) | 140 | |
Tesla Ondra SPO-186 (jiný BASIC, SLOW) | 890 | |
Tesla PMD 85-1 | 113 | emulátor |
Tesla PMD 85-2 | 111 | emulátor |
Tesla PMD 85-2A (BASIC G/V2.A) | 112 | |
Tesla PMD 85-3 | 112 | emulátor |
Texas Instruments TI-83 Plus | 224 | |
Thomson MO5 | 112 | |
TRG Pro (68k@20MHz) | 25 | |
TRS-80 Model 100 | 130 | |
Zeta SBC (Microsoft Basic 5.21) | 27 |
Samozřejmě nesmí chybět graf, tentokrát seřazený hezky podle doby výpočtu, od nejrychlejšího po nejpomalejší:

(FAST / SLOW označuje režim s vypnutým respektive zapnutým zobrazováním u počítačů, kde je možné zobrazení vypnout, více viz diskusi pod článkem)
Není to, pravda, nic moc převratného. Všichni víme, že interpretace je pomalejší než spouštění kompilátu a na příkladu ZX Spectra je to skutečně dobře demonstrováno. Stejně dobře je demonstrováno, jak rychlost ovlivňuje použití správného datového typu (u BBC Master). I přesto si ale myslím, že možnost srovnat si staré počítače podle rychlosti výpočtu je zajímavá.
Kdybyste náhodou změřili čas ještě někde jinde, pošlete prosím výsledek jako komentář buď sem, nebo ještě lépe k mému původnímu článku - dodatečně vaše výsledky do tabulky i grafu přidám. Všem přispěvatelům díky!
Super, diky. Pridal jsem Sharp MZ-800 k puvodnimu clanku. Nechces do te tabulky pridat i ty mereni z tech uplne puvodnich clanku? Je tam toho vic.
Úplně původní články obsahují výsledky pro W=500, takže nejsou s tím, co je v tabulce/grafu porovnatelné. Na Spectru třeba při změně W=250 -> W=500 vzroste čas skoro 3x, takže to nejde ani jednoduše lineárně přepočítat.
Vivat Palm Centro! 🙂
U Sam Coupé mi vyšlo 8s.
Texas Instruments TI-83 Plus – 224s
Oj, to jsem si nevsiml, sorry. Jeste to muzeme vsechno premerit 😉 Sharp to ma pri W=500 za 179s.
Přeměřovat se mi nechce, základ 250 je zvolen kvůli počítači Elektronika MK-90, která větší pole do paměti nenacpe a já zrovna teď dokončil měření Casio PB-1000, kam těch 250 vlezlo taky jen tak tak. I tak už máme teď nejobsáhlejší tabulku výsledků 🙂
Jestli chceš doplnit, tak na Acorn Archimedes A4000 to běželo 3,24 s. Když se předělaly proměnné na integery, tak 2,91s a když se ještě přepsalo dělení na MOD, tak to bylo 2,29s.
Commodore 64: 86 vteřin. Bohužel pouze pod emulátorem, protože se momentálně stěhuju.
Sharp PC-1248 za 249s.
Sorry, že to nepíšu pod původní článek, ale nechci se registrovat 🙂
ZX81 nevidím takže:
SLOW – 394s
FAST – 98s
Samozřejmě s RAMPACKem, do 1K se to nevejde 🙂
Ještě jeden (možná překvapivě) celkem šnek
XT klon s NEC V20 a IBM Personal Computer Basic C1.10 v ROMce
Na 4,77 MHz – 61s
Na 10 MHz – 29s
Na clanek jsem narazil az vcera v noci, takze vysledky posilam taky trosku se spozdenim. Tady jsou casy z Atari STE z ruznych interpreteru Basicu:
ST BASIC – 29.5 s
Enhanced Basic 68k (Lee Davison) – 20.2 s
GFA Basic – 3.6 s
Omikron Basic – 4.5 s
[12] Ono to zas takové překvapení není – už v roce 1984 v časopise Practical Computing vyšel článek s podobnými benchmarky, ze kterého vyplývalo, že BBC Micro je rychlejší než IBM PC :o)
Volume 7, Issue 1, 1984
Všimněte si, jak se Basicy rozvrstvily i podle původce – je tu skupina Microsoft Basicu (Ondra, PMD, Thomson, Commodore, Apple ][) a Basiců optimalizovaných na velikost (Spectrum, Atari, QL s Minerva ROM) proti těm optimalizovaným na rychlost – rodina BBC Basicu (BBC, Archimedes, Amstrad NC-100), Atari Turbo Basic, SBasic v SMSQ/E pro QL, zejména mile mne překvapil Wrightův Basic pro Sam Coupé s jeho 6 MHz.
Tak jsem taky premeril jeste dalsi Sharp BASICy, ale vychazeji asi vsechny z tehoz, protoze mereni se stale pohybuje mezi 62-63 s. Jedine co se o neco lisi je S-BASIC z MZ-700, ktery je lehunko pomalejsi 65s, zato v kompilatorove verzi ocekaven rychleji 19s a pak HU-BASIC, coz nevim co je, ale je o dost pomalejsi 92s.
BASIC 1Z-016A V1.0A … 62 s
S-BASIC 1Z-013B V1.0A … 65 s
S-BASIC-COMPILER (for MZ-700 KNACKSOFT) … 19 s
BASIC MZ-5Z009 V1.0B … 63 s
MZ-800 Disk-Basic V1.5A … 63 s
F-BASIC V.700 … 60 s
GI-BASIC V1.3 … 55 s
HU-BASIC … 92 s
MSX BASIC 2.1 na Philips VG8235/20 98s.
SBC6502 procesor 6502, takt 1.8432MHz, čas= 36 sekúnd
Použitý OSI Basic verzia 1.0 rev.3.2
program nebol upravovaný, použitý originál program
keď som vyhodil z riadkov LET tak sa to zrýchlilo o 2 sekundy, t.j. benchmark zbehol za 34 sekúnd
Ako vyzerá tento počítač:
http://blog.3b2.sk/igi/post/SBC6502-1-7-chip-computer-32kB-RAM.aspx
P.S.: na Atari (8bit)sa dá vypnúť zobrazovanie, potom je benchmark ešte o cca 30% rýchlejší, pripomínam to preto že na ZX-ku sa to tiež spomína (Fast)
Trochu jsem zkoušel optimalizovat ten program pro Turbo Basic na Atari a nakonec jsem se dostal na čas 40,74. S vypnutým zobrazením až na 29.94. Testováno v emulátoru, přikládám výpis:
10 W=250:DIM F(W):P=%1:A=%3
11 TIME$= „000000“
20 # A:F(P)=A:P=P+%1:IF P>W THEN ? TIME/50:END
30 # B:A=A+%2:X=%1
40 # C:G=F(X):S=A/G:IF S=INT(S) THEN GO# B
50 X=X+%1:IF X>=P THEN GO# D
51 IF G*G<=A THEN GO# C
60 # D:GO# A
Páni, nedalo mi, skúsil som W=4000
Spapá to vtedy celých 16kB RAM, bežalo to 33min.45sec.
Sila …
Nájde sa niekto kto to skúsi na svojom stroji ?
Jen pro zajímavost a mimo soutěž, protože nejde o BASIC, jsem testovací program přepsal do programovatelné kalkulačky HP 35s a výsledný čas je 492s. V kalkulačce je klon 8bit procesoru MOS 8502.
Ještě mám WP 34s, která by jistě bodovala lépe, ale bohužel nemá 250 registrů, takže je mimo hru. Dál mám HP 40gs. Tam je také nějaký vyšší programovací jazyk podobný BASICu, ale ten neovládám. Možná je to důvod si někdy programování vyzkoušet.
trochu s krizkem po funuse
SAPI-1 v sestave ZPS-2 s MONITOR/MIKOS V5.0 a BASIC – EXP V5.0/G.
100s pro chod programu na zacatku (radky 1 az 7)
223s pro chod na konci programu (radky 9010 az 9070 tj. pred programem je 180 radku)
s chybou mereni +-1s
Zajímalo by mě, jak na tom budou basicy kde je LET nepovinný. Tedy jak by ovlivnily výsledky tesy s a bez LET. Rovněž někde je zase nepovinné THEN GOTO, jinde to bez něj nejde.
Commodore VIC-20 (ROM BASIC V2): 71s
Commodore Plus/4 (ROM BASIC V3.5): 92s
Didaktik Kompakt (1993): 114s
Amstrad 6128plus: 46s
Pro zajímavost:
ZX Spectrum 48K (BETA BASIC 3.0): 142s
[22] podle implementace, obvykle (Microsoft Basic, ale i další) Basic s nezapsaným LET bude pomalejší – interpret nejprve porovná text (k nebližšmu nepísmennému znaku) se známými slovy (narazí-li na LET, porovnání skončí a jde se rovnou zpracovávat LET) a teprve, když projde celý slovník a nenarazí na známé slovo, zkusí zapsaný text interpretovat jako parametr příkazu LET.
S THEN GOTO je to složitější a jde to rozdělit do dvou problematik.
Jednak nepovinné THEN (Wang, IF A=1:GOTO 5) a nepovinné GOTO (Microsoft, IF A=1 THEN 5).
První případ bude rychlejší, stačí otestovat konec příkazu ‚:‘ a pokud je, skáče se hned na načtení výsledku podmínky a buď zpracování následujícíh příkazů dokonce řádku, nebo skok na další řádek.
Pokud dvojtečka není, pokračuje se ve vyhodnocování – může následovat třeba AND nebo nějaký jiný operátor, ne jen THEN, a to žere čas.
Nevím o tom, že by nějaká implementace schroupala zápis IF A=1 5 (zkusil jsem v Applesoftu, SYNTAX ERROR).
[25] Schválně jsem to teď zkoušel na C64. Výpočet bez LETů trval půl vteřiny méně (85,66s), než s LETy (86,12s). Je to zanedbatelný rozdíl a není to měřeno úplně přesně, takže LET basic (aspoň u C64) vůbec nezrychluje.
A pro další zajímavost:
Hand Basic (interpret Commodore Basicu V2), iOS 8, iPad 3,1 (Apple A5X): přibližně 0,5s 🙂
[26] Microsoft Basic pro 6502 to má jinak, protože neukládá jako text, ale tokenizuje.
Podívá se, jestli je první znak příkazu 128 a vyšší, tedy token příkazu, když ne, jedná se o vynechaný LET – ten se tedy vyhodnotí jako první a ostatní příkazy se hledají až potom.
Holt výhoda tokenizování, na otestování třeba „THEN“ za „IF“ stačí zhodnotit jediný znak.
[26] Tak jsem se díval na zdrojáky, spletl jsem si Basicy – s tím LET, co je pomalejší při vynechání, to nebyl MS Basic (8080 verze taky tokenizuje jako 6502), ale Wang.
Psion S3a, Psion workabout (NEC V30H @ 7.68MHz)
16-bitove promenne: 13sec
float: 18sec
Cambridge Z88 – BBC BASIC (Z80) Version 3.00: 68s (s LETy)
Sharp PC-1480U za 111 s.
Tak to Portfolio jsem zatim jeste nezvlad 🙁
Ale Microsoft Basic 5.21 na Zeta SBC to da za 27 sekund.
A to Portfolio bude taky 😉
Jeste jsem zkusil eZ80 @ 18.432MHz a Microsoft Basic 5.21 s vysledkem cca 6.5sec.
Ked sa tu merali samostatne FAST a SLOW rezimy (vypnute/zapnute zobrazovanie) tak prispejem aj mojim meranim na roznych ZX Spektrach so vsetkymi basicmi zabudovanymi v romkach. Namerane casy su v sekundach.
TypBasicu … Pocitac …. *SLOW* … *FAST*
========= … ======= …. ====== … ======
128 basic … 128/+2 ….. 142.74 … 136.76
+3 basic … +2A/+3 ….. 140.84 … 135.04
48 basic … ZX 48k ….. 111.58 … 109.24
48 basic … 128/+2 ….. 110.44 … 108.10
48 basic … +2A/+3 ….. 110.40 … 108.08
48 basic … Pentagon … 106.90 … 106.90
128 basic … Pentagon … 133.56 … 133.56
U Pentagona nie je ziadny rozdiel medzi slow a fast rezimom pretoze zobrazovanie nijak nespomaluje pracu procesora.
Busy: Co je, preboha, FAST rezim na ZX Spectre?
Presne ako na inych platformach, FAST rezim je ked CPU bezi naplno a nie je nijak spomalovane zobrazovanim. V emulatoroch to mozes dosiahnut vypnutim „contended“ videoram, a na realnej +2A/+3 konfiguraciou all-ram, banky 0,1,2,3 (pre beh basicu treba do banky 0 skopirovat romku).
Busy: Cims to meril, ze to mas na setiny sekundy? Napis postup 🙂
[35][36][37] Jsem rád, že tu to vysvětlení proběhlo, do tabulky z toho vezmu jen +2A/+3, zbytek nelze podle toho co Busy píše dosáhnout na reálné mašině.
Ako sme uz nadhodili debatu na jabber kanali: Ak by sme posunuli na Spectre 48 zaciatok basicu do fast ram mohli by Busyho testy davat zmysel. Sam som nikdy taku potrebu nemal, takze neviem ako s tym rozumne vybabrat pri standardnej romke so Sinclair Basicom.
F6: Pocitac si to zmeral sam. RUN 90 🙂
10 LET W=250: DIM F(W): LET P=1: LET A=3
20 LET F(P)=A: LET P=P+1: IF P>W THEN GO TO 150
30 LET A=A+2: LET X=1
40 LET S=A/F(X): IF S=INT S THEN GO TO 30
50 LET X=X+1: IF X>=P THEN GO TO 70
60 IF F(X)*F(X)<=A THEN GO TO 40
70 GO TO 20
80
90 PAUSE 1
100 POKE 23672,0
110 POKE 23673,0
120 POKE 23674,0
130 GO TO 10
140
150 PAUSE 1
160 LET x=PEEK 23672
170 LET y=PEEK 23673
180 LET z=PEEK 23674
190 LET t=x+256*y+65536*z-1
200 PRINT t/50
Logout: Podla mna FAST ani na ZX 48k nie je az tak nerealny. Napriklad pri rozsireni na 80kB (pre CPM od Lamaca tusim) sa namiesto romky a videoramky da nastrankovat 32kB rychlej ramky.
Busy: A kolko Spektier s lamacovou upravou si uz videl? Ja v svojom zivote ziadne.
mikezt: Ja som jedno Spektrum s Lamacovou upravou mal doma a aktivne ho pouzival. Kym som ho neupravil na 128k.
Zopar som ich uz videl, aj nejake kopiraky som na ne robil. Napriklad Saposoft mal jedno. Ale inak mas pravdu, vela ich po svete nebehalo.
Atari Portfolio + Power BASIC: 53s
Konečně jsem se k tomu dostal:
PMD 85-2A (BASIC G/V2.A) reálný stroj 112s.
Chtěl jsem vylepšit výsledek Ondry.
140 sekund.
Použil jsem jiný Basic a FAST režim.
Ale ve SLOW je to 890 sekund.
Ještě jeden pokus. Konečně jsem se dokopal rozebrat ZX80 a dát do něj romku zx81. Čekal bych stejný výsledek jako u ZX81 v režimu FAST, ale ZX80 je dokonce o trochu rychlejší – 95s
A este pre uplnost C64 (zmerane vo WinVice):
Rezim SLOW … 86 s
Rezim FAST … 82 s
Podobne ako u ZX Spektra, narast rychlosti vo FAST je len velmi mierny. Na rozdiel od ZX, tu to nie je dane tym ze interpreter bezi v rychlej romke (na C64 je zobrazovanim spomalena cela pamet – rom aj ram), ale je to vdaka tomu, ze CPU sam o sebe bezi velmi pomaly (cca 0.9 MHz) a vdaka tomu videoprocesor stiha (na cca 2 MHz) vycitavat obrazove data bez toho aby bolo CPU nejak citelne brzdene.
Ovela zaujimavejsie bolo porovnanie rychlosti FAST/SLOW u Atari. Tam CPU bezi na vyssej frekvencii a spomalenie od videoprocesora bude vyraznejsie.
SAPI-1 „ZPS-4“ (JPR-1Z/2MHz/, RAM-1Z, DSM-1, ZRMD-1, AND-1Z, FDC-1) CP/M 2.2
MBASIC V5.21-G1 105s
s chybou mereni +-1s
Dostal se mi do tlap ještě tenhle exot
Olivetti Prodest PC128
MS SIMIV Basic 128 – 95s
Pridam par mereni:
ZX Spectrum 48k, HiSoft basic 1.1, integer … 20.5 sec (emul)
Psion netBook, OPL, integer … 0.125 sec
Psion netBook, OPL, float … 0.203125 sec
Psion Organizer II XP, OPL, integer… 113 sec
Psion 5mx, OPL, float… 2.23 sec
Psion 5mx, OPL, integer… 1.375 sec
HP 40gs, HP-Basic… 76sec (s pouzitim funkce nextprime)
Tady jsem narazil na zajímavé benchmarky, byť se jedná o nějakou úlohu N-Queen.
http://www.hpmuseum.org/cgi-sys/cgiwrap/hpmuseum/articles.cgi?read=700
ZX basic na PMD85-2A (emulator): 509.28 sekund
Sharp PC-1600
s LET – 223s
bez LET – 190s
THEN/THEN GOTO +5s
Sice jsem na toto téma narazil poněkud pozdě, chybí tam přece IQ151 ! Zkusil jsem to na skutečném stroji s basic-G. Vyšlo mi 107 sekund, což je celkem průměr.