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

Podobne dokumenty