Operatiile de inmultire si impartire in virgula flotanta
Daca in virgula fixa inmultirea si impartirea reprezinta operatii evident mai complicate decat adunarea si scaderea, in virgula flotanta situatia se inverseaza determinand sa tratam impreuna aceste doua operatii. Dupa cum remarcam introductiv, relatia (5.1) arata ca inmultirea/impartirea a doi operanzi de virgula flotanta, X si Y, consta in doua operatii de virgula fixa, anume inmultirea/impartirea numerelor significand, respectiv adunarea/scaderea numerelor exponent. O schema bloc generica pentru ambele operatii este data in fig. 5.25 [Parh00], in care nu apare
|
Fig. 5.25 |
insa partea de circuite implicate in operarea valorilor speciale (0, , s.a.). Cu privire la despachetarea (unpack) operanzilor (X si Y), cat si la impachetarea (pack) rezultatului (produs P/cat Q), isi pastreaza valabilitatea cele expuse la adunare/scadere. Legat de semnul rezultatului , acesta este obtinut in mod simplu, operand EXCLUSIVE - OR semnele operanzilor, si , adica
Problema operarii exponentilor consta in faptul ca, in conformitate cu standardul IEEE 754, valorile acestora, si , sunt deplasate (biased), constituind numere exprimate in exces de o valoare a deplasamentului (bias care este dependent de precizie - 127 la single precision, respectiv 1023 la double precision). La inmultire, cand trebuie adunati cei doi exponenti, si , intrucat amandoi sunt deplasati, pentru a obtine valoarea preliminara a exponentului rezultatului, , se impune ca din suma () sa fie scazuta valoarea bias-ului (pentru a obtine o valoare care are adaugat deplasamentul o singura data). Pe de alta parte, la impartire, cand se scad cei doi exponenti deplasati, se obtine diferenta nedeplasata, ori, pentru a fi si aceasta exprimata in exces, se impune adunarea la ea a valorii bias-ului.
Astfel, admitand ca adoptam standardul IEEE 754 single - precision caracterizat prin , sa consideram inmultirea si impartirea operanzilor nestandardizati, si Referindu-ne la valorile deplasate, standardizate, ale exponentilor, avem , respectiv , ceea ce conduce la operatiile din fig. 5.26, in care operanzii si
|
Fig. 5.26 |
rezultatele impachetate au fost notate cu indicele p, iar pentru rezultatele produs si cat s-au folosit indicii P, respectiv Q. Este de remarcat scaderea bias-ului la calculul exponentului produsului (realizata prin adunarea complementului de doi bias-ului), precum si adunarea bias-ului la calculul exponentului catului (realizata prin adunarea valorii in semn - marime a bias-ului).
Operatiile descrise sunt prevazute a fi efectuate in blocul add/subtract exponents (fig. 5.25), legat de care mai mentionam ca, in ceea ce priveste implementarea operatiilor relevate in fig. 5.26, se apeleaza la unele artificii menite a simplifica circuistica [ErLa04] [Parh00]. Astfel scaderea bias-ului 127, la inmultire, este echivalenta cu adunarea unui 1, prin intermediul intrarii a sumatorului exponentilor si scaderea din suma a valorii 128, ceea ce este echivalent cu bascularea rangului msb al exponentului produsului . Pe de alta parte, adunarea bias-ului 128, cand facem diferenta , scadem inca un 1, inhiband intrarea a sumatorului exponentilor la adunarea complementului de doi , dupa care adunarea valorii 128 este, din nou, echivalenta cu bascularea rangului msb al exponentului catului ZEQ.
In ceea ce priveste numerele significand, , acestea sunt inmultite/impartite in partea (Multiply/Divide significands - fig. 5.25) cea mai complexa si mai lenta a intregului dispozitiv de inmultire/impartire. Cum si , produsul celor doua numere significand fara semn rezulta a apartine intervalului valoric [1, 4), asa cum raportul celor doua numere significand fara semn rezulta a apartine intervalului valoric (1/2, 2) [LaAn03]. In consecinta, pentru a obtine numerele significand rezultat, se impune normalizarea prin deplasarea produsului cu o pozitie la dreapta si corespunzatoarea incrementare a valorii exponentului preliminar, respectiv prin deplasarea catului cu o pozitie la stanga si corespunzatoarea decrementare a valorii exponentului (normalize & adjust exponent - fig. 5.25).
Urmarind fluxul suboperatiilor in continuare, primei normalizari descrise ii succede rotunjirea, care are aspecte specifice la cele doua operatii. Astfel, referindu-ne, mai intai, la inmultire, vom apela la unele exemple pe care le adoptam din mai familiarul sistem de numeratie zecimal. Astfel, admitand, prin analogie cu standardul IEEE 754, ca avem o cifra zecimala "ascunsa" si trei cifre zecimale formand mantisa, adica , in fig. 5.27 se prezinta trei potentiale situatii de inmultire. In cazul a, produsul rezulta pe cifre
|
Fig. 5.27 |
zecimale si el trebuie, mai intai, adus la forma "normalizata" cu o singura cifra in pozitia "hidden". Urmeaza suboperatia de rotunjire, scop in care, la dreapta celor cifre (valoarea 1.549) sunt identificate cifrele implicate la rotunjire, R (round digit) si S (sticky digit), care, prin analogie cu cele prezentate, in binar, in fig. 5.8a, au valorile si (, doar cand toate cifrele la dreapta lui R sunt 0). Intrucat , rotunjirea se face in sus prin adaosul unei unitati la cifra cea mai putin semnificativa a "significand-ului" normalizat, dupa modelul rotunjirii conform modului "toward to nearest even" din fig. 5.9 (este echivalent cu in binar; daca S ar fi rezultat 0, s-ar fi optat, dintre valorile "significand" 1.549 si 1.550, pentru cea para, 1.550, adica pentru acelasi rezultat ca si cel din fig. 5.27). S-a obtinut in felul descris, "significand-ul" rezultat pe acelasi numar de cifre ca si cel a numerelor "significand" operand. Pe de alta parte, cazul b este asemanator cu cel deja descris, cu mentiunea ca produsul rezulta, conform cu cea de a doua alternativa posibila, pe doar cifre, situatie in care nu mai este necesara normalizarea prin deplasare la dreapta ca in cazul a, deci se trece la suboperatia de rotunjire procedand, in acelasi mod, la identificarea cifrelor R si S. intrucat, in acest caz, , avand valoarea superioara lui 5 (care, fiind la jumatatea intervalului reclama investigarea suplimentara a lui S), deci investigarea lui S devine superflua, rotunjirea in sus fiind obligatorie. Ceea ce ar mai fi de remarcat este ca pozitia cifrei la care se adauga unitatea de rotunjire, in raport cu virgula produsului initial , este diferita la cazurile a si b. In fine, cazul c se deruleaza in mod asemanator cu cazul b pana la, inclusiv, suboperatia de rotunjire, la care, in urma adaugarii unitatii la cea mai putin semnificativa cifra zecimala, la cea mai semnificativa rezulta carry - out. Acest fapt reclama o suboperatie suplimentara de normalizare, de aceasta data, prin deplasare la stanga (vezi si fig. 5.25). In mod evident, in ambele cazuri de normalizare, si pre - si postrotunjire se impune ajustarea, in mod corespunzator, a valorii exponentului rezultatului.
Urmarind modelul exemplelor date in zecimal, trecand in sistemul binar, precizam ca si in acest caz, produsul, care poate rezulta pe sau biti, trebuie rotunjit la biti, in vederea impachetarii corespunzatoare a rezultatului in conformitate cu standardul IEEE 754. Legat de numarul de biti ai produsului, mentionam ca acesta poate fi obtinut, initial, in varianta extinsa, pe biti, si ulterior, in final, la aceasta forma sa se aplice rotunjirea, dar, pe de alta parte, bitii suplimentari pot fi eliminati, in mod gradual, pe masura ce acestia sunt produsi [Parh00]. Astfel, ne putem imagina un dispozitiv de inmultire, spre exemplu, secvential, de tipul celor expuse in capitolul 3, care realizeaza produsul pe biti cu partea mai semnificativa intr-un registru A (pe biti) si partea mai putin semnificativa intr-un registru Q (pe biti), asa cum se prezinta produsul A (product A) in fig. 5.28. Intrucat produsul poate fi cuprins in
|
Fig. 5.28 |
gama valorica [1, 4), ambii biti "hidden", si , pot rezulta diferiti de 0, situatie in care lsb-ul produsului () excede capacitatea primului registru al rezultatului (A) si va trebui retinut in pozitia msb a celui de al doilea registru al rezultatului (Q). Cu alte cuvinte, pozitia bitului de gardare (guard bit) g este ocupata de , iar la dreapta lui , avem, in maniera deja parcursa, bitul round r si restul celor biti, mai putin semnificativi ai produsului (din registrul Q) joaca rolul de biti sticky s. Pe de alta parte, intrucat, este stiut, un dispozitiv de inmultire secvential genereaza bitii produsului in ordine incepand cu lsb si terminand cu msb, exista suficient timp ca sa fie operati OR cei mai putin semnificativi biti, astfel ca in final sa obtinem forma de produs B (product B) din fig. 5.28, care prezinta doar biti.
Indiferent de forma, A sau B, in care se obtine produsul, in vederea efectuarii suboperatiei de rotunjire, se impune identificarea bitilor R, S si bitul lsb al rezultatului care intervin, conform cu cele din fig. 5.9, la implementarea modului de rotunjire ales. In acest sens, este necesara distingerea intre cazurile a si b din fig. 5.28. Astfel, cazul a, cand , corespunde exemplelor b si c din fig. 5.27, carora le corespunde un produs extins pe biti, situatie in care, admitand pozitia msb-ului registrului A drept hidden, se impune, pentru normalizare, deplasarea la stanga cu o pozitie a significand-ului rezultat (aici apare o deosebire fata de exemplele b si c) din fig. 5.27, la care s-a considerat corect, drept hidden, pozitia cifrei celei mai semnificative a produselor, mod in care , iar si , unde prin s s-a notat bitul sticky cumulativ obtinut in urma operarii OR, la finalul inmultirii numerelor significand sau pe parcursul acesteia, a celor mai putin semnificativi biti ai produsului preliminar. La finele suboperatiei de rotunjire, este posibil sa se genereze carry - out, asemanator exemplului c din fig. 5.27, cand se impune o postnormalizare, dupa rotunjire, prin deplasarea cu o pozitie la dreapta a significand-ului rezultat si ajustarea, prin incrementare, a exponentului. Pe de alta parte, cazul b din fig. 5.28, cand , corespunde exemplului a din fig. 5.27, cand se obtine un produs extins pe biti si, in vederea obtinerii formei normalizate, se impune mutarea valorii cu o pozitie la stanga echivalenta cu deplasarea la dreapta cu un bit. Astfel, significand-ul produs rezulta de forma si, in acelasi timp, este necesara, in scop de compensare, incrementarea valorii exponentului, precum si modificarea - fata de cazul anterior - valorii bitilor care intervin la rotunjire. Astfel, si , iar bitul lsb al significand-ului produs devine Odata stabilite valorile bitilor implicati in rounding, se aplica sau nu rotunjirea in sus dependent de indeplinirea conditiilor specificate in tabelul din fig. 5.9.
S-ar mai impune o mentiune legata de semnalarea overflow-ului atunci cand rezultatul rotunjit este prea mare si nu poate fi reprezentat. O astfel de situatie apare, in single precision, cand exponentul nedeplasat depaseste valoarea 127. Cum este stiut ca exponentii deplasati, si , au valori tolerate in gama de intregi , conform cu cele din fig. 5.26, campul valoric tolerat pentru exponentul rezultatului produs este cuprins intre si . Cum cele doua numere pot fi reprezentate pe 9 biti, rezulta ca, utilizand un sumator cu 9 ranguri la evaluarea valorii exponentului rezultatului, putem detecta in mod facil starea de exceptie reprezentata de overflow [HePa03].
Referindu-ne in continuare, mai succint, la suboperatia de rotunjire care se impune pentru impartire [ObFl97], reamintim ca pentru cat rezulta valori in intervalul , ceea ce ar putea reclama deplasarea acestuia, in vederea normalizarii, cu un bit la stanga. Dar in acest caz intervin aceleasi probleme dezbatute pe larg la adunare (vezi si fig. 5.8b) care, in sinteza, reclama ca la cat sa fie concatenati, la dreapta cifrei lsb, inca doi biti care sa serveasca drept biti de guard (g), respectiv round (r). Fara a dezvolta acest aspect, mai mentionam ca, la acele solutii ale operatiei de impartire corespunzator carora se genereaza si un rest, forma finala a acestuia este utilizata pentru a deduce valoarea bitului sticky [Parh00]. Prin aceasta prisma, metodele de impartire bazate pe convergenta prezinta probleme in ceea ce priveste rotunjirea, probleme datorate tocmai faptului ca ele, este stiut, nu genereaza un rest.
In final, vom aborda unele aspecte legate de accelerarea operatiilor de inmultire si impartire. Focalizand inmultirea [QuTF04], plecam de la faptul ca suboperatia de inmultire a numerelor significand consuma un cuantum deosebit de consistent din timpul total revendicat de operatie. Apare drept fireasca ideea de a nu insera pasul de rotunjire, ca unul separat, dupa ce se termina inmultirea, ci de a ingloba circuistica de rotunjire in hardware-ul de inmultire, paralelizand suboperatiile. In acest sens, exista un aspect favorizant, deja mentionat, conform caruia bitii implicati in rotunjire sunt produsi timpuriu in cadrul ciclului de inmultire. Dar necesitatea normalizarii prin deplasare cu o pozitie la dreapta devine cunoscuta aproape - sau chiar la - sfarsitul inmultirii. Intrucat nu exista decat doua posibilitati, si anume de a exista sau nu postshift-are, dupa modelul parcurs in amanuntime la adunare, se genereaza, concomitent, doua versiuni ale produsului rotunjit, fiind selectata varianta corecta in pasul final. De asemenea, pot fi calculate in avans valorile de exponent ajustate pentru cele doua posibilitati, fiind selectata cea corespunzatoare, in momentul cand devine cunoscut daca este sau nu necesara postshift-area de normalizare, solutia din urma aplicabila atat la inmultire, cat si la impartire [Parh00]. In mod alternativ, la inmutire, rotunjirea poate fi substituita prin mai rapida trunchiere (truncation), dar, in mod compensativ, este necesara injectarea unor termeni corectivi pe parcursul operatiei [EvSe00].
In acelasi context al imbunatatirii performantelor celor doua operatii, inseram solutia conform careia se majoreaza capacitatea de trecere (throughput) si anume cea bazata pe conceptul de pipeline aritmetic [YPYH04], [PiBr02]. In acest sens, ambele operatii constau din mai multe stages sau suboperatii executate secvential si structura din fig. 5.25 permite inserarea unor dispozitive latch separand blocurile relevate in schema, astfel incat diferitele stages sa poata fi suprapuse dupa modelul prezentat in fig. 5.17, respectiv fig. 5.18. In plus, referindu-ne, in particular, la blocul de inmultire a numerelor significand, ideea de impartire in stages si de functionare suprapusa a acestora poate fi perceputa in interiorul blocului atunci cand este constituit dintr-o structura matriciala combinationala reprezentata de o inlantuire de sumatoare CSA (fig. 3.51).
Ca o observatie finala legata de implementarea unitatilor de inmultire si impartire in virgula flotanta, asa cum a reiesit si de la prezentarea dispozitivelor de inmultire si impartire a numerelor intregi, acestea pot avea in comun o parte consistenta a circuisticii [KaTa05]. Aceasta cu precadere atunci cand impartirea numerelor significand este realizata prin metodele bazate pe convergenta rapida, prezentate in paragraful 4.5, cand o cantitate redusa de hardware se impune pentru a transforma un dispozitiv de inmultire de virgula flotanta intr-o unitate de inmultire/impartire in virgula flotanta.
Bibliografie (se prezinta in ordinea alfabetica a primului autor)
[HePa03] John L. Hennessy, David A. Patterson: "Computer Architecture. A
Quantitive Aproach", Morgan Kaufmann Publishers, Inc., Third Edition, 2003
[Parh00] Behrooz Parhami:
"Computer Arithmetic. Algorithms and Hardware Design",
[EvSe00] Guy Even, peter - Michael Seidel: "A Comparison of Three Rounding
Algorithms for IEEE Floating - Point Multiplication", IEEE Trans. and Computers, vol. 49, no.7, July 2000, pp. 638 - 650.
[ErLa04] Milos D. Ercegovac, Tomas Lang: "Digital Arithmetic", Morgan Kaufmann Publishers, 2004
[Haye98] John P. Hayes: "Computer Architecture and Organisation", McGraw Hill, Third Edition, 1998
[Omon94] Amos R. Omondi: "Computer Arithmetic Systems. Algorithms,
Architecture and Implementations", C.A.R. Hoare Series Editor, 1994
[Stal99] William Stallings: "Computer Organisation and Architecture Designing for Performance", Prentice Hall, 1999
[Kuli02] Ulrich W. Kulisch: "Advanced Arithmetic for the Digital Computer. Design Of Arithmetic Units", Springer Verlag, 2002
[Kore02]
[ViLG06] Julio Villawa, Tomas Lang, Mario A. Gonzales: "Double - Residue
[ScST05] Eric M. Schwartz, Martin Schmookler, Son Dao Trong: "FPU Implementations with Denormalized Numbers", IEEE Trans. On Computers, vol. 54, No. 7, July 2005, pp. 825 - 836
[Wake00] John F. Wakerly: "Digital Design. Principles and Practices", Third Edition, Prentice Hall, 2000
[KaTa05] Marcelo E. Kaihara, Naofumi Takagi: "A Hardware Algorithm for Modular Multiplication/Division", IEEE Trans. On Computers, vol. 54, No. 1, January 2005, pp. 12 - 21
[SeEv04] Peter - Michael Seidel, Guy Even: "Delay - Optimized Implmentation of IEEE Floating - Point Addition", IEEE Trans. On Computers, vol. 53, No. 2, February 2004, pp. 97 - 113
[SeEv01] Peter - Michael Seidel, Guy Even: "On the Design of Fast IEEE Floating Point Adders", Proc. 15th IEEE Symposion on Computer Arithmetic (Arith 15), June 2001, pp. 184 - 194
[AbSi03] Khalid H. Abed, Raymond E. Siferd: "CMOS VLSI Implementation of a Low - Power Logarithmic Converter", IEEE Trans. on Computers, vol. 52, No. 11, November 2003, pp. 1421 - 1433
[ScST03] Eric M. Schwartz, Martin Schmookler, Son Dao Trong: "Hardware Implementations of Denormalized Numbers", Proc. 16th IEEE Symposion on Computer Arithmetic (Arith 16), June 2003, pp. 70 - 78
[LaAn03] Tomas Lang, Elisardo Antelo: "Radix -
[ObFl97] Stuart F. Oberman, Michael J. Flyn: "Design Issues in Division and Other Floating - Point Operations", IEEE Trans. on Computers, vol. 46, No. 2, February 1997, pp. 154 - 161
[QuTF04] Nhon T. Quach, Naofumi Takagi, Michael J. Flyn: "Systematic IEEE
Rounding Method for High - Speed Floating - Point Multipliers", IEEE Trans. on Very Large Scale Integration (VLSI) Systems, vol. 12, No. 5, May 2004, pp. 511 - 521
[Poll90] L. Howard Pollard: "Computer Design
and Architecture", Prentice Hall International,
[BrLa01] Javier D. Bruguera, Tomas Lang: "Using the Reverse - Carry Approach for Double Datapath Floating - Point Addition", Proc. 15th IEEE Symposion on Computer Arithmetic (Arith 15), June 2001, pp. 203 - 210
[YPYH04] Yong - Chul Yeong, Wov - Chan Park, Woong Yeong, Tack - Don Han, Moon - Key Lee: "A Cost - Effective Pipelined Divider with a Small Lookup Table", IEEE Trans. on Computers, vol. 53, No. 4, April 2004, pp. 489 - 495
[PiBr02] Jose - Alejandro Pineiro, Javier D. Bruguera: "High - Speed Double - Precision Computation of Reciprocal Division Square Root and Inverse Square Root", IEEE Transactions on Computers, vol. 51, no.12, December 2002, pp. 1377-1388
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |