[#31] Re: SoftwareFPU

@sanjyuubi, post #30

Można...za pomocą MCP.
[#32] Re: SoftwareFPU

@sanjyuubi, post #30

Chyba nie ma programu na Ami który by to robił.
[#33] Re: SoftwareFPU

@wali7, post #32

Jesli program jest napisany "nie pod system" tj. bez użycia jego funkcji, bibliotek etc. A czasem z celowym zablokowaniem działania systemu (funkcja Forbid) i niejednokrotnie przerwań (większość starych dem, intr, gier etc.), to jakim cudem wyobrażacie sobie "emulacje" FPU. W jaki sposób system ma przechwytywać cokolwiek, jeśli jest blokowany a sam program operuje bezpośrednio na warstwie sprzętowej.

Emulator koproca trzeba by zaimplementować wmsamym vampire.

Pleciecie bajki, takie same jak przy okazji wątku o "emulacji AGA" na OCS/ECS. Jakiś "geniusz" wymyślił sobie AGĘ na OCS a reszta wchodzi wmpolemikę, przekonując się nawzajem, że się da albo nie da.
[#34] Re: SoftwareFPU

@zilog, post #33

W taki sam jak niezaimplementowane instrukcje 68060 w wektorze nieznanej instrukcji. Jak nie ma koprocesora a idzie instrukcja FPU procesor skacze do wektora line_f emulator i tam jak wstawisz swoj kod zastepujacy operacje jaka zostala wywolana i zwrocisz parametr aplikacja nawet kod w asemblerze nie bedzie wiedzial roznicy (oprocz szybkosci, bo bedzie wolno).
[#35] Re: SoftwareFPU

@flops, post #34

Zapomniałeś o jednej rzeczy. W przypadku 68060 mamy tylko brakujące instrukcje. Przy próbie emulacji koprocesora mamy do tego jeszcze nieistniejące rejestry. To pociąga za sobą szereg konsekwencji, na przykład kwestię gdzie je umieścić, oraz przechowanie ich na stosie przy przełączaniu zadań, nie zapominajmy też o przerwaniach.
[#36] Re: SoftwareFPU

@zilog, post #33

Ale przecież kości AGA da się emulować na Amidze pod UAE. To dla czego przy użyciu szybkiego CPU nie dało by się ich emulować bez UAE.

I to na ECS/RTG.

Ostatnia aktualizacja: 13.11.2016 12:48:53 przez TechNineWonder
[#37] Re: SoftwareFPU

@Krashan, post #35

aaa, no to jest wreszcie jakiś konkret, brak rejestrów FPU może być istotną przyczyną że nie ma na ami programów emulujących FPU. Bo obsługa wyjątków po natrafieniu na instrukcję FPU bez wątpienia jest, w końcu dzięki niej mamy śliczną, czerwoną ramkę guru.

Ostatnia aktualizacja: 13.11.2016 13:14:21 przez wali7
[#38] Re: SoftwareFPU

@zilog, post #33

Pokaż mi program, który korzysta z FPU, a jednocześnie wyłącza system instrukcją Forbid()....
Moim zdaniem problem wynikać może z tego co napisał krashan - brak rejestrów FPU (w systemach 68k od strony logicznej FPU widziany jest jako integralna część CPU - po prostu jest większa lista rozkazów i więcej rejestrów, więc raczej trudno byłoby wydzielić kod FPU). Co prawda obsługa wyjątku jest możliwa, ale ciekawe co się dzieje z danymi mającymi trafić do rejestrów FPU przy ich braku, rozkaz jest ignorowany?
[#39] Re: SoftwareFPU

@wali7, post #37

Brak rejestrów absolutnie nie jest powodem. Na Maku emulacja FPU jest zrobiona na zasadzie przechwytu F-line. Jedynym powodem jest nonsens takiej emulacji. Przykłady benchamrków:
Time to execute JN & A FPU TimeTest FPU benchmark (smaller is faster)
SoftwareFPU 3.02 (emulation).....................20.6 secs
(Power Mac 8100/80)
16MHz 68881 FPU (chip)..........................2.53 secs
(Mac II)
16MHz 68882 FPU (chip)..........................1.65 secs
(SE/30)
PowerFPU 1.0 (emulation).............. . 1.60 secs
(Power Mac 8100/80)
40MHz 68882 FPU (chip)..........................0.65 secs
(Mac IIfx)
40MHz 68040 FPU (integrated)....................0.085 secs
(Quadra 840AV)
No i gmeranie na wektorach F-line wyklucza emulację (debuggery, monitory itp.). Kolejna rzecz mniej ważna, ale czasami bardzo ważna (np. kompresja arytmetyczna): zaokrąglanie. Nawet WinUAE sobie z tym nie radzi.
[#40] Re: SoftwareFPU

@michal_zukowski, post #28

Ja jeszcze w kwestii sprostowania: tu chodzi o jawne korzystanie z tych funkcji, czyli: jak dzielisz to wywołujesz SPDiv(), jak zaokrąglasz - SPFix() itd. Wówczas jeśli FPU jest dostępne wywoływane są jego instrukcje, jeśli zaś nie - emulacja programowa. Nie chodzi mi o etap kompilacji, tylko o jawne korzystanie z funkcji bibliotek matematycznych.

Narzut spowodowany korzystaniem z tych funkcji jest taki, jak przy korzystaniu z dowolnych funkcji bibliotecznych, jednak przyśpieszenie dzięki FPU musi być znaczące.
[#41] Re: SoftwareFPU

@Hexmage960, post #40

Musisz tez wziac pod uwage ze nawet jesli wywolasz takie funkcje to nie jestes do konca pewny czy te operacje pojda przez FPU mimo jego fizycznej obecnosci. To czy tak sie stanie zalezy od konstrukcji samych bibliotek.

Ostatnia aktualizacja: 13.11.2016 15:18:26 przez Phibrizzo
[#42] Re: SoftwareFPU

@wali7, post #38

Wszystkie moje intra przykladowo (Enter/ex Appendix & Mawi) i wielu wielu innych koderow.

Postulat z emulacją koproca na procedurze obsługi przerwania ok. tylko, że to można zrobić w ramach swojego programu lub optymistycznie, jeśli system nie jest blokowany.

Emulacja Aga i koproca na starej amidze przez UAE? Może i dałoby się uae uruchomić, ale operacje wszelkientrawałyby wieki, pozatym PO CO?
[#43] Re: SoftwareFPU

@zilog, post #42

Ale co uruchomić OCS można emulować prawie idealnie. Nikt nie pytał po co tylko że się nie da.

Po za tym po co. Np: Chcesz sobie zagrać na RTG w swoje ulubione tytuły? odpalasz UAE... I tak dalej wszystkiego czego nie mogłeś zrobić na RTG do tej pory, mógłbyś robić przy użyciu UAE.

Rozumie że nie których Amiga nie "kręci" jak kiedyś ale pisanie że się czegoś nie da zrobić na Amidze jest absurdalne. Lepiej już pisać że się tego nie chce robić. Bo nie niż że się nie da.

Zobaczymy za jakieś 150/200 Mipsów.
[#44] Re: SoftwareFPU

@TechNineWonder, post #43

Panowie jak pokazuje MacOS SoftFPU jest mozliwy i czasami ma swoje zastosowania. Ale to ostateczność i desperacja zeby to używać. Na Aminecie można znaleźć próby takiego czegoś, gdzieś widziałem. Co prawda jest to chyba nieskończone ale początki są.
Pod Makówką SoftFPU pozwala np uruchomić Marathon na Vampirce. Dużo lepiej po prostu poczekać na FPU w Vampirce.
[#45] Re: SoftwareFPU

@Hexmage960, post #40

Narzut spowodowany korzystaniem z tych funkcji jest taki, jak przy korzystaniu z dowolnych funkcji bibliotecznych,


Nie, w przypadku tych funkcji narzut jest wiekszy, bo wszystkie parametry (jak i wynik) przepychasz przez rejestry staloprzecinkowe. I tak na przyklad proste FADD.D (jedna instrukcja) w przypadku mathieeedoubbas.library sprowadzloby sie do przerzucenia zawartosci d0:d1 do jednego rejestru fpu, potem d2:d3 do kolejnego rejestru fpu, wykonanie fadd.d, a na koniec przerzucenie wyniku z rejestru fpu do d0:d1. I w tym momencie mozesz do tego dodac jeszcze narzut typowy dla bibliotek amigowych :P Jednak jest roznica miedzy czyms takim a jedna prosta instrukcja, prawda?
[#46] Re: SoftwareFPU

@zilog, post #42

Postulat z emulacją koproca na procedurze obsługi przerwania ok. tylko, że to można zrobić w ramach swojego programu lub optymistycznie, jeśli system nie jest blokowany.


Da sie w 680x0 zablokowac wywolanie TRAP, LINE_F czy tez LINE_A bez modyfikowania wektorow przerwan? I jezeli nie, to czy dema operujace tylko na sprzecie podmieniaja te wektory?

Bo jak nie to emulacja FPU nadal bylaby do zrobienia :P
[#47] Re: SoftwareFPU

@Krashan, post #35

Przy próbie emulacji koprocesora mamy do tego jeszcze nieistniejące rejestry. To pociąga za sobą szereg konsekwencji, na przykład kwestię gdzie je umieścić, oraz przechowanie ich na stosie przy przełączaniu zadań, nie zapominajmy też o przerwaniach.


exec.library w dosc wczesnym momencie sprawdza czy obecny jest fpu i jezeli tak podmienia kilka funkcji w systemie na wersje dla koprocesora (m.in. przerzuca kontekst FPU miedzy zadaniami). Trzeba by te funkcje tylko "wyluskac" z rom-u i podmienic w systemie tak samo jak to robi exec. Emulatorowi koproca wystarczylby jeden zestaw emulowanych rejestrow.

Nadal jest to wykonalne ale byloby masakrycznie powolne.
[#48] Re: SoftwareFPU

@mschulz, post #45

Narzut biblioteczny jest minimalny, ale jest konieczny jeśli chcemy by nasz program uruchomił się na komputerze bez FPU. Zysk z posiadania FPU jest tak duży, że niweluje całkowicie ten narzut. Co więcej biblioteka inicjuje swoje wektory skoków już przy inicjowaniu w zależności od obecności FPU.

Dodawanie dwóch liczb pojedynczej precyzji sprowadza się do trzech instrukcji i RTS na końcu jeśli FPU jest dostępne:

FMOVE.S D0,FP0
FADD.S D1,FP0
FMOVE.S FP0,D0
RTS

Jak widać instrukcja FADD.S dodaje bezpośrednio rejestr danych CPU do rejestru FPU. Liczba instrukcji jest minimalna.

Można używać poleceń FPU bezpośrednio (inline), ale wówczas sami musimy sprawdzać, czy FPU jest obecny.

Biblioteki matematyczne mają ułatwić, a nie utrudnić życie. I zapewnić przenośność kodu.
[#49] Re: SoftwareFPU

@Hexmage960, post #48

Jak widać instrukcja FADD.S dodaje bezpośrednio rejestr danych CPU do rejestru FPU. Liczba instrukcji jest minimalna.


Podalem przyklad z FADD.D (uzywajacy podwojnej precyzji). W twojej odpowiedzi celowo uzyles przykladu z pojedyncza precyzja (FADD.S) prawda? Pewnie dlatego, ze FMOVE.D musialo by leciec przez pamiec (np. przez stos) :P
[#50] Re: SoftwareFPU

@Hexmage960, post #48

"Narzut biblioteczny jest minimalny, ale jest konieczny jeśli chcemy by nasz program uruchomił się na komputerze bez FPU"

Narzut jest bardzo daleki od minimalnego jezeli nawet w przypadku tak prostej instrukcji jak dodawanie wyniesie ponad 200%. Wydajna aplikacja powinna byc albo kompilowana w 2 wersjach albo miec 2 osobne procedury.
[#51] Re: SoftwareFPU

@mschulz, post #49

Podałem ten przykład zupełnie przypadkowo jako pierwszy z brzegu.

Napisałeś, że oba argumenty trzeba najpierw przenieść do rejestrów FPU. Okazało się, że polecenia typu FADD.S mogą mieć za argument rejestr danych CPU, więc przenoszenie obydwu nie jest konieczne.

Z tego co wiem (musiałbym sprawdzić), to w przypadku podwójnej precyzji liczby są przekazywane i zwracane przez dwa rejestry - D0 i D1. W asemblerze łatwo takie coś wprowadzić.

Ostatnia aktualizacja: 14.11.2016 12:50:20 przez Hexmage960
[#52] Re: SoftwareFPU

@Hexmage960, post #51

Z tego co wiem (musiałbym sprawdzić), to w przypadku podwójnej precyzji liczby są przekazywane przez dwa rejestry - D0 i D1. W asemblerze łatwo takie coś wprowadzić.


Tak, sa przekazywane przez dwa rejestry, ale zeby je zaladowac do FPU trzeba to zrobic przez pamiec, co dodatkowo spowalnia calosc. pisane z glowy i bez sprawdzania (pod m68k nie programowalem od jakis 15 lat i pewnie i tak spierdzielilem kolejnosc zapisywania rejestrow w movem ;))

# w twoim kodzie skok do mathieeedoubbas:
...
jsr -LVO(a6)
...
# w mathieeedoubbas w LVO table:
jmp __fadd

# w mathieeedoubbas w implementacji IEEEDPAdd
__fadd:
movem d0-d4,-(sp)
fmove.d (sp),fp0
fadd.d 8(sp),fp0
fmove.d fp0,(sp)
movem (sp)+,d0-d4
rts


porownaj ten narzut z uzyciem fadd.d bezposrednio w kodzie...

Ostatnia aktualizacja: 14.11.2016 13:11:03 przez mschulz
[#53] Re: SoftwareFPU

@mschulz, post #52

Do tego pamietaj, ze w miejscu wywolania musisz przerzucic dane do d0:d1 i d2:d3 bo tak jest zdefiniowane API. Potem po wyjsciu zrobic to samo z wynikiem. Narzut jest bardzo duzy.
[#54] Re: SoftwareFPU

@kiero, post #53

Do tego pamietaj, ze w miejscu wywolania musisz przerzucic dane do d0:d1 i d2:d3 bo tak jest zdefiniowane API. Potem po wyjsciu zrobic to samo z wynikiem. Narzut jest bardzo duzy.


Takie rozwiazanie przypomina to z architektury ARM, gdzie wspolne API (ale tez ABI) pozwala na uruchamianie programow na CPU z koprocesorem, CPU bez koprocesora jak i na CPU z "okrojonym" koprocesorem. Wlasciwy wybor biblioteki nastepuje w momencie uruchamiania programu.

I pomimo swoich niezaprzeczalnych zalet (jedna binarka na wszystkie wersje) rozwiazanie to jest na tyle zabojcze dla wydajnosci, ze powstalo nowe ABI dla ARM-ow z koprocesorem - hardfloat, gdzie z FPU korzysta sie bezposrednio omijajac te staromodne narzuty...
[#55] Re: SoftwareFPU

@mschulz, post #52

Zgoda.

Kod w rzeczywistości wygląda jak poniżej. W większości aplikacji takie rozwiązanie się sprawdza. Nawet jak narzut to dwukrotność wykonywania własnego kodu. Tylko w przypadku jakichś naprawdę skomplikowanych operacji warto zastosować własny kod oraz zrobić użytek z reszty instrukcji koprocesora i jego rejestrów zmiennoprzecinkowych.

Optymalizowanie na tym poziomie nie jest konieczne w większości programów. Co też ważne, autorowi wątku chodzi o rozwiązanie właśnie braku FPU, a biblioteki matematyczne udostępniają gotowe rozwiązanie w takim przypadku, choć taka emulacja dopiero wprowadza duży narzut. Zatem narzut przy posiadaniu FPU jest relatywnie niewielki.

Zaletą też jest prostota użycia bibliotek. Warto tylko nauczyć się formatu liczb zmiennoprzecinkowych, co bardzo się przydaje, kiedy się z nich korzysta.

MOVEM.L D0-D3,-(A7)
FMOVE.D (A7)+,FP0
FADD.D (A7)+,FP0
FMOVE.D FP0,-(A7)
MOVE.L (A7)+,D0
MOVE.L (A7)+,D1
RTS
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