OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 22:14

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 28 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Benchmarking v BASICu
PříspěvekNapsal: 14.08.2018, 13:34 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
Našel jsem na následujícím odkazu http://www.retroprogramming.com/2010/01/8-bit-home-computer-benchmarks.html zajímavý test pro BASIC, kód je přiložen níž.

Zkusil jsem spustit v BASICu MZ-1Z016 a ten ty výpočty stihl za 180 sekund, což je třetí nejlepší výsledek. Ale BASIC 1-Z013B nefunguje ani zaboha. Buď "Syntax error in 50" nebo overflow na řádku 40 (poté co jsem změnil podmínku za IFem na opačnou a prohodil GOTO 40 s GOTO 20). Rozumíte někdo tomu, proč ten kód v sedmistovkovém BASICu kolabuje ?

Kód:
10 LET W=500: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 AND F(X)*F(X)<=A THEN 40
60 GOTO 20


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 14.08.2018, 14:00 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Pro spusteni na MZ-700 je nejlepší pouzit QD Basic MZ-5Z008. Ten rozumi téměř cele syntaxi jako BASIC pro MZ-800. 1Z-013B je vice omezeny, jak je možno videt v uzivatelskem manualu, nezna napr. operator AND.


V MZ-5Z008 (na MZ-800 emulatoru) mi to běželo asi 182 sekund.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 14.08.2018, 21:14 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 91
Has thanked: 7 times
Been thanked: 18 times
lukz píše:
1Z-013B je vice omezeny, jak je možno videt v uzivatelskem manualu, nezna napr. operator AND.


Aha, tak to je ono, proč to nešlo přeložit. * jako AND nicméně funguje. Proč mi to dávalo chybu na řádku 40, to netuším. Ten 1Z013B je trošku pomalejší, ale jen o 2 sekundy snad.

Ještě jsem zkusil
Kód:
40 LET S=A MOD F(X):IF S=0 THEN 30
ale překvapilo mne, že čas běhu vzrostl o snad 20 sekund.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 16.08.2018, 14:28 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
Nevěděli byste o nějakém podobném benchmarku v assembleru Z80 ?

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 16.08.2018, 17:08 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Různé BASIC implementace se dají porovnávat benchmarkem, protože všechny dokáží provést stejný program (když se omezíme na velice základní konstrukce), i když jsou příkazy uvnitř implementované jinak. Ale jak by to mělo vypadat s benchmarkem asembleru? Všechny asemblery Z80 přeci vygenerují ten stejný strojový kód.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 16.08.2018, 20:57 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Benchmark v assembleru. To je otázka. Záleží, ako sa to naprogramuje, či sa bude volať kalkulátor, alebo použijem logické funkcie atď atď. Stačí si len porovnať ako dlho trvá vykreslenie kružnice rôznym programom. Ono nezáleží ČO sa počíta, ale AKO sa to počíta.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 17.08.2018, 08:49 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
lukz píše:
Všechny asemblery Z80 přeci vygenerují ten stejný strojový kód.

Ano, ale o to mi právě jde. Když se vykonává čistě strojový kód, bez volání knihovních funkcí atd., výsledky ukazují na skutečný výpočetní výkon procesoru v dané platformě a budou se pro různé platformy lišit, protože budou ovlivněny těmito faktory:

1) jak hodně je CPU zdržováno jinými obvody, především videočipem (ULA atd.)
2) jaká je pracovní frekvence CPU
3) u klonů a pokračovatelů původní Z80 počet taktů na instrukci, pokud se liší od originálu

Takže benchmark, který by nevolal žádný jiný kód (knihovny, kalkulátor atp.) a pokud možno (ideálně) využíval různé instrukce v takovém poměru, v jakém jsou využívány v běžných programech, by určitě dal zajímavé výsledky...

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 17.08.2018, 09:16 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 06.10.2015, 17:37
Příspěvky: 1554
Bydliště: Praha východ
Has thanked: 11 times
Been thanked: 144 times
O tom jsem tu včera psal, ale místní cenzor mi to smáznul. Takže jsem to rozvedl zde
http://www.oldcomp.cz/viewtopic.php?f=70&t=1634&p=81371#p81371
Jde o to, že benchmark má smysl výhradně v assembleru. Určitě ne v Basicu. A k tomu, aby výsledky měly smysl, tedy byly porovnatelné, je potřeba znát přesně, jak benchmark funguje. Jinak se dostanete do situace jako Novinky ve zprávě o tom kolik který stát vydává na dopravní infrakturu
https://www.novinky.cz/zahranicni/evropa/480724-v-italii-spadlo-vice-mostu-za-krize-brutalne-seskrtali-vydaje-na-dopravni-infrastrukturu.html. Což je sice hezké srovnání, ale zapomenulo se na to, že každý stát je jinak velký.
Zpět k benchmarkům. Ty "odněkud" stažené benchmarky, o kterých se neví jak fungují, jsou dobré leda tak na předvádění počítačů. Číselný výsledek je o ničem. Je to stejné, jako s vahou, o které nevíte v jakých jednotkách váží, zda je kalibrovaná nebo není kalibrovaná ...
Benchmark je také takový "měřící" nástroj. Byť ne hardwarový, ale softwarový a proto by mělo být jasné jak funguje a jaké zanáší chyby (tj. to co tu zmínil Jiira přede mnou), tedy čím je benchmark zdržován.

_________________
Hyperinzerce - historické počítače

ComputerAsylum WEB: http://www.computerasylum.co.uk
Twitter: https://twitter.com/COMPUTERASYLUM
Zprávy: https://www.euronews.com/ https://www.aljazeera.com/
Obrázek


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 17.08.2018, 10:44 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
Benchmark v BASICu má taky smysl - jako benchmark toho BASICu (např. když je více BASICů pro stejnou platformu a my je chceme nějak porovnat).

Proto bych basicový benchmark nezatracoval, ale prostě je napřed nutno si ujasnit, co vlastně chceme benchmarkovat. 8-) Dokážu si představit tato využití benchmarku v konkrétním programovacím jazyce (BASIC, C, cokolivjiného...):

1) pro stejnou platformu existuje více interpreterů či překladačů daného jazyka, které chceme porovnat mezi sebou
2) stejný interpreter daného jazyka existuje pro více platforem, porovnáváme z pohledu platformy
3) v případě BASICu můžeme chtít porovnat výkon nativních BASICů (dodávaných s dotyčnou platformou) z pohledu jednotlivých platforem, tedy zjistit, která kombinace HW+BASIC je nejvýkonnější.

Pokud budu chtít opravdu jen změřit výkon CPU (což je můj případ), potřebuju jeden konkrétní stroják spustitelný na všech zkoumaných platformách (zde stroje se Z80) a pak je myslím vhodnější assembler, protože nás odstíní od vlivu různých implementací BASICu apod.

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 19.08.2018, 10:53 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
U méněbitů byl BASIC obvykle neoddělitelná součást počítače, takže se tím testuje nejen samotný hardware, ale stroj jako celek: http://blog.i-logout.cz/retrobenchmarking.php

Program v assembleru má pak smysl jenom na platformách se stejným procesorem, tam bude problém porovnat už jenom 6502 a Z80, a zkoušet totéž s 8080 proti ARMu je prostě nemožné.

Navíc je BASIC hardwarově nezávislý virtuální stroj, takže jednodušší programy jsou z velké části přenositelné. Jinak by se mohly porovnávat leda tak vývojové diagramy, nebo teď módnější kopenogramy.

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 19.08.2018, 11:44 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
computerasylum píše:
Jde o to, že benchmark má smysl výhradně v assembleru. Určitě ne v Basicu.
Rozhodne nesuhlasim ! Benchmark basicu vyznam ma, a velky, a aj sam castokrat rozne bencharky pouzivam, napriklad naposledy ked som testoval ako rychlo bezia spektracke basicove programy na ZX romke preportovanej na PMD85.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 19.08.2018, 18:21 
Offline
Kecálek

Registrován: 28.10.2016, 21:03
Příspěvky: 122
Has thanked: 13 times
Been thanked: 50 times
Tak zkusme udělat nějaký Z80 benchmark. Je zde volnost v tom, jak rozhodnout, co je typicky používaný
program. Může to být třeba nějaká hra, která zobrazuje grafické ikony (bitmapy) velikosti 32x32
pixelů. Budeme předpokládat, že kopírování těch bitmap zabere většinu času, a že tedy benchmark bude
napodobovat jen to, a ne nějakou herní logiku. Ještě předpokládáme, že 8 pixelů je uloženo v jednom
byte, že x pozice na obrazovce bude vždy násobek osmi, a že řádka obrazovky má 320 pixelů. Také
předpokládáme, že v grafické paměti jsou pixely uloženy za sebou, odshora dolů, zleva doprava, jako
jedna bitová rovina (kopírování barevného obrázku je potom jako kopírování několika černobílých po
sobě). Všechny tyto předpoklady platí pro Sharp MZ-800.

Funkcionalita rutiny je jako memcpy (kopírování paměti), ale s tím rozdílem, že kopírujeme jeden
souvislý blok do několika nesouvislých.

Program uložíme od adresy 2000h, data bitmapy simulujeme na adrese 2080h, a VRAM je simulovaná na
adrese 2100h. Nezapisujeme tedy skutečně do VRAM, jen do RAM, díky tomu ten benchmark testuje rychlost
samotného CPU, bez ohledu na rychlost VRAM.

Pro spouštění na jiné platformě bude možná potřeba změnit všechny tři adresy, tak aby všechny tři
ležely v oblasti RAM.

Rutina potřebuje celkem asi 183 600 000 cyklů procesoru. To odpovídá časům:
45.9 sec @ 4 Mhz
51.7 sec @ 3.55 Mhz (Sharp MZ-800)

Pro Sharp MZ platí, že ho nic nebrzdí, čas běhu se tedy dá přímo odvodit od kmitočtu hodin procesoru.

Kód v asembleru:
Kód:
; Z80 graphics benchmark
; version 1
; Simulates copying of 32x32 px bitmap from memory to vram
; Repeated 65536 times
; Expected time is 45.9 sec for a Z80 @ 4 MHz

; Change starting address so that it points to a RAM area on your platform

.org 2000h

bitmap .equ 2080h
vram .equ 2100h

  di
  ld bc,0
benchloop:
  push bc

  ld (restore+1),sp
  ld sp,bitmap
  ld hl,vram
  ld bc,37
  ld a,16

copyrow:
  pop de
  ld (hl),e
  inc hl
  ld (hl),d
  inc hl
  pop de
  ld (hl),e
  inc hl
  ld (hl),d
  add hl,bc

  pop de
  ld (hl),e
  inc hl
  ld (hl),d
  inc hl
  pop de
  ld (hl),e
  inc hl
  ld (hl),d
  add hl,bc

  dec a
  jp nz,copyrow

restore:
  ld sp,0

  pop bc
  dec bc
  ld a,b
  or c
  jr nz,benchloop

  ei
  ret

Hex kódy po přeložení (pro naťukání pomocí monitoru):
Kód:
F3 01 00 00 C5 ED 73 2D 20 31 80 20 21 00 21 01
25 00 3E 10 D1 73 23 72 23 D1 73 23 72 09 D1 73
23 72 23 D1 73 23 72 09 3D C2 14 20 31 00 00 C1
0B 78 B1 20 CF FB C9


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 20.08.2018, 09:56 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
lukz píše:
Tak zkusme udělat nějaký Z80 benchmark.

Pár dní jsem sem nenahlédl, protože se nikdo neozýval, tak jsem to našel až teď - díky! Při nejbližší příležitosti vyzkouším! :thumbup:

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 05.09.2018, 10:53 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2773
Has thanked: 224 times
Been thanked: 601 times
Trochu jsem zabíjel čas během marodění, tak jsem si nostalgicky hrál s problémem dam na šachovnici. Ono by se to jako benchmark dalo použít také, Didaktik Gama mi 8 dam přežvýkal za 31 minutu, od odentrování osmičky do pípnutí:
Kód:
10 REM N dam na sachovnici
20 INPUT "Pocet dam: ",n:LET d=0:LET k=0:DIM p(n)
100 LET d=d+1:LET p(d)=1
110 FOR i=d-1 TO 1 STEP -1
120     IF p(i)=p(d) OR p(i)+i=p(d)+d OR p(i)-i=p(d)-d THEN GOTO 220
130     NEXT i
140 IF d<n THEN GOTO 100
199 POKE 23692,-1
200 FOR i=1 TO n:PRINT TAB(p(i));"O":NEXT i
210 LET k=k+1:PRINT "kombinace:";k
220 LET p(d)=p(d)+1:IF p(d)<=n THEN GOTO 110
230 LET d=d-1:IF d>0 THEN GOTO 220
300 BEEP .2,2

Řádek 199 způsobí automatické scrollování, mohlo by tam být také PRINT AT 0,0;, ale s tím by program měl být rychlejší, protože se nemusí scrollovat celá obrazovka!
Jinak by v tom nemělo být nic speciálního, takže by to jiné dialekty mohly zbaštit bez úprav, nezkusíte otestovat svoje favority? :speccy:

Zkoušel jsem to i v DOSBoxu, taková středně rychlá 486ka s reálnými proměnnými:
GWBasic: 27 sekund
QBasic: 30 sekund

A s celočíselnými (DEFINT A-Z):
GWBasic: 24 sekundy
QBasic 4 sekundy!

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Benchmarking v BASICu
PříspěvekNapsal: 05.09.2018, 13:08 
Offline
Radil
Uživatelský avatar

Registrován: 12.05.2013, 20:32
Příspěvky: 457
Bydliště: Kladno
Has thanked: 46 times
Been thanked: 118 times
lukz píše:
Rutina potřebuje celkem asi 183 600 000 cyklů procesoru. To odpovídá časům:
45.9 sec @ 4 Mhz
51.7 sec @ 3.55 Mhz (Sharp MZ-800)

... se mi to zdálo nějaký pomalý... trochu jsem ti to zoptimalizoval, bez použití SP registru a dělá to nyní za 106 5xx xxx taktů, na 3,54MHz za 30 sekund... ;)

Kód:
   org   32768

bitmap   equ   50000
vram      equ   51000   

   di
   ld   bc,0

benchloop:   exx

   ld   hl,bitmap
   ld   de,vram
   ld   b,0
   ld   a,16

copyrow:   ld   c,40
   ldi
   ldi
   ldi
   ldi
   add   hl,bc

   dec   a
   jp   nz,copyrow

   exx
   dec   bc
   ld   a,b
   or   c
   jp   nz,benchloop

   ei
   ret

_________________
>>eLeMeNt, MB03+, Amiga 1200, ZX Spectrum 128 +2A, ZX Spectrum+, Didaktik Gama, LnxSpectrum, LnxTracker, LnxAmigaImageConvertor, https://www.ilnx.cz <<


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 28 ]  Přejít na stránku 1, 2  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz