OldComp.cz

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


Právě je 19.04.2024, 13:37

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 370 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7, 8 ... 25  Další
Autor Zpráva
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 09.02.2021, 23:48 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 923
Has thanked: 43 times
Been thanked: 411 times
I když jsem v té věci značný skeptik, přeci jen připouštím teoretickou (nenulovou) možnost, že implementace HW násobičky překvapí svým přínosem. Pokud to někdo udělá a předvede čísla, budu mu za to vděčný. Každá příležitost doplnit si znalosti o ověřená fakta se vítá.

MS myslím nabízel ten Floating Point kalkulátor jako samostatný modul, kdysi jsem viděl od toho manuál. Takovýto modul využitý například v systému pro výpočet FFT by mohl značně urychlit výpočty. Bohužel každý vyšší jazyk (tedy i zmíněný BASIC) má nenulovou režii spojenou s ínterpretací pseudokódu a to přínos té HW násobičky značně degraduje.

doplněno: Tak jsem ten popis našel. Vydavatel je sice někdo jiný, konkrétně LAWRENCE LIVERMORE LABORATORY, ale snad to někomu pomůže s dalším hledáním. Bohužel to má přes 1MB a tak to nemohu připojit. A jméno toho dokumentu je FLOATING-POINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS. Bavíme se tedy o softwarovém kalkulátoru...


Naposledy upravil Libor L.A. dne 09.02.2021, 23:53, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 09.02.2021, 23:53 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3662
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 796 times
Kód:
10 A=sin(A)
20 PRINT AT 0,0;A
30 GOTO 10
Je pravda, ze v tomto pripade zrychlenie vypoctu SIN(A) nemalo az tak velky vplyv na beh programu, pretoze ostatne casti, hlavne vypis desatinneho cisla, trva obecne dost dlho.

Ale napriklad taku rotaciu vektora:
Kód:
Xnew = Xold * COS(alfa) - Yold * SIN(alfa)
Ynew = Xold * SIN(alfa) + Yold * COS(alfa)
hlavne ak sa ich rotuje viac a podla roznych uhlov,
by to mohlo urychlit dost podstatne ;)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 00:02 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 923
Has thanked: 43 times
Been thanked: 411 times
Souhlasím s tím, že dle typu úlohy v BASICu můžeme nacházet koeficienty zrychlení x2 až x10. Osobně bych tomu větší potenciál nedával, ale to je můj ničím nepodepřený názor. Diametrálně odlišný stav nastane (a tam s Tebou souhlasím naprosto a bez výhrad), když někde z assembleru budu často volat nějakou tu "násobící" proceduru pro výpočet. A pokud se výpočet navíc "vejde" do nativního rozsahu násobičky, pak zrychlení bude významné. Nebál bych se z těch zmíněných 12384 taktů jít odhadem na cca 300 taktů. Čili zrychlení řádově do 50 by mohlo být reálné. To už je velice zajímavé, na druhou stranu to asi ukazuje limitní přínos hardwarové podpory. Možná 50x, možná 100x, ale zcela určitě ne 200x...


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 00:44 
Offline
Profík

Registrován: 15.01.2014, 20:08
Příspěvky: 785
Bydliště: Šlapanice
Has thanked: 130 times
Been thanked: 98 times
Libor L.A. píše:
doplněno: Tak jsem ten popis našel. Vydavatel je sice někdo jiný, konkrétně LAWRENCE LIVERMORE LABORATORY, ale snad to někomu pomůže s dalším hledáním. Bohužel to má přes 1MB a tak to nemohu připojit. A jméno toho dokumentu je FLOATING-POINT PACKAGE FOR INTEL 8008 AND 8080 MICROPROCESSORS. Bavíme se tedy o softwarovém kalkulátoru...


V dokumentaci k SAPI-1 je i matematická knihovna v plovoucí čárce a to ZDE tak i pevné čárce a to ZDE

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 01:49 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
Busy píše:
...Ale napriklad taku rotaciu vektora:
Kód:
Xnew = Xold * COS(alfa) - Yold * SIN(alfa)
Ynew = Xold * SIN(alfa) + Yold * COS(alfa)
hlavne ak sa ich rotuje viac a podla roznych uhlov,
by to mohlo urychlit dost podstatne ;)
Obzvlaste kdyz by se pouzil jen jediny vypocet, sincos(alfa) :) (s meziulozenim vysledku sin, cos)

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 05:38 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 923
Has thanked: 43 times
Been thanked: 411 times
Dotaz na EC1045.01: je kromě popisu zmíněných matematických knihoven k dispozici i komentovaný výpis zdrojového kódu?

Jsem slepý, už jsem našel i tu knihovnu v pevné řádové čárce... Díky moc.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 09:29 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3818
Has thanked: 280 times
Been thanked: 456 times
Ha, opět je SAPI napřed. Já si ho snad budu muset pořídit :lol: . Jestli to nebude právě tím že nebylo myšleno primárně jako nenáročný stroj do učebny ale v průmyslu muselo přeci jen občas i takové rovnice řešit s vysokou přesností a pokud možno rychle. Tak snad se podaří ji někde využít nebo vznikne jednoduchý matematický testík, nechci říkat benchmark :-). Ideálně formou takové rezidentní knihovny, co by se dala programem zavolat. Zajímavý by byl třeba test vykreslení funkce, tam by to jednou mohlo jet přes CPU a jednou přes násobičku.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 10:52 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3662
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 796 times
Panda38 píše:
Busy píše:
...Ale napriklad taku rotaciu vektora:
Kód:
Xnew = Xold * COS(alfa) - Yold * SIN(alfa)
Ynew = Xold * SIN(alfa) + Yold * COS(alfa)
hlavne ak sa ich rotuje viac a podla roznych uhlov,
by to mohlo urychlit dost podstatne ;)
Obzvlaste kdyz by se pouzil jen jediny vypocet, sincos(alfa) :) (s meziulozenim vysledku sin, cos)
Takato optimalizacia by bez nasobicky urcite pomohla lebo sa skrati dlhy cas kedy CPU travi nasobenim. Ale s nasobickou to nebude az take zrejme ci sa to urychli, lebo s odpametanim hodnot SIN(alfa) a COS(alfa) a ich znovupouzitim sa skrati pocet nasobeni temer na polovicu (takze urychlenie od nasobicky bude iba cca polovicne voci neoptimalizovanemu pripadu) ale zase narastie samotna rezia interpretra s odpametanim hodnot SIN a COS do premennych.

Btw. aky vypocet sincos(alfa) myslis ?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 12:08 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3818
Has thanked: 280 times
Been thanked: 456 times
A co třeba výpočet pomocí algoritmu CORDIC https://www.root.cz/clanky/vypocet-goniometrickych-funkci-algoritmem-cordic/, tam se jen bitově posouvá a sčítá nebo odečítá. Byť na druhou stranu přesnost výsledku tím poněkud utrpí a je potřeba mít k dispozici pomocnou tabulku s hodnotami aby je CPU nemuselo pořád počítat a tu vytvořit zabere čas taky. Ten přímo s pohyby vektorů pracuje. Když jsem si hrál s PMDGRAFem tak jsem taky přemýšlel jak ty výpočty plné sinů a kosinů urychlit a předvypočítaná tabulka hodnot se zdála jako rozumné řešení. Jenže to rychle narazilo na limity Basicu co se její maximální možné velikosti týkalo a též obecně kapacity RAM. A čekat dobrých pár minut na program než se to spočítá by byl taky poněkud opruz..


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 12:15 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
Busy píše:
...Btw. aky vypocet sincos(alfa) myslis ?
Když se počítá sin(alfa) a cos(alfa) současně, je to rychlejší protože používají stejné postupy a výsledně je to jen o málo delší než výpočet jednoho sin nebo cos. Detailnější vysvětlení si teď nevzpomínám, ale používá se to takhle kvůli urychlení výpočtů.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 12:27 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
Cordic je dobrý spíš pro matematické koprocesory a procesory kalkulaček, které umí udělat rychle bitový posun a součet jednou operací. Vyžaduje tabulky a mezivýpočty by měl dělat ve vyšší přesnosti než cílová, protože se přesnost výpočtem ztrácí. U procesoru (jako je x80) se mi víc líbila aproximace Chebyshevovým polynomem, tak jak to dělá ZX81 a ZX Spectrum - výhoda že dosahuje docela snadno a rychle dobré přesnosti a aproximační funkce se dá použít společně pro všechny funkce. Nevýhoda že musí být dobře připravená (předvypočítané konstanty), špatně se upravuje pro jinou přesnost - proto u kalkulaček používám raději Taylorův rozvoj, je univerzálnější a náročnost výpočtů není až tak moc vyšší než Chebyshev nebo Cordic. Při použití makrojazyku (jako to dělá ZX81 a Spectrum) může být výpočet také nenáročný na velikost kódu.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 12:39 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
Busy píše:
...ale zase narastie samotna rezia interpretra s odpametanim hodnot SIN a COS do premennych...
S převýpočtem jsem měl představu, že by se nejdříve zavolala funkce sincos(alfa), která vypočte sin a cos a výsledky uloží do svých pomocných proměnných v RAM, tj. uložení např. 2x5 bajtů. Při použití se pak uvedou speciální proměnné, sina a cosa, které vrátí uložené výsledky, kopie 5 bajtů do stacku. To by mohlo být rychlé.

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 12:41 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3818
Has thanked: 280 times
Been thanked: 456 times
Na ten jsem se díval taky ale hemží se samými faktoriály a vysokými mocninami, tak mi přišlo že by násobička do 256 rychle ztratila dech. A nějak ty čísla kouskovat by minimálně v Basicu zase rychle spotřebovalo tu výhodu rychlého násobení. Patrně počítačová implementace bude poněkud odlišně provedená než v definici uvedený matematický zápis :-).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 13:02 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1975
Bydliště: Most, Praha
Has thanked: 870 times
Been thanked: 699 times
U Taylora se snadno počítají členy iterace jen jednoduchými úpravami předešlého členu. Tady např. smyčka pro výpočet sin, jsou tam jen operace 1x násobení, 2x inkrementace a 2x dělení. Vzorec: sin(x) = x/1! - x^3/3! + x^5/5! - x^7/7! + x^9/9! - ...
Kód:
   // iterations
   do {
      // multiply member by -x^2
      Mul(num, num, x2);

      // increment factorial coefficient
      Inc(fac, fac);

      // divide member by factorial coefficient
      Div(num, num, fac);

      // increment factorial coefficient
      Inc(fac, fac);

      // divide member by factorial coefficient
      Div(num, num, fac);

      // add member to accumulator and check epsilon of loop
   } while (AddLoop(res, num));

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: HW násobička MH102
PříspěvekNapsal: 10.02.2021, 13:11 
Offline
Profík

Registrován: 26.11.2018, 16:59
Příspěvky: 581
Bydliště: Holešov
Has thanked: 13 times
Been thanked: 91 times
EC1045.01 píše:
V dokumentaci k SAPI-1 je i matematická knihovna v plovoucí čárce a to ZDE tak i pevné čárce a to ZDE


připadlo mi to povědomé tak jsem si ověřil těch pár čísel co je tam uvedených a 4-bajtový formát FP čísla odpovídá číslům v Basicu IQ-151 ještě se pak mrknu na vlastní rutiny jestli je to nově psané nebo okopírované

EDIT: takže rutiny násobení a dělení jsou prakticky totožné, otázkou je kdo od koho opisoval případně kde se vzal původní kód, v každém případě tyto matematické rutiny jsou v Basic6/G IQ151.


Naposledy upravil l00k dne 10.02.2021, 13:47, celkově upraveno 1

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ů: 370 ]  Přejít na stránku Předchozí  1, 2, 3, 4, 5, 6, 7, 8 ... 25  Další

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


Kdo je online

Uživatelé procházející toto fórum: Kamil_HK a 10 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