Szybkie dzielenie Szybkie dzielenie
Transkrypt
Szybkie dzielenie Szybkie dzielenie
Szybkie dzielenie Metody szybkiego dzielenia dzielenie sekwencyjne – czas dzielenia proporcjonalny do liczby cyfr ilorazu ri = β ri −1 − qi D • uproszczenie wyznaczania cyfr ilorazu → iloraz w kodzie SD → q i ∈ {β − 1,..., 1 ,0,1,...β − 1} → warunek zbieŜności dzielenia: | ri | < | D | • jednoczesne wyznaczanie kilku cyfr ilorazu → dzielenie w bazie β k mnoŜenie przez odwrotność dzielnika X = Q ⋅ D + R → Q ≅ X ⋅ D −1 • wynikiem algorytmu jest wyłącznie iloraz normalizacja • przeskalowanie dzielnika i dzielnej, tak aby (D > 0): 2 −1 ≤ D < 1 , |X| < D ⇒ |Q| < 1 FDIV–1 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Szybkie algorytmy dzielenia w systemach dwójkowych w systemie SD równanie dzielenia nieodtwarzającego ma postać ( r0 = X ) ri = 2ri −1 − q i D , − D ≤ ri < D , qi ∈ {1 ,0,1} (i = 1, 2, ...) → w zakresie reszt − D ≤ 2ri −1 < D istnieje nadmiar reprezentacji ilorazu. D qi = 1 ri qi = 0 qi = 1 2 ri –1 –2D –D (0,0) D 2D –D Wykres dzielenia dla ilorazu w kodzie SD © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–2 Szybkie dzielenie Tworzenie ilorazu w reprezentacji SD nadmiar reprezentacji SD → elastyczna reguła wyboru cyfry ilorazu, 1 , gdy 2ri −1 < −C , q i = 0, gdy − C ≤ 2ri −1 < C , ( 0 ≤ C ≤ D ) 1, gdy 2r ≥C. i −1 D ri C qi = 1 –2 C –2D qi = 0 qi = 1 2C C –C (0,0) –D 2 ri –1 2D D –C –D Zmodyfikowany wykres dzielenia dla ilorazu w kodzie SD FDIV–3 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Algorytm SRT qi = 0 ⇒ zbędne czasochłonne dodawanie/odejmowania C = D ⇒ średnio co drugą cyfrą ilorazu jest 0 • porównanie wszystkich pozycji reszty częściowej C = 0 ⇒ wszystkie cyfry ilorazu są róŜne od 0 • czas porównania najkrótszy (1 cyfra) ⇒ dobór stałej C warunkuje czas porównania liczb w zapisie uzupełnieniowym algorytm SRT (Sweeney, Robertson, Tocher (‘58) • tylko C = 12 spełnia nierówność C ≤ D dla dowolnej wartości 12 ≤ D < 1 • 12 D ≤ C ≤ D ⇒ | ri −1 | < C ⇒| ri | < C ( − 2C + D < 2ri −1 − qi D < 2C − D ) • 12 ≤ D < 1 i C = 12 ⇒ porównanie na 2 bitach | ri |≤ 12 ⇔ 1,1 ≤ ri ≤ 0,1 problem gdy | X | ≥ 12 → porównanie na 3 bitach dopóki | ri | ≥ 12 (generowana seria cyfr 1 albo 1 ) → alternatywa – przeskalowanie dzielnej, tak aby 2|X | < |D | © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–4 Szybkie dzielenie Optymalizacja algorytmu SRT Przypuszczenie: czas dzielenia zaleŜy od stałej C i wartości dzielnika D Skalowanie nieoptymalnego dzielnika C = 12 ⇒ średnia liczba działań N = 2,167 n , ale gdy D≥ 3 4 17 28 <D< 3 4 to N = 13 n . i qi ≠ 0 ⇒ ri = 2ri −1 − qi ( 12 D) ⇒ qi qi +1 → 0qi D ≤ 17 i qi ≠ 0 ⇒ ri = 2ri −1 − qi (2 D) ⇒ qi qi +1 → 0qi 28 (01 zamiast 1x lub 0 1 zamiast 1 x ) • uŜycie D oraz D daje stopień redukcji około 3,7. 3 2 3 4 Wybór optymalnej wartości stałej C • eksperyment → optymalną wartością jest 65 C ≤ D ≤ 32 C , ale stała C moŜe mieć wiele bitów → długie porównanie → stała C określona stosownie do wartości D z dokładnością do 4 bitów 1 D ≥ 0,1000 ( /2) C 0,0110 (3/8) 0,1001 (9/16) 0,1010 (5/8) 0,0111 (7/16) 0,1000 (1/2) 0,1100 (3/4) 0,1010 (5/8) 0,1111 (15/16) 0,1100 (3/4) FDIV–5 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Optymalizacja algorytmu SRT – przykład 29 D = 0,111012 = 32 > 34 oraz X = 0,001100 2 = 83 r 0=X 2r0 −D + r1 2r1 2r2 +D/2 r3 2r3 2r4 +D r5 + 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 0 0 1 1 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 1 1 ≥ 0,1 więc q1 = 1 q2 = 0 (≤ 1,1 więc q3 = 1 lecz D ≥ 3/4) zatem zmiana q3 = 0 oraz q4 = 1 ≤1,1 więc q5 = 1 końcowa reszta = 7/32 ×2–5 Q = 0,100 1 12 = 13 (oryginalny algorytm SRT daje Q = 0,10 1 1 12 = 32 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 13 32 ) FDIV–6 Szybkie dzielenie ZbieŜność dzielenia w kodzie SD Wyznaczenie cyfry ilorazu, przy warunku ri < k D (k ≤ 1), jest moŜliwe gdy − kD ≤ ri = β ri −1 − qi D < kD, ⇒ 1 2 ≤ k ≤1 qi − k ≤ β ( ri −1 / D ) < qi + k i wówczas NiezaleŜnie od znaku reszty, nierówność ta ma zawsze rozwiązanie, gdy qi ∈ {α ,..., 1 ,0,1,...,α } 1 _ q=3 _ q= 2 _ q= 1 α ≥ k ( β − 1) ri D–1 k q= 0 q=1 q= 2 0 1 2 q =3 β ri–1 D–1 4k -4 -3 -2 -1 4 3 −k −1 Znormalizowany wykres dzielenia w bazie β = 4 (zakres reszt dla k = 23 ) FDIV–7 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Reguły wytwarzania cyfr ilorazu w systemie SD Wyznaczenie kolejnej cyfry ilorazu jest moŜliwe, gdy suma rzutów prostych standaryzowanych ρi = β ρ i −1 − qi ( ρ i = ri D −1 ) na oś β ρ i −1 tworzy zbiór ciągły ρ i −1 (q = j , ρ i = k ) ≥ ρ i −1 (q = j + 1, ρ i = −k ) ⇒ k ≥ 12 1 ρi q=0 q=1 q=2 q=3 q=4 q=5 q=6 q=7 k 1 2 0 − −k −1 βρi -1 8k 0 1 2 3 4 5 6 7 8 1 2 Znormalizowany wykres dzielenia w bazie β = 2 3 ( β ρ i −1 ≥ 0 ). Proste ρ i = kβ ρ i −1 odwzorowują skalowanie poprzedniej reszty • większe k → większy margines wyboru cyfry (mniej cyfr porównywać) • większe α ≥ k ( β − 1) → większa złoŜoność struktury logicznej © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–8 Szybkie dzielenie Standaryzowane równanie dzielenia – wykres P-D β ri −1 = ri + q i D, i = 1,2,... qi zaleŜy tylko od P = β ri −1 oraz ri = γ D ( | γ |≤ k ), więc P = (γ + q ) D, | γ |≤ k , q ∈ {α ,..., 1 ,0,1,...α }, α ≥ k ( β − 1) (q = j ) ⇒ Pj:min = (− k + j ) D ≤ (γ + j ) D ≤ ( k + j ) D = Pj :max Pj +1:max = ( j+1+ k )D P Pj :max = ( j + k )D ∆P Pj +1:min = (j +1−k ) D ∆D Pj :min = (j − k ) D D 0 Dmax D min FDIV–9 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Wykres P-D –reguła wyboru wartości cyfry ilorazu • wykres symetryczny względem osi układu współrzędnych ( P × D ) • dzielnik znormalizowany β n −1 ≤ Dmin ≤ D ≤ Dmax ≤ β n (skalowanie) • warunek istnienia rozwiązania (spójności dziedziny zbioru funkcji P(D;q)) Pj +1:min = ( j + 1 − k ) D ≤ ( j + k ) D = Pj:max • obszary Pq:min = (q − k ) D ≤ P ≤ Pq:max = (q + k ) D nakładają się → reguła wyboru wartości q, w obszarach wspólnych – linia graniczna ( j + 1 − k ) D max ≤ ( j + k ) D min ⇒ linią graniczną jest P = c ( j + 1 − k ) D max > ( j + k ) D min ⇒ linia graniczna jest schodkowa niezbędna dokładność porównania: odległość w poziomie (∆D) i w pionie (∆P) linii P j:max oraz P j +1:min ∆D = P P P( 2k − 1) − = , j + 1 − k j + k ( j + 1 − k )( j + k ) ∆P = Pj:max(D) – Pj+1:min(D) = (2k – 1)D © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–10 Szybkie dzielenie Wykres P-D – optymalizacja porównania Minimum ∆D oraz ∆P przy D = Dmin oraz j = α −1 (α ≥ k ( β − 1) : 2k − 1 2k − 1 ∆Dmin = Dmin (α − 1 + k ) = Dmin (α − k )(α − 1 + k ) α −k ∆Pmin= (2k – 1) Dmin → liczba porównywanych bitów części ułamkowej reszty εP i dzielnika εD ε P = − log 2 ∆Pmin ε D = − log 2 ∆Dmin łączna liczba bitów potrzebnych do porównania zaleŜy od Dmax i wynosi N D = ε D + log 2 D max oraz (z bitem znaku reszty), poniewaŜ kβ ≤ (k + α ) ≤ β i 12 ≤ k ≤ 1 , N P = 1 + ε P + log 2 (k + α ) D max = 1 + ε P + log 2 β + log 2 D max FDIV–11 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Wykres P-D – poprawność wyboru • punkt (P,D) w rzeczywistości reprezentuje pole [ P, P + δ P 〉 × [ D, D + δ D 〉 → niezbędna weryfikacja wartości εD = log2 δD oraz εP = log2 δP margines bezpieczeństwa Pj +1:H = ( j + 1 − k )( D + δ D ) • linia graniczna powinna mieścić się między prostymi Pj +1:H oraz P j:max Pj:max = ( j+ k) D P δD δP P j +1:H = ( j +1− k) ( D + δD ) ∆P Pj +1:min= ( j +1− k) D ∆D D 0 Dmin Dmax Graficzne wyznaczenie dokładności badania dzielnika i reszty częściowej © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–12 Szybkie dzielenie Dzielenie w bazie 22 (α = 2, k=2/3) ∆Dmin = Dmin (2k − 1)(α − k ) =1 = 14 ⇒ ε D = 2 ∧ N D = 4 ∆Pmin = Dmin (2k − 1) = 13 ⇒ ε P = 2 ∧ N P = 7 11,10 P 5 3D D= 1,001 11,00 q =2 4 3D 10,10 10,00 q =1 01,10 2 3D 01,00 1 3D 00,10 q =0 D 00,00 Dmin = 01,00 01,01 01,10 01,11 10,00 = Dmax FDIV–13 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Dzielenie w bazie 22 (α = 2, k=2/3) – przykład D = 01,0010 (9/8) – prosta pionowa na wykresie P= 4ri X = 0,01111110 (63/128), D = 01,0010 (9/8)∈[1,2) (−D = 10,1110) r0 = X P= 4r0 r1 P= 4r1 r2 000,011111100 001,111110000 –2D 1 0 1 , 1 1 0 0 0 0 0 0 0 111,101110000 110,111000000 +D 001,001000000 000,000000000 ≥ 01,11 q1 = 10 < 11,10 q2 = 0 1 reszta = 0 W wyniku dzielenia bez reszty iloraz Q = 0,100 1 = 0,0111 (7/16). © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–14 Szybkie dzielenie Matrycowe układy dzielące dzielenie odtwarzające • w wierszu obliczana reszta i zaleŜnie od jej znaku cyfra ilorazu • nie ma potrzeby odtwarzania reszty częściowej (multiplekser reszt) dzielenie nieodtwarzające • w komórce matrycy wybór dzielnika lub jego uzupełnienia • moŜliwość wykonywania dzielenia na operandach o dowolnym znaku • moŜliwe wytworzenie niepoprawnej reszty końcowej (korekcja) a) di rwe b) rwe +/− +/− cwe cwy di FS R cwy cwe FA CSR rwy di CAS rwy di Komórki matryc dzielenia odtwarzającego (CSR) i nieodtwarzającego (CAS) FDIV–15 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Matryca dzieląca w kodzie U2 • odejmowanie /dodawanie z propagacją przeniesień skrośnych • czas dzielenia w matrycy zawierającej n wierszy jest rzędu n 2 d0 x0 CAS d1 x1 d2 x2 d3 x3 CAS CAS CAS x4 CAS CAS CAS CAS x5 CAS CAS CAS CAS x6 CAS CAS CAS CAS q0 q1 q q 2 3 r0 r1 r2 r3 Układ matrycowy realizujący dzielenie nieodtwarzające liczb w kodzie U2 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–16 Szybkie dzielenie Matryca dzieląca w kodzie U2 – działanie i szybkość działanie • wyjścia rwy skrajnych z lewej układów CAS są nieuŜywane (wytwarzają kod znaku reszty rwy = 1 – cwy, cwy = qi) • w układzie jest wykonywane dzielenie (X/2)/D → indeksowanie cyfr ilorazu jest przesunięte o 1 (obliczana wartość Q/2, na pozycji 0 – znak ilorazu) • propagacja przeniesienia przez wszystkie komórki w wierszu matrycy przyśpieszanie dzielenia nieodtwarzającego w matrycy • wybór cyfry ilorazu zaleŜy tylko od znaku poprzedniej reszty częściowej → uŜycie generatora CLG bez obliczania dokładnej wartości reszty • pozostałe n bitów reszty mogą być obliczone w sumatorach CSA → redukcja równocześnie z wyznaczaniem kolejnej reszty częściowej • komórka musi wytwarzać sygnały generacji i propagacji przeniesienia → czas dzielenia proporcjonalny do n log n. FDIV–17 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Jednoczesne wyznaczanie reszty częściowej i cyfry ilorazu • do wyznaczenia kolejnej cyfry ilorazu nie jest potrzebna dokładna wartość poprzedniej reszty częściowej ri–1 lecz jej przybliŜenie ri–1:H. do najbardziej znaczących bitów βri–2:H qi–1DN DN Sumator reszt przybliŜonych ri–1:H Matryca PLA qi → kolejna cyfra ilorazu moŜe być wyznaczona zanim zostanie obliczona dokładna wartość poprzedniej reszty częściowej. • dokładność reszt ri–1:H musi być lepsza niŜ to wynika wykresu P-D, bo jeden z argumentów jest β-tą wielokrotnością reszty częściowej © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–18 Szybkie dzielenie Szybki algorytm pierwiastkowania (w systemie SD) • nadmiar reprezentacji SD pozwala zmniejszyć dokładność badania reszt 1 4 ≤ X <1 ⇒ 1 2 ≤ Q < 1 ⇒ kolejne reszty częściowe ri −1 (i ≥ 2) spełnią warunek − 2(Qi −1 − 2 −i ) ≤ ri −1 ≤ 2(Qi −1 + 2 −i ) − (Qi −1 − 2 −i −1 ) ≤ ri −1 ≤ (Qi −1 + 2 −i −1 ) ⇒ reszta ri = 2ri −1 jest poprawna ⇒ qi = 0, zatem 1 , gdy ri −1 < −Qi −1 + 2− i −1 , qi = 0, gdy − Qi −1 + 2− i −1 ≤ ri −1 < Qi −1 + 2− i −1 , 1, gdy ri −1 ≥ Qi −1 + 2− i −1. a poniewaŜ 1 2 < (Qi −1 ± 2 −i −1 ) < 1, więc tak jak w algorytmie SRT moŜna przyjąć 1 , qi = 0, 1, gdy gdy gdy − 2 ≤ ri −1 < − 12 , − 12 ≤ ri −1 < 12 , 1 ≤ ri −1 < 2. 2 FDIV–19 © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 Szybkie dzielenie Optymalizacja algorytmu SRT – przykład 2 63 D = 0,10012 = 169 < 17 oraz X = 0,001111112 = 256 28 0, 0 0 1 1 1 1 1 1 r =X 2r 0, 0 1 1 1 1 1 1 0 < 0,1 więc q = 0 2r 0 0, 1 1 1 1 1 1 (≥ 0,1 więc q = 1 lecz D < 17/28 zatem zmiana −2D + 1 0, 1 1 1 1 1, 1 1 0 1 1 1 0 0 q = 1, q = 0 r 2r 1, 1 0 1 1 1 0 0 0 q = 0 2r 1, 0 1 1 1 0 0 0 0 ≤ 1,1 więc q = 1 +D + 0, 1 0 0 1 0, 0 0 0 0 0 0 0 0 reszta = 0 r 0 0 1 1 2 2 1 2 3 2 3 4 3 Otrzymaliśmy w ten sposób iloraz Q = 0,100 12 = 167 , który jest jednocześnie reprezentacją minimalną w kodzie SD zamiast jak w metodzie oryginalnej Q = 0,0111 2 = 167 . © Janusz Biernat, Szybkie dzielenie, 17 stycznia 2003 FDIV–20