Welcome, Guest. Please login or register.


Author Topic: Fraktálok assemblyben (Read 6899 times)

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #45 on: 2018.July.31. 07:59:57 »
EA változtatások 583.5 másodpercről 498.6 másodperce javították a futásidőt 4 MHz-es gépen, de ezen még tovább kellene gyorsítani.

Egyébként arányaiban nem sokkal lassabb, mint az én változatom (310 sec), hiszen te nagyobb felbontást használsz (160x200 a 128x192 helyett), és több iterációt (88 a 64 helyett). Egyébként miért pont 88?
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #46 on: 2018.July.31. 11:58:02 »
majdnem 20 mp-et sikerült még faragni, az általános szorzó rutin helyett négyzetre emelő függvény használatával, ami a szorzó rutin kiherélésével jött létre
így most 4:52 az 5:11 helyett :-)
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #47 on: 2018.July.31. 14:59:18 »
Egyébként miért pont 88?

A paletta mérete miatt, 11 szín 8 árnyalata (ditherelve). Pontosan 88 iterációnál a 12-edik szín jelenik meg, ami fekete.

Kisebb módosításokkal így változott a futásidő:
main: 479.6 s
Iterate: 410.2 s
fpMult: 114.2 s
fpSqr: 202.2 s
PutPixel: 6.4 s
AddQueue: 2.7 s
_divuint + _moduint: 4.4 s

Szerk.: az ri változó törlésével az Iterate még gyorsul 15.2 másodperccel. További minimális gyorsulást eredményez az előjeles 32 bites összehasonlítás előjel nélkülire alakítása.
« Last Edit: 2018.July.31. 15:35:30 by IstvanV »

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #48 on: 2018.July.31. 16:59:52 »
no, ha valakit érdekel, itt a véglegesnek gondolt futtatható fájl is

most kéne bele egy egérkezelés, és lehetne zoom-olgatni :-)
meg lenne egy időmérő a kép aljában (végül is elférne, van 8 pixelsorom még alul)
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #49 on: 2018.August.02. 13:53:14 »
443.9 másodperc, de továbbra is csak C nyelvű az Iterate:
* epmandel.com (2.97 kB - downloaded 35 times.)

* epmandel.c (8.93 kB - downloaded 36 times.)
* loader.s (9.39 kB - downloaded 29 times.)
* ihx2ep.c (3.96 kB - downloaded 32 times.)
* Makefile (0.91 kB - downloaded 32 times.)

* testmult.lua (1.53 kB - downloaded 34 times.)

Újdonság, hogy a 0-9 billentyűkkel más paraméterek választhatók (a 0 az alapértelmezett), de ezek a nagyobb nagyítás miatt lassabbak. Célszerű 250 MHz-es Z80-at beállítani. A Stop billentyűvel megszakítható a rajzolás, Space vagy Escape kilép.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #50 on: 2018.August.02. 16:58:10 »
Még lehetne próbálkozni 16 bites egész aritmetikával (pl. 1 bit előjel + 3 bit egész + 12 bit tört rész), ez ugyan nagyításnál már kevés lehet, és figyelni kell a túlcsordulásra, de az alapértelmezett paramétereknél még ilyen pontosság is elfogadható eredményt adhat.

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #51 on: 2018.August.02. 20:45:59 »
Még lehetne próbálkozni 16 bites egész aritmetikával (pl. 1 bit előjel + 3 bit egész + 12 bit tört rész)
2 bit egész nem lenne elég? ha jól számolom, akkor úgy 3.9999... lenne a legnagyobb ábrázolható szám, de ha r2+i2 >= 4, akkor úgyis a végtelenbe tart, szóval ott elég lenne csak az overflow-t figyelni, nem?
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #52 on: 2018.August.02. 21:07:58 »
2 bit egész nem lenne elég?

Elég lehetne, csak több helyen kell figyelni a túlcsordulásra. De így is gyorsabb lenne a jelenlegi nagyobb pontosságú verziónál.

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #53 on: 2018.August.03. 13:09:05 »
hevenyészett 2.13 bites fixpontos számításom eredménye:

Code: [Select]
static unsigned char Iterate(int x, int y)
{
unsigned char iter;
long r=x;
long i=y;
for(iter=0; iter<MAXITER; ++iter)
{
long r2 = (r*r)/8192, i2 = (i*i)/8192;
if (r2+i2 >= 32768) break;
i = (r*i)/4096 + y;
r = r2-i2 + x;
}
return iter;
}

úgy vettem észre, hogy a jobbra shift az nem aritmetikai shift-et csinál, ezért az osztás
de nem is a hatékonyság volt a lényeg jelenleg, csak kipróbáltam, hogy működik-e egyáltalán :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #54 on: 2018.August.03. 13:25:35 »
úgy vettem észre, hogy a jobbra shift az nem aritmetikai shift-et csinál, ezért az osztás

azért elég okos az SDCC, mert fölismeri, hogy kettő hatványával akarok osztani, szóval megoldja szépen bitforgatással, nem az osztó rutint hívja :-)
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #55 on: 2018.August.03. 14:00:34 »
Valóban jó ötletnek tűnik ez a pontosság, egyelőre 299.8 másodperc lett, de valószínűleg lehetne jobb is:
* epmandel.com (2.93 kB - downloaded 31 times.)

Szerk.: nagyobb nagyításnál (4, 6 és 7) azonban hibásan működik, itt már kevés a felbontás. :oops:
« Last Edit: 2018.August.03. 14:06:30 by IstvanV »

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 67.0.3396.99 Chrome 67.0.3396.99
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #56 on: 2018.August.03. 14:18:38 »
Valóban jó ötletnek tűnik ez a pontosság, egyelőre 299.8 másodperc lett, de valószínűleg lehetne jobb is:
mondjuk már szerintem itt is pontatlan egy kicsit, nem teljesen szimmetrikus a vízszintes tengelyre, bár én nem foglalkozok a kerekítési hibákkal.
*** Speicherplatz zu klein

Offline endi

  • EP addict
  • *
  • Posts: 6710
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 67.0.3396.87 Chrome 67.0.3396.87
    • View Profile
    • Honlapom
Re: Fraktálok assemblyben
« Reply #57 on: 2018.August.03. 14:35:20 »
ez egyébként mennyivel gyorsabb, mint azok, amik annak idején, az EP idejében készültek?
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline Povi

  • EP addict
  • *
  • Posts: 1689
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 68.0.3440.84 Chrome 68.0.3440.84
    • View Profile
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #58 on: 2018.August.03. 15:30:32 »
ez egyébként mennyivel gyorsabb, mint azok, amik annak idején, az EP idejében készültek?

Én csak azt ismerem, ami az Enterpress-ben jelent meg, de működő változatát még nem láttam. Anno megpróbáltam bepötyögni, de olvashatatlan volt.
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4706
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 58.0 Firefox 58.0
    • View Profile
Re: Fraktálok assemblyben
« Reply #59 on: 2018.August.04. 12:08:46 »
A _mullong is elfogyaszt 33.8 másodpercet, valószínűleg itt:
Code: C
  1.   result = Iterate(minr + x * stepr, mini + y * stepi);
Ezt érdemes lenne átalakítani, hogy az assembly fixpontos szorzó rutint használja.

Szerk.: egyelőre a nagyobb pontosságú verziót módosítottam, ez gyorsult is 443.9-ről 423.9 másodpercre.
« Last Edit: 2018.August.04. 12:33:22 by IstvanV »