Komentowana treść: Nowa, szybka konwersja chunky-to-planar
[#31] Re: Nowa, szybka konwersja chunky-to-planar

@Leon, post #26

"Ps. I nie słuchaj tych malkontentów, scenowcy przez 20 lat naklepali miliony linijek kodu a jakoś nie przełożyło się to na ilość wydanych gier na Amigę. Także nie patrz się na innych i realizuj swoje pomysły i marzenia."

Malkontentów? Serio? Komentujemy kawałek kodu który poza tym, że dał autorowi satysfakcję nic nie wnosi. Wynajduje koło na nowo w dziedzinie w której już nie ma dużo do powiedzenia (do tego kod jest publicznie dostępny) zamiast powalczyć nad pozostałymi 95% kodu takiego przysłowiowego wolfensteina. Tam jest duże pole do popisu (tak, nawet przy takim prostym silniku) i można się wykazać.

Ostatnia aktualizacja: 14.11.2015 16:08:42 przez kiero
[#32] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #31

kawałek kodu który poza tym, że dał autorowi satysfakcję nic nie wnosi

No właśnie miałem zapytać po co to właściwie zostało zrobione. Jeżeli dla własnej przyjemności i ze względów treningowych/edukacyjnych to ok. Można coś takiego sobie spróbować zrobić. Jednak jakby się chciało na tym coś zrobić to chyba lepiej użyć istniejących od lat procedurek tego typu. W tej dziedzinie zrobiono i udowodniono już bardzo wiele. I zrobiła to czołówka amigowego świata koderskiego więc szybciej zrobić się już chyba nie da. szeroki uśmiech
[#33] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #30

Ale po co porownywac sie do antycznego/kiepskiego kodu? Tutaj masz kolekcje procedur do c2p na rozne okazje. Przy porownywaniu sie z innymi proponuje tez nie 'odejmowac sobie pracy' zakladajac inny niz liniowy sposob ulozenia pikseli w pamieci.
[#34] Re: Nowa, szybka konwersja chunky-to-planar

@MDW, post #32

Pewnie sam wiesz jak to jest grzebać w czyimś kodzie. Zanim się połapiesz co gdzie jest to miną wieki. Dlatego czasem dobrze jest zacząć coś od zera niż edytować i rowijać kogoś innego kod.
[#35] Re: Nowa, szybka konwersja chunky-to-planar

@Leon, post #34

Grzebac? Masz opisane parametry procedury. Co wiecej, masz napisane jak ich uzyc. W c2p nie ma czarów. Masz dane wejsciowe i miejsce na dane wyjsciowe. To taka nieco bardziej zlozona operacja kopiowania. Nie musisz wiedziec co robi kazda linijka. A teorie 'nowoczesnych' c2p masz wylozona np Tutaj. Proponuje zassac archiwum do ktorego linkowalem i przynajmniej popatrzyc co jest w srodku.

Ostatnia aktualizacja: 14.11.2015 16:43:10 przez kiero
[#36] Re: Nowa, szybka konwersja chunky-to-planar

@MDW, post #32

Ćwiczyłem już od dosyć dłuższego czasu z procedurą c2p, od momentu kiedy zrozumiałem jej ideę. Postawiłem sobie pytanie - czy można użyć jakiejś lepszej struktury danych, by konwersja była efektywniejsza. Moja idea z odpowiednim ustawieniem pikseli celem szybszej konwersji jest co najmniej interesująca, jakby nie patrzeć.

Oczywiście zdaję sobie sprawę, że odpowiednie procedury do stawiania pikseli muszą być zmodyfikowane, ale wystarczy proste mapowanie posiłkowane 32-elementową tablicą.

Przyświeca temu cel, że każda procedura może być ulepszana.

Kod umieściłem, bo akurat KOGOŚ może zainteresować. Nie ukrywam, że satysfakcję z opracowania tej procedury mam, a sama ewentualność, że wprowadziłem jakąś innowację sprawia, że szybciej bije mi serce.

Nie wykluczone, że nic nowego nie wniosło w co wątpię.

W każdym razie dziękuję wszystkim za komentarze.
[#37] Re: Nowa, szybka konwersja chunky-to-planar

@Leon, post #34

Pewnie sam wiesz jak to jest grzebać w czyimś kodzie.

Doskonale to rozumiem. Ja właśnie choruję na odrazę do grzebania w cudzym kodzie. Piszę sam wiele rzeczy, które są dostępne w postaci otwartego kodu, bo mam wrażenie, że tylko wtedy panuję w pełni nad tym co robię. Jednak od lat z tym wlaczę i jakieś efekty tego już są, bo już nie dostaję białej gorączki gdy widzę cudzą klasę/funkcję/procedurę.

Mimo tej odrazy myślę, że gdybym pisał na najsłabsze Amigi w assemblerze (raczej nigdy to nie nastąpi, bo to nie moje klimaty) to używałbym gotowych procedurek c2p. Jest to na tyle zamknięty i odseparowany kawałek kodu, że nie trzeba się w niego wgryzać. Po prostu użyć zogdnie z opisem i tyle. Tak mi się wydaje.

I taka mała ciekawostka. Polecam ściągnąć źródła dzisiejszego systemu operacyjnego Android i poszukać w nich wyrazu "Amiga". Trafi się na procedurkę chunky-to-planar w której w komentarzu będzie uwaga, że procedura inspirowana c2p Scouta. szeroki uśmiech To zresztą nie jedyne miejsce w którym wyraz "Amiga" istnieje w źródłach Androida.

Ostatnia aktualizacja: 14.11.2015 16:58:38 przez MDW
[#38] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #36

"Ćwiczyłem już od dosyć dłuższego czasu z procedurą c2p"

No i bardzo dobrze. Kazde kolejne cwiczenie powoduje wzrost umiejetnosci a w programowaniu jest nie niezbedne. Z tym, ze moim zdaniem powinienes cwiczyc jak najszybsze blitowanie tilesow na ekran 2d a nie procedury c2p do 3d.
Jak sie teraz zabierzesz za "pisanie Doom'a", to reszta tych projektow, ktore juz zaczales nigdy nie bedzie miala szansy na realizacje.
[#39] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #15

@kiero
Ja to jestem słaby z 68060, mógłbyś mi wytłumaczyć co to jest to sparowanie instrukcji ? Dziękuje.

@Hexmage
Według mnie, zmiana struktury danych też ma koszt i powinień być także liczony per piksel i dodany, bo ustawienie danych jak zrozumiałem nie jest naturalne.
[#40] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #35

Witam.
Czy moglibyście mi wyjaśnić przy okazji czy c2p w koprocesorze Akiko w cd32 jest jeszcze użyteczne , czy trzeba to robić najlepiej procesorem?
Drugie: czy taki kod mozna napisać na koprocesor 882 choćby częściowo?
Nie mogę pojąć że EC020 ma 16mHz a 882 można podkręcić do 50 i nikt nie chce pisać
optymalizacji pod niego.
Nie każdy ma 060@100 (zazdroszczę :D)
Pozdrawiam serdecznie
[#41] Re: Nowa, szybka konwersja chunky-to-planar

@asman, post #39

Koszt mapowania jest proporcjonalny do liczby pikseli i polega na 2 instrukcjach: pobraniu z tablicy wartości odpowiadającej danej pozycji piksela (w grupie 32 pikseli) i umieszczeniu piksela w odpowiednim miejscu. Jest to zwykła procedura mapowania, jak np. mapowanie kolorów. Zatem koszt znikomy, a umożliwia on dużo sprawniejszą konwersję.

Ostatnia aktualizacja: 14.11.2015 17:20:00 przez Hexmage960
[#42] Re: Nowa, szybka konwersja chunky-to-planar

@asman, post #39

Ogolnie chodzi o to, ze 060 ma 2 ALU i przy specjalnie przygotowanym kodzie potrafi rozdzielac instrukcje pomiedzy nie efektywnie wykonujac 2 instrukcje zamiast jednej w tym samym czasie. Np taki kod:

add.l d0, d1
add.l d2, d3
add.l d4, d5
add.l d6, d7

wykona sie w 2 cyklach procesora zamiast w 4 (samo add.l wykonuje sie w 1 cyklu). Niestety sprawa nie jest taka prosta przy bardziej skomplikowanym kodzie. Musimy starac sie eliminowac 'zaleznosci' pomiedzy instrukcjami. Np takie cos:

add.l d0, d1
add.l d1, a0

jest zle, bo druga instrukcja potrzebuje wyniku z pierwszej. Ale takie cos:

add.l d0, d1
add.l d2, d3
add.l d1, a0
add.l d3, a1

jest juz jak najbardziej ok. Dlatego tez np dobrym pomyslem jest rozwiniecie petli tak zeby obliczac 2 wyniki jednoczesniej. Wtedy duzo prosciej jest wlasnie parowac instrukcje tak zeby nie powstawaly pomiedzy nimi zaleznosci.

Oczywiscie ograniczen jest wiecej. Nie kazda instrukcja jest w stanie wykonac sie na drugim potoku (lista jest w user manual. sa to instrukcje typu pOEP-only). Rozdzial 10 w 68060UM.pdf jest ogolnie bardzo ciekawy. Przy optymalizacji pod 060 polecam wielokrotna lekture;)

68060UserManual
[#43] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #41

Te dwie instrukcję zabiorą przynajmniej 16 cykli i to w najprosztszym zapisie typu move.b (a0)+,d0 i move.b d0,(a0)+, gdzie tu nie ma mapowania. Więc to nie jest znikome jeśli było 47 taktów to jest w przybliżeniu o 1/3 więcej.
[#44] Re: Nowa, szybka konwersja chunky-to-planar

@Mikrobi, post #40

1: Akiko ma sens dla procesorow <=030. >030 jest szybciej procesorem ale to i tak bez znaczenia bo nie ma chyba takich kart dla cd32.

2: Nie, FPU nie jest przydatne przy c2p. Dodatkowo 882 jest bardzo powolnym ukladem w porownaniu do jednostki staloprzecinkowej.
[#45] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #42

Dzięki, gdzieś, kiedyś mi się obiło o uszy o tych 2 ALU. Ale na spokojnie, najpierw muszę się wymasterować w 68000. Potem 68020. Szkoda tylko że nie ma jakiegoś spoko symulatora 68020 a przynajmniej ja nie znam.
[#46] Re: Nowa, szybka konwersja chunky-to-planar

@asman, post #45

Winuae ma chyba cycle exact emulacje 020 i 030. A przynajmniej prawie cycle exact.
[#47] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #44

Grande DZiĘKI !!!
Latami nie mogłem tego zrozumieć
[#48] Re: Nowa, szybka konwersja chunky-to-planar

@asman, post #43

W praktyce remapowanie nie powinno dużo kosztować.

lea piksele,a0
lea cel,a2
lea tablica,a1 ; tablica remapowania

move.b (a1)+,d0
move.b (a0)+,(a2,d0)

move.b (a1)+,d0
move.b (a0)+,(a2,d0)

itd. tyle par instrukcji ile pikseli.

A! Ponieważ mamy tu do czynienia z tablicą stałych to kod upraszcza się:

move.b (a0)+,x(a2)
move.b (a0)+,y(a2)
move.b (a0)+,z(a2)

gdzie x, y, z to stałe itd. (32 razy)

Ostatnia aktualizacja: 14.11.2015 18:03:27 przez Hexmage960
[#49] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #48

To jest tylko najprostszy przyklad. Jest duzo przypadkow kiedy jest to bardziej skomplikowane. Ogolnie takie remapowanie:
- zasmieca ci data cache jezeli uzywamy duzej tablicy (tak jak tutaj)
- dodaje obliczen jezeli uzywamy tablicy malej (np tylko dla dolnych 8bitow). komplikuje kod
- kosztuje dodatkowy rejestr/rejestry
- wymaga sledzenia offsetu przy rysowaniu czegokolwiek (np kreslenie linii to nie sa liniowe dostepy do bufora)

Jezeli nie ma wymiernego zysku przy samym c2p to nie warto. A tak jak napisalem zysku w stosunku do 'konkurencyjnych' algorytmow nie ma.

EDIT:

To co podales pozniej to tylko najprostszy przypadek kiedy zapisujemy liniowo albo konwertujemy liniowo. Jezeli chcesz konwertowac caly bufor to dochodza ci koszty odczytow i zapisow do pamieci. To nie jest darmo. Szczegolnie przy odczytach i zapisach 8bit. Bez sensu skoro mozna to wrzucic do c2p (move.b + shifty)

Ostatnia aktualizacja: 14.11.2015 18:04:45 przez kiero

Ostatnia aktualizacja: 14.11.2015 18:06:01 przez kiero

Ostatnia aktualizacja: 14.11.2015 18:06:16 przez kiero
[#50] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #44

1: Akiko ma sens dla procesorow <=030. >030 jest szybciej procesorem ale to i tak bez znaczenia bo nie ma chyba takich kart dla cd32.


Jest SX-32PRO
[#51] Re: Nowa, szybka konwersja chunky-to-planar

@Duracel, post #50

Źle przeczytałeś. W sx jest 030 czyli ok.OK Akiko nie od 040 wzwyż.
Znaczy się trza sie nauczyć wreszcie kodować i zrobić coś "akiko optymized" pod cd32
PozdrOK
[#52] Re: Nowa, szybka konwersja chunky-to-planar

@Mikrobi, post #51

Hej! Zapodaję wersję z dodaną optymalizacją zaproponowaną przez Don Adana oraz z zapisywaniem dla bitmap interleaved, jak poradził Kiero.

A1 teraz wskazuje na początek danych graficznych w bitmapie typu interleaved o rozmiarze 320x256. A2 pełni inną rolę i nie jest już argumentem.

Na Blizzardzie z 030/50MHz cały ekran konwertuje się bardzo szybko.

Jestem nadal otwarty na sugestie. Chciałbym by był to szybki chunky 2 planar dla Amig "low-end", czyli z 030 i FAST.

c2p_1.s
[#53] Re: Nowa, szybka konwersja chunky-to-planar

@kiero, post #44

@kiero
Czy mógłbyś wytłumaczyć czemu sprzętowe c2p typu karta graffiti nie było dobrym rozwiązaniem?
Przy opisie człowiek twierdzi że używając emulacji maka na 040 było lepiej ją mieć niż sterownik EVD...
[#54] Re: Nowa, szybka konwersja chunky-to-planar

@Mikrobi, post #53

Zamiast ciagnac ten watek, ktos moglby napisac jakis artykul o C2P np. rowniez w oparciu o procedury Minniata.
[#55] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #52

Jestem nadal otwarty na sugestie.

Sugestia: porób dokładne benchmarki i porównaj się z istniejącymi rozwiązaniami. Będziesz wiedział w którym miejscu jesteś. Bo stwierdzenie, że ekran się konwertuje „bardzo szybko” jest nieprecyzyjne.
[#56] Re: Nowa, szybka konwersja chunky-to-planar

@Krashan, post #55

Tak, planuję zrobić dokładne benchmarki.

Ekran na 030/FAST konwertuje się "momentalnie" - nie widać procesu stawiania pikseli. Najlepiej sprawdzić na 320x200 (zmienić odpowiednią linijkę w kodzie procedury) i ustawić priorytet tasku na wysoki, żeby miał więcej cykli procesora.

Oczywiście sama gra korzystająca z grafiki w chunky to nie tylko c2p, ale wydaje mi się, że stosując moją procedurę można uzyskać całkiem zadowalające rezultaty. Mam jeszcze Blizzarda 1260/50MHz, ale na nim mojej procedury jeszcze nie testowałem.

Myślę, że stworzyłem coś wartościowego. No ale dzisiaj nie będę już rozmawiał na forum bo mam inne obowiązki. Życzę miłego dnia.
[#57] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #56

Ekran na 030/FAST konwertuje się "momentalnie"

Jeżeli, jak napisałeś, na jeden piksel przypada 47 taktów procesora, to na 68030@50 MHz konwersja ekranu 320×200 zajmie 60 ms, czyli całe trzy ramki obrazu...
[#58] Re: Nowa, szybka konwersja chunky-to-planar

@Krashan, post #57

Teraz jest trochę szybciej ze względu na wprowadzoną optymalizację. Poza tym należy uwzględnić, że procesor ma wewnętrzne optymalizacje, no i to są takty liczone dla procesora 68000. Tak na oko nie wydaje mi się, że ta konwersja trwa aż 3 ramki.
[#59] Re: Nowa, szybka konwersja chunky-to-planar
Ja zaoferuję do testów dwie swoje Ami1200. Jedną z Apollo i AGA 040/40, oraz drugą, też 040/40 z kartą GFX BVision.
[#60] Re: Nowa, szybka konwersja chunky-to-planar

@Hexmage960, post #58

Dlatego właśnie nic nie zastąpi dokładnego pomiaru, bo to pozwala stwierdzić, czy idzie się w dobrym kierunku. Bardzo mi się to przydało przy optymalizowaniu szyfru AES-256 na PowerPC. Zacząłem od napisania pomiaru czasu i każda kolejna wersja była mierzona. Dzięki temu wyłapałem sporo niespodzianek.

BTW trzeba się pobawić AES-em na M68k...
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem