]> mj.ucw.cz Git - ads2.git/blob - 5-hradla/5-hradla.tex
Hradla: Uklid maker
[ads2.git] / 5-hradla / 5-hradla.tex
1 \input ../lecnotes.tex
2
3 \prednaska{5}{Hradlové sítì}{}
4
5 \def\NOT{{\csc not}}
6 \def\AND{{\csc and}}
7 \def\OR{{\csc or}}
8 \def\XOR{{\csc xor}}
9 \def\and{\mathbin{\&}}
10
11 ®ivot nám pøiná¹í stále vìt¹í problémy, které obvykle vy¾adují stále více
12 výpoèetního výkonu. Rychlost poèítaèù sice posledních pár desetiletí stále
13 roste exponenciálnì, ale tento rùst se urèitì nìkdy zastaví (napøíklad proto,
14 ¾e vesmír je koneèný) a podle v¹eho u¾ k~tomuto bodu jsme docela blízko
15 (nará¾íme na nejrùznìj¹í fyzikální limity, napøíklad není jasné, jak vyrábìt
16 transistory men¹í ne¾ jeden atom).
17
18 Jak si tedy s~obrovskými daty poradíme? Jedna z~lákavých mo¾ností je prostì
19 do~výpoètu zapøáhnout více ne¾ jeden procesor. Ostatnì, vícejádrové procesory,
20 které dneska najdeme ve~svých stolních poèítaèích, nejsou nic jiného ne¾
21 víceprocesorový systém na jednom èipu.
22
23 Nabízí se tedy obtí¾nou úlohu rozdìlit na nìkolik èástí, nechat ka¾dý
24 procesor (èi jádro) poèítat jednu z~èástí a nakonec jejich výsledky spojit
25 dohromady. To se snadno øekne, ale s~výjimkou triviálních úloh u¾ obtí¾nìji
26 provede.
27
28 Pojïme se podívat na nìkolik zajímavých paralelních algoritmù. Abychom se
29 nemuseli zabývat detaily hardwaru konkrétního víceprocesorového poèítaèe,
30 zavedeme si pomìrnì abstraktní výpoèetní model, toti¾ hradlové sítì. Tento
31 model je daleko paralelnìj¹í ne¾ skuteèný poèítaè, ale pøesto se techniky,
32 které si uká¾eme, dají snadno vyu¾ít i prakticky. Konec koncù sama vnitøní
33 architektura procesorù se na¹emu modelu velmi podobá.
34
35 \h{Hradlové sítì}
36
37 Hradlové sítì jsou tvoøeny navzájem propojenými {\I hradly.} Ka¾dé hradlo pøitom
38 poèítá nìjakou (obecnì libovolnou) funkci $\Sigma^k \rightarrow \Sigma$, kde~$\Sigma$
39 je koneèná abeceda (stejná pro celou sí») a~$k$ pøirozené èíslo (poèet vstupù hradla,
40 jinak té¾ jeho {\I arita}).
41
42 \s{Pøíklad:} Èasto studujeme hradla {\I booleovská} (pracující nad abecedou $\Sigma=\{0,1\}$).
43 Ta poèítají jednotlivé logické funkce, mezi nejbì¾nìj¹í patøí:
44
45 \itemize\ibull
46 \:nulární: to jsou konstanty ($\hbox{\csc false}=0$, $\hbox{\csc true}=1$),
47 \:unární: identita a negace (\NOT,~$\lnot$),
48 \:binární: logický souèin (\AND,~$\and$), souèet (\OR,~$\lor$), \dots
49 \endlist
50
51 Propojením hradel pak vznikne {\I hradlová sí».} Ne¾ vyøkneme formální definici,
52 pojïme se podívat na pøíklad jedné takové sítì:
53
54 \figure{hradlova_sit.eps}{Hradlová sí» -- tøívstupová verze funkce {\I majorita}}{3in}
55
56 Na¹e sí» má tøi vstupy, vnitøní booleovská hradla a jeden výstup. Na výstupu
57 je pøitom jednièka právì tehdy, jsou-li jednièky pøítomny na alespoò dvou
58 vstupech. Jinými slovy vrací {\I majoritu} ze~vstupù, tedy hodnotu, která
59 pøeva¾uje.
60
61 Obecnì ka¾dá hradlová sí» má nìjaké vstupy, hradla a výstupy.
62 Ka¾dý vstup hradla je pøitom pøipojen buïto na~nìkterý ze~vstupù sítì
63 nebo na~výstup jiného hradla. Výstupy hradel mohou být propojeny na~vstupy
64 dal¹ích hradel (mohou se vìtvit), nebo na výstupy sítì. Pøitom máme zakázáno
65 vytváøet cykly.
66
67 Nyní toté¾ formálnìji:
68
69 \s{Definice:} {\I Hradlová sí»} je urèena:
70 \itemize\ibull
71 \:{\I abecedou} $\Sigma$, co¾ je nìjaká koneèná mno¾ina symbolù;
72 \:po dvou disjunktními koneènými mno¾inami \hfil\break
73   $I$~({\I vstupy}), $O$~({\I výstupy}) a~$H$~({\I hradla});
74 \:acyklickým orientovaným multigrafem~$(V,E)$, kde~$V = I \cup O \cup H$;\foot{Proè
75   potøebujeme multigraf? Napøíklad chceme-li výstup jednoho hradla pøipojit souèasnì
76   na více rùzných vstupù druhého hradla.}
77 \:zobrazením~$F$, které ka¾dému hradlu $h\in H$ pøiøadí nìjakou funkci~$F(h):
78   \Sigma^{a(h)} \rightarrow \Sigma$, co¾ je funkce, kterou toto hradlo vykonává.
79   Èíslu $a(h)$ øíkáme {\I arita} hradla~$h$;
80 \:zobrazením~$z: E \rightarrow {\bb N}$, je¾ o~hranách vedoucích do hradel øíká,
81   kolikátému argumentu funkce odpovídají;\foot{Na hranách vedoucích do výstupù
82   necháváme hodnotu této funkce nevyu¾itu.}
83 \endlist
84
85 \>Pøitom jsou splnìny následující podmínky:
86
87 \itemize\ibull
88 \:$\forall i \in I: \deg^+(i)=0$ {\sl (do~vstupù nic nevede);}
89 \:$\forall o \in O: \deg^+(o)=1, \deg^-(o)=0$ {\sl (z~výstupù nic nevede a do~ka¾dého vede právì jedna hrana);}
90 \:$\forall h \in H: \deg^+(v)=a(v)$ {\sl (do~ka¾dého hradla vede tolik hran, kolik je jeho arita);}
91 \:$\forall h \in H~\forall j \in \{1,\ldots,a(h)\}$ existuje právì jedna hrana~$e$ taková, ¾e $e$~konèí v~$h$ a~$z(e)=j$
92   {\sl (v¹echny vstupy hradel jsou zapojeny).}
93 \endlist
94
95 \s{Poznámka:} Nìkdy se hradlovým sítím také øíká {\I kombinaèní obvody} a pokud pracují
96 nad abecedou $\Sigma = \{0,1\}$, pak {\I booleovské obvody}.
97
98 \s{Definice:} {\I Výpoèet sítì} postupnì pøiøazuje hodnoty z~abecedy~$\Sigma$
99 vrcholùm grafu. Výpoèet probíhá po~{\I taktech.} V~nultém taktu jsou definovány
100 pouze hodnoty na~vstupech sítì a v~hradlech arity~0 (konstanty). V~ka¾dém
101 dal¹ím taktu pak ohodnotíme vrcholy, jejich¾ v¹echny vstupní hrany vedou
102 z~vrcholù s~ji¾ definovanou hodnotou.
103
104 Hodnotu hradla~$h$ pøitom spoèteme funkcí~$F(h)$ z~hodnot na jeho vstupech
105 uspoøádaných podle funkce~$z(h)$. Výstup sítì pouze zkopíruje hodnotu, která do
106 nìj po~hranì pøi¹la.
107
108 Jakmile budou po~nìjakém poètu taktù definované hodnoty v¹ech výstupù, výpoèet
109 se zastaví a~sí» vydá výsledek -- ohodnocení výstupù.
110
111 Podle prùbìhu výpoètu mù¾eme vrcholy sítì rozdìlit do vrstev:
112
113 \s{Definice:} {\I $i$-tá vrstva $S_i$} obsahuje právì takové vrcholy~$v$,
114 pro~které nejdel¹í z~cest z~libovolného vrcholu se~vstupním stupnìm~0
115 do~$v$ má délku rovnou právì~$i$.
116
117 \figure{vypocet_site.eps}{Prùbìh výpoètu a rozdìlení sítì na vrstvy}{6cm}
118
119 \s{Pár pozorování} o~prùbìhu výpoètu:
120
121 \itemize\ibull
122 \:V~$i$-té vrstvì jsou tedy právì ty vrcholy, které poprvé ohodnotíme v~$i$-tém
123   taktu výpoètu.
124 \:Jeliko¾ sí» je acyklická, tak platí, ¾e jakmile vrchol ohodnotíme, u¾ se
125   jeho ohodnocení nikdy nemù¾e zmìnit.
126 \:Kdy¾ se vydáme z~libovolného vrcholu proti smìru hran, po~koneènì mnoha
127   krocích dojdeme do~vrcholu s~nulovým vstupním stupnìm (vstupu sítì nebo
128   konstantního hradla). Proto ka¾dý vrchol le¾í v~nìjaké vrstvì.
129 \:Vrstvy jsou disjunktní, tak¾e poèet neprázdných vrstev je nutnì koneèný.
130   V~kombinaci s~pøedchozím pozorováním dostaneme, ¾e výpoèet sítì se v¾dy zastaví.
131 \:Navíc poslední neprázdná vrstva je právì ta, kde se výpoèet zastaví -- z~ka¾dého
132   dal¹ího vrcholu by toti¾ bylo mo¾né po~hranách dojít do vrcholu s~výstupním
133   stupnìm~0 a jediné takové vrcholy jsou výstupy sítì. Ty by tedy musely také
134   le¾et v~nìkteré z~následujících vrstev, co¾ ov¹em není mo¾né, nebo» výpoèet
135   se u¾ zastavil.
136 \endlist
137
138 \>To nás motivuje k~následující definici:
139
140 \s{Definice:} {\I Èasovou slo¾itost} sítì definujeme jako poèet jejích neprázdných
141 vrstev. Podobnì {\I prostorovou slo¾itost} urèíme jako poèet hradel v~síti.
142
143 \s{Poznámka o~aritách:}
144 Kdybychom pøipustili hradla s~libovolnì vysokým poètem vstupù, mohli bychom
145 libovolný problém se vstupem délky~$n$ a výstupem délky~$\ell$ vyøe¹it v~jedné
146 vrstvì pomocí $\ell$~kusù $n$-vstupových hradel. Ka¾dému bychom prostì
147 pøiøadili funkci, která poèítá pøíslu¹ný bit výsledku ze~v¹ech bitù vstupu.
148
149 To v¹ak není ani realistické, ani pìkné. Jak z~toho ven? Pøijmeme prostì
150 omezení, ¾e~arity v¹ech hradel budou omezeny nìjakou pevnou konstantou,
151 tøeba dvojkou. Budeme tedy pou¾ívat výhradnì nulární, unární a binární hradla.
152
153 Poznamenejme je¹tì, ¾e realistický model (by» s~trochu jinými vlastnostmi)
154 by vznikl také tehdy, kdybychom místo arity omezily typy funkcí, øeknìme
155 na \AND, \OR{} a \NOT.
156
157 \s{Poznámka o~uniformitì:}
158 Dodejme, ¾e od~bì¾ných výpoèetním modelùm, jako je tøeba RAM, se hradlové
159 sítì li¹í jednou podstatnou vlastností -- ka¾dá sí» zpracovává výhradnì vstupy
160 jedné konkrétní velikosti. Chceme tedy najít nìjaký obecný pøedpis, který
161 pro ka¾dou velikost vstupu sestrojí pøíslu¹nou sí». Takovým výpoèetním modelùm
162 se øíká {\I neuniformní.}
163
164 A~co myslíme oním pøedpisem pro sestrojení sítì? Bude to pro nás prostì
165 nìjaký algoritmus (klasický, neparalelní) bì¾ící v~polynomiálním èase.
166 (Kdybychom dovolili i pomalej¹í algoritmy, mohli bychom bìhem konstrukce
167 provádìt nìjaký nároèný pøedvýpoèet a jeho výsledek zabudovat do struktury
168 sítì.)
169
170 \h{Hledá se jednièka}
171
172 Abychom si nový výpoèetní model osahali, zkusme nejprve sestrojit obvod,
173 který zjistí, zda se mezi jeho~$n$ vstupy vyskytuje alespoò jedna jednièka.
174 Jinými slovy vypoèítat $n$-vstupovou funkci \OR.
175
176 \>{\I První øe¹ení:} zapojíme hradla za~sebe (sériovì). Èasová i prostorová
177 slo¾itost èiní $\Theta(n)$. Zde ov¹em vùbec nevyu¾íváme toho, ¾e by mohlo poèítat více
178 hradel souèasnì.
179
180 \>{\I Druhé øe¹ení:} Hradla budeme spojovat do~dvojic, pak výsledky z~tìchto dvojic opìt
181 do~dvojic a tak dále. Díky paralelnímu zapojení dosáhneme èasové slo¾itosti $\Theta(\log n)$,
182 prostorová slo¾itost zùstane lineární.
183
184 \twofigures{hloupy_or.eps}{Sériové øe¹ení}{1in}{chytry_or.eps}{Paralelní øe¹ení}{3in}
185
186 \h{Sèítání binárních èísel}
187
188 Zajímavìj¹í úlohou, její¾ paralelizace u¾ nebude tak triviální, je obyèejné
189 sèítání dvojkových èísel. Mìjme dvì èísla $x$ a $y$ zapsané ve~dvojkové soustavì. Jejich èíslice oznaème
190 $x_{n-1}\ldots x_0$ a $y_{n-1}\ldots y_0$, kde $i$-tý øád má váhu $2^i$.
191
192 K~seètení se~ihned nabízí pou¾ít starý dobrý \uv{¹kolní algoritmus sèítání pod sebou}, který
193 funguje ve~dvojkové soustavì stejnì dobøe jako v~desítkové. Sèítáme èísla zprava doleva,
194 v¾dy seèteme~$x_i$ s~$y_i$ a~pøièteme pøenos z~ni¾¹ího øádu. Tím dostaneme jednu èíslici
195 výsledku a~pøenos do~vy¹¹ího øádu. Formálnì bychom to mohli zapsat tøeba takto:
196 $$
197 z_i=x_i \oplus y_i \oplus c_i,
198 $$
199 kde $z_i$ je $i$-tá èíslice souètu, $\oplus$ znaèí operaci \XOR{} (souèet modulo~2) a~$c_i$ je {\I pøenos}
200 z~$(i-1)$-ního øádu do~$i$-tého. Pøenos pøitom nastane tehdy, pokud se~nám potkají
201 dvì jednièky pod~sebou, nebo kdy¾ se~vyskytne alespoò jedna jednièka a~k~tomu
202 pøenos z~ni¾¹ího øádu. To je tehdy, kdy¾ mezi tøemi xorovanými èíslicemi jsou alespoò
203 dvì jednièky -- k~tomu se nám hodí ji¾ známý obvod pro majoritu:
204 $$
205 \eqalign{
206 c_{0} &= 0, \cr
207 c_{i+1} &= (x_i~\&~y_i)\lor(x_i~\&~c_i)\lor(y_i~\&~c_i).\cr
208 }
209 $$
210
211 O~tomto pøedpisu snadno doká¾eme, ¾e funguje (zkuste si to), nicménì pokud podle
212 nìj postavíme hradlovou sí», bude pomìrnì pomalá. Sí» si mù¾eme pøedstavit tak,
213 ¾e je slo¾ena z~nìjakých podsítí (\uv{krabièek}), které budou mít na~vstupu $x_i$,
214 $y_i$ a~$c_i$ a jejich výstupem bude $z_i$ a~$c_{i+1}$:
215
216 \figure{hloupe_scitani.eps}{Sèítání ¹kolním algoritmem}{1.5in}
217
218 Ka¾dá krabièka má sice uvnitø konstantní hloubku, ale její výstupy závisí na pøenosu
219 vypoèítaném pøedcházející krabièkou. Jednotlivé krabièky tedy musí urèitì le¾et
220 v~rùzných vrstvách sítì. Celkovì má tedy sí» $\Theta(n)$ hladin a také $\Theta(n)$
221 hradel. Oproti sekvenènímu algoritmu jsme si tedy vùbec nepomohli.
222
223 \h{Pøenosy v~blocích}
224
225 Jak sèítání zrychlit? To, co nás pøi sèítání brzdí, jsou evidentnì pøenosy mezi
226 jednotlivými øády. Kdybychom je dokázali spoèítat rychleji, máme vyhráno -- souèet
227 u¾ získáme jednoduchým \XOR{}ováním, které zvládneme paralelnì v~èase $\Theta(1)$.
228 Uva¾ujme tedy nad zpùsobem, jak pøenosy spoèítat paralelnì.
229
230 Podívejme se na~libovolný {\I blok} v~na¹em souètu. Tak budeme øíkat èíslùm
231 $x_j\ldots x_i$ a $y_j\ldots y_i$ v~nìjakém intervalu indexù $\left<i,j\right>$. Pøenos $c_{j+1}$ vystupující z~tohoto bloku závisí mimo hodnot sèítancù u¾ pouze na~pøenosu $c_{i}$, který do bloku vstupuje.
232
233 \figure{blok_scitani.eps}{Blok souètu}{3in}
234
235 Pro konkrétní sèítance se tedy mù¾eme na blok dívat jako na nìjakou funkci,
236 která dostane jednobitový vstup (pøenos zespoda) a vydá jednobitový výstup (pøenos
237 nahoru). To je nám milé, nebo» takové funkce existují pouze ètyøi:
238 $$\vbox{\halign{$f(x) = #$\hfil &\qquad # \hfil\cr
239 0&konstantní {\bo 0}, blok {\I pohlcuje} pøenos \cr
240 1&konstantní {\bo 1}, blok {\I vytváøí} pøenos \cr
241 x&identita (znaèíme {\tt <}), blok {\I kopíruje} pøenos \cr
242 \neg{x}&negace, uká¾eme, ¾e nenastane \cr
243 }}$$
244 Této funkci budeme øíkat {\I chování} pøíslu¹ného bloku.
245
246 {\I Jednobitové bloky} se pøitom chovají velice jednodu¹e:
247
248 \figure{bloky_1bit.eps}{Tabulka triviálních blokù}{1.1in}
249
250 Blok prvního druhu v¾dy pøedává nulový pøenos, a» u¾ do~nìj vstoupí jakýkoliv.
251 Poslední blok naopak sám o~sobì pøenos vytváøí, a» dostane cokoliv.
252 Oba bloky prostøední se chovají tak, ¾e samy o~sobì ¾ádný pøenos nevytvoøí,
253 ale~pokud do~nich nìjaký pøijde, tak~také odejde.
254
255 {\I Vìt¹í bloky} mù¾eme rozdìlit na èásti a podle jejich chování urèit,
256 jak se chová celý blok. Mìjme blok~$B$ slo¾ený z~men¹ích podblokù~$H$ (horní)
257 a~$D$ (dolní), jejich¾ chování u¾ známe. Z~toho mù¾eme odvodit, jak se chová celý blok:
258
259 \figure{tabulka_skladani_bloku.eps}{Skládání chování blokù}{1.3in}
260
261 Pokud vy¹¹í blok pøenos pohlcuje, pak a»~se u¾~ni¾¹í blok chová jakkoli, slo¾ení
262 obou blokù musí v¾dy pohlcovat. V~prvním øádku tabulky jsou tudí¾ nuly. Analogicky,
263 pokud vy¹¹í blok generuje pøenos, tak~ten ni¾¹í na~tom nic nezmìní. V~druhém
264 øádku tabulky jsou tedy samé jednièky. Zajímavìj¹í pøípad nastává, pokud vy¹¹í blok
265 kopíruje -- tehdy zále¾í èistì na~chování ni¾¹ího bloku.
266
267 V¹imnìme si, ¾e~skládání chování blokù je vlastnì úplnì obyèejné skládání
268 funkcí. Nyní bychom mohli prohlásit, ¾e~budeme poèítat nad~tøíprvkovou abecedou,
269 a~¾e~celou tabulku doká¾eme spoèítat jedním jediným hradlem. Pojïme si v¹ak
270 rozmyslet, jak~bychom takovouto vìc popsali èistì binárnì. Jak tedy tyto tøi stavy
271 popisovat pouze nìkolika bity?
272
273 Evidentnì nám k tomuto binárnímu zakódování tøí stavù budou staèit bity dva.
274 Oznaème si je jako $p$ a $q$. Tato dvojice mù¾e nabývat hned ètyø mo¾ných hodnot,
275 kterým pøiøadíme tøi mo¾ná chování bloku. Toto kódování mù¾eme zvolit zcela
276 libovolnì, ale pokud si ho zvolíme ¹ikovnì, u¹etøíme si dále práci pøi kompozici.
277 Zvolme si tedy kódování takto:
278 $$
279   (1,*) = \hbox{\tt <} \qquad
280   (0,0) = \hbox{\bo 0} \qquad
281   (0,1) = \hbox{\bo 1}.
282 $$
283 Tomu, ¾e blok kopíruje, odpovídá dvojice $p = 1$, $q = \<cokoliv.>$ V~ostatních
284 pøípadech bude~$p$ nulové a~$q$ nám bude øíkat, co je na~výstupu pøíslu¹ného bloku.
285 Jinými slovy $p = 0$ znamená, ¾e funkce je konstanta, pøièem¾ $q$ øíká jaká; naproti
286 tomu $p = 1$~znamená, ¾e funkce je identita, a»~u¾~je $q$ cokoli.
287
288 V~tomto kódování mù¾eme na¹i tabulku popsat následovnì:
289 $$\eqalign{
290    p_B &= p_H \and p_D,\cr
291    q_B &= (\neg{p_H} \and q_H) \lor (p_H \and q_D).
292 }$$
293
294 \h{Paralelní sèítání}
295
296 Z~popisu chování blokù u¾ je jenom krùèek k~paralelnímu pøedpovídání pøenosù,
297 a~tím i k~paralelní sèítaèce. Bez újmy na~obecnosti budeme pøedpokládat,
298 ¾e~poèet bitù vstupních èísel je mocnina dvojky, jinak si vstup doplníme
299 nulami, co¾ výsledný èas bìhu algoritmu zhor¹í maximálnì konstanta-krát.
300
301 Algoritmus bude rozdìlen na~dvì èásti. V~první èásti spoèítá chování
302 v¹ech {\I pøirozených blokù} -- tak budeme øíkat blokùm, jejich¾ velikost
303 je mocnina dvojky a pozice je dìlitelná velikostí. Nejprve v~konstantním
304 èase spoèítá chování blokù velikosti~1, ty pak spojí do dvojic, dvojice
305 zase do dvojic atd., obecnì v~$i$-tém kroku spoète chování v¹ech pøirozených
306 blokù velikosti~$2^i$.
307
308 V~druhé èásti pak dopoèítává pøenosy, a~to tak, aby v~$i$-tém kroku byly známy
309 pøenosy do~øádù dìlitelných~$2^{\log n - i}$. V~nultém kroku tedy pouze $c_0=0$
310 a~$c_n$, který spoèítá z~$c_0$ pomocí chování bloku $\left< 0,n \right>$.
311 V~prvním kroku pomocí $\left< 0,n/2 \right>$ dopoèítá $c_{n/2}$,
312 v~druhém pomocí $\left< 0,n/4 \right>$ spoèítá $c_{n/4}$ a pomocí
313 $\left< n/2,3/4\cdot n \right>$ dostane $c_{3/4\cdot n}$ atd.
314 Obecnì v~$i$-tém kroku pou¾ívá chování blokù velikosti $2^{\log n - i}$.
315
316 \s{Sèítací sí»} tedy bude vypadat takto:
317 \algo
318 \:$\Theta(1)$ hladin výpoètu chování blokù velikosti~1.
319 \:$\Theta(\log n)$ hladin poèítajících chování pøirozených blokù velikosti~$2^i$.
320 \:$\Theta(\log n)$ hladin dopoèítávajících pøenosy \uv{zahu¹»ováním}.
321 \:$\Theta(1)$ hladin na samotné seètení: $\forall i: z_i = x_i \oplus y_i \oplus c_i$.
322 \endalgo
323
324 \figure{deleni_bloku.eps}{Výpoèet pøenosu}{2.5in}
325
326 Algoritmus tedy pracuje v~èase $\Theta(\log n)$. Hradel je pou¾ito lineárnì: pøi
327 výpoètu chování blokù na jednotlivých hladinách poèet hradel exponenciálnì klesá
328 od~$n$ k~1, bìhem zahu¹»ování pøenosù naopak exponenciálnì stoupá od~1 k~$n$.
329 Obì geometrické øady se seètou na $\Theta(n)$.
330
331 \h{Paralelní násobení}
332
333 Je¹tì si rozmysleme, jak rychle by bylo mo¾né èísla násobit. Opìt se inspirujeme
334 ¹kolním algoritmem: pokud násobíme dvì $n$-ciferná èísla $x$ a~$y$, uvá¾íme
335 v¹ech~$n$ posunutí èísla~$y$, ka¾dé z~nich vynásobíme pøíslu¹nou èíslicí v~$y$
336 a výsledky posèítáme.
337
338 \figure{skolni_nasobeni.eps}{©kolní násobení}{2in}
339
340 Ve~dvojkové soustavì je to je¹tì jednodu¹¹í: násobení jednou èíslicí je prostý
341 \AND. Paralelnì tedy vytvoøíme v¹echna posunutí a spoèítáme v¹echny \AND{}y.
342 To v¹e stihneme za 1~takt výpoètu.
343
344 Zbývá seèíst $n$~èísel, z~nich¾ ka¾dé má $\Theta(n)$ bitù. Mohli bychom opìt
345 pou¾ít osvìdèený trik: sèítat dvojice èísel, pak dvojice souètù dvojic, atd.
346 Taková sí» by mìla tvar binárního stromu hloubky $\log n$, jeho¾ ka¾dý vrchol
347 obsahuje jednu sèítaèku a na tu, jak víme, postaèí $\Theta(\log n)$ hladin.
348 Celý výpoèet tedy bì¾í v~èase $\Theta(\log^2 n)$.
349
350 Jde to ale rychleji, pou¾ijeme-li jednoduchý, témìø kouzelnický trik.
351 Sestrojíme {\I kompresor} -- to bude obvod konstantní hloubky, který na~vstupu
352 dostane tøi èísla a vypoète z~nich dvì èísla mající stejný souèet jako zadaná
353 trojice.
354
355 K~èemu je to dobré? Máme-li seèíst $n$~èísel, v~konstantním èase doká¾eme tento
356 úkol pøevést na seètení $\lceil 2/3\cdot n\rceil$ èísel, to pak opìt v~konstantním èase
357 na seètení $\lceil (2/3)^2\cdot n\rceil$ èísel atd., a¾ nám po $\lceil\log_{3/2} n\rceil = \Theta(\log n)$ krocích
358 zbudou dvì èísla a ta seèteme klasickou sèítaèkou. Zbývá vymyslet kompresor.
359
360 \s{Konstrukce kompresoru:}
361 Oznaème vstupy kompresoru $x$, $y$ a~$z$ a výstupy $p$ a~$q$.
362 Pro ka¾dý øád~$i$ spoèteme souèet $x_i + y_i + z_i$. To je nìjaké
363 dvoubitové èíslo, tak¾e mù¾eme jeho ni¾¹í bit prohlásit za~$p_i$
364 a vy¹¹í za~$q_{i+1}$.
365
366 Jinými slovy jsme v¹echna tøi èísla normálnì seèetli, ale místo abychom
367 pøenosy posílali do vy¹¹ího øádu, vytvoøili jsme z~nich dal¹í èíslo,
368 které má být k~výsledku èasem pøièteno.
369
370 \figure{add_3to2.eps}{Kompresor}{0.9in}
371
372 \s{Shrnutí:} Na¹e sí» pro paralelní násobení pracuje v~èase $\Theta(\log n)$
373 -- nejdøíve v~konstantním èase vytváøíme mezivýsledky, pak pou¾ijeme $\Theta(\log n)$
374 hladin kompresorù konstantní hloubky a nakonec jednu sèítaèku hloubky $\Theta(\log n)$.
375 Jistou vadou na kráse ov¹em je, ¾e na to potøebujeme $\Theta(n^2)$ hradel.
376
377 \h{Tøídící sítì}
378
379 Je¹tì zkusíme paralelizovat jeden klasický problém, toti¾ tøídìní.
380 Budeme k~tomu pou¾ívat {\I komparátorovou sí»} -- to je hradlová sí»
381 slo¾ená z~{\I komparátorù.}
382
383 Jeden komparátor umí porovnat dvì hodnoty a~rozhodnout, která z~nich je vìt¹í
384 a~která men¹í. Nevrací v¹ak booleovský výsledek jako bì¾né hradlo, ale má dva
385 výstupy: na~jednom z~nich vrací men¹í ze~vstupních hodnot a~na~druhém tu vìt¹í.
386
387 \figure{sortnet.0}{Komparátor}{0.7in}
388
389 V~na¹em formalismu hradlových sítí bychom mohli komparátor reprezentovat dvojicí
390 hradel: jedno z~nich by poèítalo minimum, druhé maximum. Hodnoty, které tøídíme,
391 bychom prostì pova¾ovali za prvky abecedy.\foot{Komparátorovou sí» mù¾eme také snadno
392 pøelo¾it na booleovský obvod. Ka¾dý prvek abecedy reprezentujeme èíslem
393 o~$b=\lceil\log_2 \Sigma\rceil$ bitech. Zpùsobem podobným paralelní sèítaèce
394 lze z~booleovských hradel sestrojit komparátor hloubky $\Theta(\log b)$. Zkuste to.}
395
396 Je¹tì se dohodnìme, ¾e výstupy komparátorù se nikdy nebudou vìtvit. Ka¾dý
397 z~nich pøivedeme na~vstup jiného komparátoru nebo na~výstup sítì. Vìtvení
398 by nám ostatnì k~nièemu nebylo, proto¾e na~výstupu potøebujeme vydat stejný
399 poèet hodnot, jako byl na vstupu, a nemáme ¾ádné hradlo, kterým bychom mohli
400 pøípadných více vìtví slouèit opìt do~jedné.
401
402 \s{Pøíklad:} Zkusíme do øeèi komparátorových sítí pøelo¾it {\I bublinkové tøídìní.}
403 Z~nìj získáme obvod na~levém obrázku (¹ipky pøedstavují jednotlivé komparátory).
404 Toto nakreslení ov¹em ponìkud klame -- pokud sí» necháme poèítat, mnohá porovnání
405 budou probíhat paralelnì. Skuteèný prùbìh výpoètu znázoròuje pravý obrázek,
406 na~nìm¾ jsme v¹echny operace provádìné souèasnì znázornili vedle sebe.
407 Ihned vidíme, ¾e paralelní bublinkové tøídìní pracuje v~èase $\Theta(n)$
408 a potøebuje kvadratický poèet komparátorù.
409
410 \twofigures{sortnet.1}{Bubblesort}{143pt}{sortnet.2}{Skuteèný prùbìh výpoètu}{143pt}
411
412 Nyní si pøedvedeme rychlej¹í tøídící algoritmus. Pùjdeme na nìj jak se øíká \uv{od lesa}.
413 Nejdøíve vymyslíme sí», která bude umìt tøídit jenom nìco -- toti¾ bitonické posloupnosti.
414 Pak z~ní teprve sestrojíme obecné tøidìní. Bez újmy na obecnosti pøitom budeme
415 pøedpokládat, ¾e ka¾dé dva prvky na vstupu jsou navzájem rùzné a ¾e velikost vstupu
416 je mocnina dvojky.
417
418 \s{Definice:} Posloupnost $x_0,\dots,x_{n-1} $ je {\I èistì bitonická,} pokud ji mù¾eme
419 rozdìlit na nìjaké pozici $k\in\{0, \dots, n-1\}$ tak, ¾e prvky $x_0,\ldots,x_k$ tvoøí rostoucí
420 poslopnost, zatímco prvky $x_k,\ldots,x_{n-1}$ tvoøí posloupnost klesající.
421
422 \s{Definice:} Posloupnost $x_0,\dots,x_{n-1}$ je {\I bitonická}, pokud ji lze získat
423 rotací (cyklickým posunutím) nìjaké èistì bitonické posloupnosti. Jinými slovy pokud existuje
424 $0\le j<n$ takové, ¾e posloupnost $x_j,x_{(j+1) \bmod n},\dots, x_{(j+n-1) \bmod n}$
425 je èistì bitonická.
426
427 \s{Definice:} {\I Separátor øádu~$n$} je komparátorová sí»~$S_n$ se vstupy $x_0,\ldots,x_{n-1}$
428 a výstupy $y_0,\ldots,y_{n-1}$, která dostane-li na~vstupu bitonickou posloupnost,
429 vydá na výstup její permutaci s~následujícími vlastnostmi:
430
431 \itemize\ibull
432 \:$y_0,\ldots,y_{n/2-1}$ a $y_{n/2},\ldots,y_{n-1}$ jsou bitonické posloupnosti;
433 \:$y_i < y_j$, kdykoliv $0\le i<n/2$ a $n/2\le j<n$.
434 \endlist
435
436 \>Jinak øeèeno, separátor rozdìlí bitonickou posloupnost na dvì polovièní
437 a navíc jsou v¹echny prvky v~první polovinì men¹í ne¾ v¹echny v~té druhé.
438
439 \s{Lemma:} Pro ka¾dé sudé~$n$ existuje separátor~$S_n$ konstantní hloubky,
440 slo¾ený z~$\Theta(n)$ komparátorù.
441
442 Dùkaz tohoto lemmatu si necháme na konec kapitoly. Nejprve pøedvedeme, k~èemu jsou
443 separátory dobré.
444
445 \s{Definice:} {\I Bitonická tøídièka øádu~$n$} je komparátorová sí»~$B_n$,
446 která dostane-li na vstupu bitonickou posloupnost délky~$n$, vydá ji setøídìnou.
447
448 \s{Lemma:} Pro libovolné $n=2^k$ existuje bitonická tøidièka~$B_n$ hloubky $\Theta(\log n)$
449 s~$\Theta(n\log n)$ komparátory.
450
451 \proof
452 Konstrukce bitonické tøidièky je snadná: nejprve separátorem~$S_n$ zadanou bitonickou
453 posloupnost rozdìlíme na dvì bitonické posloupnosti délky $n/2$,
454 pak ka¾dou z~nich separátorem~$S_{n/2}$ na dvì délky $n/4$, atd.,
455 a¾ získáme jednoprvkové bitonické posloupnosti ve~správném poøadí.
456 Celkem pou¾ijeme~$\log n$ hladin slo¾ených z~$n$ separátorù, ka¾dá
457 hladina má pøitom konstantní hloubku.
458 \qed
459
460 \figure{sortnet.5}{Bitonická tøidièka $B_n$}{\epsfxsize}
461
462 Bitonické tøidièky nám nyní pomohou ke~konstrukci tøidièky na obecné posloupnosti.
463 Ta bude zalo¾ena na tøídìní sléváním -- nejprve se tedy musíme nauèit slít dvì
464 setøídìné posloupnosti do jedné.
465
466 \s{Definice:} {\I Slévaèka øádu~$n$} je komparátorová sí»~$M_n$ s~$2\times n$
467 vstupy a~$n$ výstupy, která dostane-li dvì setøídìné posloupnosti délky~$n$,
468 vydá posloupnost vzniklou jejich slitím.
469
470 \s{Lemma:} Pro $n=2^k$ existuje slévaèka~$M_n$ hloubky $\Theta(\log n)$
471 s~$\Theta(n\log n)$ komparátory.
472
473 \proof
474 Staèí jednu vstupní posloupnost obrátit a \uv{pøilepit} za tu druhou. Tím vznikne
475 bitonická posloupnost, jí¾ setøídíme bitonickou tøidièkou~$B_{2n}$.
476 \qed
477
478 \s{Definice:} {\I Tøídící sí» øádu~$n$} je komparátorová sí»~$T_n$ s~$n$~vstupy
479 a~$n$~výstupy, která pro ka¾dý vstup vydá jeho setøídìnou permutaci.
480
481 \s{Lemma:} Pro $n=2^k$ existuje tøídící sí»~$T_n$ hloubky $\Theta(\log^2 n)$
482 slo¾ená z~$\Theta(n\log^2 n)$ komparátorù.
483
484 \proof
485 Sí» bude tøídit sléváním. Vstup rozdìlí na~$n$ jednoprvkových posloupností.
486 Ty jsou jistì setøídìné, tak¾e je slévaèkami~$M_1$ mù¾eme slít do dvouprvkových
487 setøídìných posloupností. Na ty pak aplikujeme slévaèky $M_2$, $M_4$, \dots, $M_{n/2}$,
488 a¾ v¹echny èásti slijeme do jedné, setøídìné.
489
490 Celkem provedeme $\log n$~krokù slévání, $i$-tý z~nich obsahuje slévaèky $M_{2^i}$
491 a ty, jak u¾ víme, mají hloubku $\Theta(i)$. Celkový poèet vrstev tedy èiní
492 $\Theta(1+2+3+\ldots+\log n) = \Theta(\log^2 n)$. Ka¾dý krok pøitom potøebuje
493 $\Theta(n\log n)$ komparátorù, co¾ dává celkem $\Theta(n \log^2 n)$ komparátorù.
494 \qed
495
496 \figure{sortnet.6}{Tøidièka $T_8$}{\epsfxsize}
497
498 \s{Konstrukce separátoru:} Zbývá dokázat, ¾e existují separátory konstantní
499 hloubky. Vypadají pøekvapivì jednodu¹e: pro $i=0,\ldots,n/2-1$ zapojíme
500 komparátor se vstupy $x_i$, $x_{i+n/2}$, jeho¾ minimum pøivedeme na~$y_i$
501 a maximum na~$y_{i+n/2}$.
502
503 \figure{sortnet.3}{Konstrukce separátoru}{\epsfxsize}
504
505 Proè separátor separuje? Nejprve pøedpokládejme, ¾e vstupem je èistì bitonická
506 posloupnost. Oznaème~$m$ polohu maxima této posloupnosti; maximum bez újmy
507 na obecnosti le¾í v~první polovinì (jinak celý dùkaz provedeme \uv{zrcadlovì}).
508 Oznaème dále~$k$ nejmen¹í index, pro který komparátor mezi $x_k$ a~$x_{k+n/2}$
509 hodnoty prohodí, tedy $k=\min \{ i \mid x_i > x_{i+n/2} \}.$
510
511 Jeliko¾ maximum je jedineèné, musí platit $x_m > x_{m+n/2}$, tak¾e~$k$
512 existuje a navíc $0\le k\le m < n/2$. Také platí, ¾e pro ka¾dé~$i$ mezi
513 $k$ a~$n/2$ u¾ komparátory musí prohazovat, proto¾e od~$x_k$ je posloupnost
514 a¾ do konce klesající, tak¾e $x_i > x_{i+n/2}$.
515
516 Separátor se tedy chová velice jednodu¹e: první polovina výstupu vznikne
517 slepením rostoucího úseku $x_0,\ldots,x_{k-1}$ s~klesajícím úsekem $x_{n/2+k},\ldots,x_{n-1}$;
518 druhou polovinu tvoøí spojení klesajícího úseku $x_{n/2},\ldots,x_{n/2+k-1}$, rostoucího
519 úseku $x_k,\ldots,x_m$ a klesajícího úseku $x_m,\ldots,x_{n/2-1}$. První polovina
520 je èistì bitonická a jeliko¾ $x_{n/2-1} > x_{n/2}$, je druhá polovina bitonická
521 (ov¹em obvykle ne èistì).
522
523 \figure{sortnet.7}{Ilustrace èinnosti separátoru}{\epsfxsize}
524
525 Doplòme, co se stane, pokud vstup není èistì bitonický. Zde vyu¾ijeme
526 toho, ¾e pokud vstup separátoru zrotujeme o~$p$ pozic, dostaneme o~$p$ pozic
527 zrotované i obì poloviny výstupu. Podle definice ov¹em pro ka¾dou bitonickou
528 posloupnost existuje její rotace, která je èistì bitonická, a~pro ní¾, jak
529 u¾ víme, separátor funguje. Tak¾e pro neèistou bitonickou posloupnost musí
530 vydat výsledek pouze zrotovaný, co¾ ov¹em na jeho správnosti nic nemìní.
531 \qed
532
533 Ukázali jsme tedy paralelní tøídící algoritmus o~slo¾itosti $\Theta(\log^2 n)$
534 slo¾ený z~$\Theta(n\log^2 n)$ komparátorù.
535
536 Dodejme je¹tì, ¾e existuje i~tøídicí algoritmus, kterému staèí jen $\O(\log n)$
537 hladin. Jeho multiplikativní konstanta je v¹ak pøíli¹ veliká, tak¾e je v~praxi
538 nepou¾itelný.
539
540 \bye