Welcome, Guest. Please login or register.


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

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #30 on: 2018.July.28. 15:16:39 »
PC verzió:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
(fordítás az itt található MinGW csomaggal: gcc -m32 -Wall -O2 -IC:/mingw32/include mandel.c -o mandel.exe -lmingw32 -lSDL -lSDLmain -lm -s)

EP-s változatban lehetne még próbálkozni a korábbi programokban használt egész számos aritmetikával.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #31 on: 2018.July.28. 16:06:31 »
lehetne még gyorsítani, mert sok a lapozás (pl. video RAM 0x8000-től, de a Data és Done tömbök is.

A tömbök méretét csökkenteni lehetne a képernyőt kisebb részekre bontva és több menetben rajzolva. Így ugyan valamivel kevésbé hatékony az algoritmus, viszont minden elfér lapozás nélkül.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #32 on: 2018.July.28. 23:10:12 »
A tömbök méretét csökkenteni lehetne a képernyőt kisebb részekre bontva és több menetben rajzolva. Így ugyan valamivel kevésbé hatékony az algoritmus, viszont minden elfér lapozás nélkül.
kicsit átvariáltam azóta, a 128x192 pixel Data és Done tömbje pont elfér 48kB-on, most már csak a PutPixel során kell csak lapozni. Az x, y koordinátához tartozó Done tömb most a 0x4000 + 256y + x címen van, a Data tömb pedig 0x4000 + 256y + x + 128 címen.
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #33 on: 2018.July.28. 23:14:51 »
PC verzió:
(Attachment Link)
(Attachment Link)
(Attachment Link)
(fordítás az itt található MinGW csomaggal: gcc -m32 -Wall -O2 -IC:/mingw32/include mandel.c -o mandel.exe -lmingw32 -lSDL -lSDLmain -lm -s)

EP-s változatban lehetne még próbálkozni a korábbi programokban használt egész számos aritmetikával.

Hehe, PC-n nem is látszik, hogy rajzol, csak földobja a kész ábrát! :-)

Jaja, gondolkodtam én is a fixpontos cuccon, ha kicsit kigyomlálom a forráskódot, majd kirakom ide is.

Amit még gyorsítottam: az integer -> float konverziót függvény helyett 256 elemű táblázatból oldom meg (a képernyő koordináta sose nagyobb 191-nél), az Iterate fv-ben a 2-vel szorzást (ami a forrásban összeadás), a real szám kitevőjének a növelésével oldom meg (egy darab inc d)
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #34 on: 2018.July.29. 13:51:16 »
Ez még nem EP verzió, de már tartalmaz néhány módosítást: fixpontos aritmetika (a tört rész 20 bites) és függőlegesen 4 részre osztott képernyő.
[ Guests cannot view attachments ]     (szerk.: paletta és dither EP-s PIXEL16 módhoz)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #35 on: 2018.July.29. 18:47:52 »
Ep-s, de még lassú. :oops:
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

A futásidő nagy részét a fixpontos szorzás teszi ki, talán célszerűbb lenne csökkenteni a pontosságot (jelenleg 8.24 bit, ami teljes 32 bites egész szorzást igényel).

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #36 on: 2018.July.29. 21:08:16 »
Kisebb pontosságú és valamivel kevésbé lassú változat:
[ Guests cannot view attachments ]

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #37 on: 2018.July.30. 08:44:38 »
Kisebb pontosságú és valamivel kevésbé lassú változat:
(Attachment Link)
szép lett! nem semmi, hogy még dither-t is raktál bele :-)

viszont tényleg jó lassú :oops:

na most ezt lenne érdemes átírni asm-be, megnézni, mennyit gyorsítana vajon

eredetileg én is a C kódot fordítottam SDCC-vel, és feleekkora felbontással is nagyon lassú volt (persze lebegőpontos számításokkal), azért kezdtem el asm-be
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #38 on: 2018.July.30. 08:48:59 »
tetszik, hogy összevontad a Done és a Data tömböt! :-)
*** Speicherplatz zu klein

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Fraktálok assemblyben
« Reply #39 on: 2018.July.30. 08:56:41 »
Szép, fullra gyorsított emuval gyorsan kirajzolja :ds_icon_cheesygrin:

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #40 on: 2018.July.30. 09:31:32 »
lehet szörnyülködni  forráson :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fraktálok assemblyben
« Reply #41 on: 2018.July.30. 11:44:32 »
a szorzó rutin unroll-olásával 5:57-ről 5:13-ra gyorsult

hm...
a 248. sorban lévő ld (iy+05h), b nem is kell, anélkül 5:10 :-)
« Last Edit: 2018.July.30. 13:10:49 by Povi »
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #42 on: 2018.July.30. 11:56:59 »
na most ezt lenne érdemes átírni asm-be, megnézni, mennyit gyorsítana vajon

Valójában a futásidő kb. 2/3 részét most is az fpMult rutin teszi ki (az előző verzióban 3/4 volt). :oops: Ezt pedig az Iterate() rutin követi, talán célszerű lenne először csak azt átírni asm-re. Itt a bal oldalon látható az fpMult CPU fogyasztása, a kijelölt rész pedig az Iterate:
[ Guests cannot view attachments ]

Kisebb "csalással" ki lehetne még használni a függőleges szimmetriát, elég lenne csak a kép felét számítani, de akkor más paraméterekkel nem működne.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fraktálok assemblyben
« Reply #43 on: 2018.July.30. 17:08:55 »
Egyelőre javítottam valamennyit az fpMult rutinon, és a négyzetre emeléshez lett egy külön fpSqr. Ezen kívül az Iterate "static" változókat használ, bár ez csak néhány másodperc különbséget jelent. A 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.

Szerk.: ez most 494.2:
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

[ Guests cannot view attachments ]

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Fraktálok assemblyben
« Reply #44 on: 2018.July.30. 20:04:34 »
Nekem látványosan gyorsabbnak tűnt, igaz az ALT+W használatát kb fél percig bírtam nélkülözni :D