]> mj.ucw.cz Git - ads2.git/blob - 5-hradla/5-hradla.tex
Voroneho diagramy: Oprava preklepu
[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 Pomocí poèítaèù øe¹íme stále slo¾itìj¹í a rozsáhlej¹í úlohy a potøebujeme
12 k~tomu èím dál víc výpoèetního výkonu. Rychlost a kapacita poèítaèù zatím
13 rostla exponenciálnì, tak¾e se zdá, ¾e staèí chvíli poèkat. Jen¾e tento rùst
14 se urèitì nìkdy zastaví -- napøíklad není jasné, jestli pùjde vyrábìt transistory
15 men¹í ne¾ jeden atom.
16
17 Jak si tedy s~obrovskými daty poradíme? Jedna z~lákavých mo¾ností je prostì
18 do~výpoètu zapøáhnout více ne¾ jeden procesor. Ostatnì, vícejádrové procesory,
19 které dneska najdeme ve~svých stolních poèítaèích, nejsou nic jiného ne¾
20 víceprocesorový systém na jednom èipu.
21
22 Nabízí se tedy obtí¾nou úlohu rozdìlit na nìkolik èástí, nechat ka¾dý
23 procesor (èi jádro) poèítat jednu z~èástí a nakonec jejich výsledky spojit
24 dohromady. To se snadno øekne, ale s~výjimkou triviálních úloh u¾ obtí¾nìji
25 provede.
26
27 Pojïme se podívat na nìkolik zajímavých paralelních algoritmù. Abychom se
28 nemuseli zabývat detaily hardwaru konkrétního víceprocesorového poèítaèe,
29 zavedeme si pomìrnì abstraktní výpoèetní model, toti¾ hradlové sítì. Tento
30 model je daleko paralelnìj¹í ne¾ skuteèný poèítaè, ale pøesto se techniky,
31 které si uká¾eme, dají snadno vyu¾ít i prakticky. Konec koncù sama vnitøní
32 architektura procesorù se na¹emu modelu velmi podobá.
33
34 \h{Hradlové sítì}
35
36 Hradlové sítì jsou tvoøeny navzájem propojenými {\I hradly.} Ka¾dé hradlo pøitom
37 poèítá nìjakou (obecnì libovolnou) funkci $\Sigma^k \rightarrow \Sigma$, kde~$\Sigma$
38 je koneèná abeceda (stejná pro celou sí») a~$k$ pøirozené èíslo (poèet vstupù hradla,
39 jinak té¾ jeho {\I arita}).
40
41 \s{Pøíklad:} Èasto studujeme hradla {\I booleovská} (pracující nad abecedou $\Sigma=\{0,1\}$).
42 Ta poèítají jednotlivé logické funkce, mezi nejbì¾nìj¹í patøí:
43
44 \itemize\ibull
45 \:nulární funkce: to jsou konstanty ($\hbox{\csc false}=0$, $\hbox{\csc true}=1$),
46 \:unární funkce: identita a negace (\NOT,~$\lnot$),
47 \:binární funkce: logický souèin (\AND,~$\and$), souèet (\OR,~$\lor$), \dots
48 \endlist
49
50 Propojením hradel pak vznikne {\I hradlová sí».} Ne¾ vyøkneme formální definici,
51 pojïme se podívat na pøíklad jedné takové sítì:
52
53 \figure{hradlova_sit.eps}{Hradlová sí» -- tøívstupová verze funkce {\I majorita}}{3in}
54
55 Na¹e sí» má tøi vstupy, pìt booleovských hradel a jeden výstup. Na výstupu
56 je pøitom jednièka právì tehdy, jsou-li jednièky pøítomny na alespoò dvou
57 vstupech. Jinými slovy vrací {\I majoritu} ze~vstupù, tedy hodnotu, která
58 pøeva¾uje.
59
60 Obecnì ka¾dá hradlová sí» má nìjaké vstupy, hradla a výstupy.
61 Ka¾dý vstup hradla je pøitom pøipojen buïto na~nìkterý ze~vstupù sítì
62 nebo na~výstup jiného hradla. Výstupy hradel mohou být propojeny na~vstupy
63 dal¹ích hradel (mohou se vìtvit), nebo na výstupy sítì. Libovolnì, jen nesmíme
64 vytváøet cykly.
65
66 Nyní toté¾ formálnìji:
67
68 \s{Definice:} {\I Hradlová sí»} je urèena:
69 \itemize\ibull
70 \:{\I abecedou} $\Sigma$, co¾ je nìjaká koneèná mno¾ina symbolù;
71 \:po dvou disjunktními koneènými mno¾inami \hfil\break
72   $I$~({\I vstupy}), $O$~({\I výstupy}) a~$H$~({\I hradla});
73 \:acyklickým orientovaným multigrafem~$(V,E)$, kde~$V = I \cup O \cup H$;\foot{Proè
74   potøebujeme multigraf? Napøíklad chceme-li výstup jednoho hradla pøipojit souèasnì
75   na více rùzných vstupù jiného hradla.}
76 \:zobrazením~$F$, které ka¾dému hradlu $h\in H$ pøiøadí nìjakou funkci~$F(h):
77   \Sigma^{a(h)} \rightarrow \Sigma$, co¾ je funkce, kterou toto hradlo vykonává.
78   Èíslu $a(h)$ øíkáme {\I arita} hradla~$h$;
79 \:zobrazením~$z: E \rightarrow {\bb N}$, je¾ o~hranách vedoucích do hradel øíká,
80   kolikátému argumentu funkce odpovídají;\foot{Na hranách vedoucích do výstupù
81   necháváme hodnotu této funkce nevyu¾itu.}
82 \endlist
83
84 \>Pøitom jsou splnìny následující podmínky:
85
86 \itemize\ibull
87 \:Do vstupù nevedou ¾ádné hrany.
88 \:Z~výstupù nevedou ¾ádné hrany a do ka¾dého výstupu vede právì jedna hrana.
89 \:Do ka¾dého hradla vede tolik hran, kolik je jeho arita.
90 \:V¹echny vstupy hradel jsou zapojeny. Tedy pro ka¾dé hradlo~$h$ a ka¾dý
91   jeho vstup $j\in \{1,\ldots,a(h)\}$ existuje právì jedna hrana~$e$, která
92   vede do hradla~$h$ a~$z(e)=j$.
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$. 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ì ty 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} polo¾íme rovnu poètu 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 jakýkoliv 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øidáme pravidlo,
150 které omezí arity v¹ech hradel nìjakou pevnou konstantou, tøeba dvojkou.
151 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ích modelù, 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 jakýkoliv 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ì. To obvykle není ¾ádoucí.)
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 To znamená 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 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 pøièem¾ 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$, pøièem¾ $i$-tý øád má váhu $2^i$.
191
192 Ihned se nabízí pou¾ít starý dobrý \uv{¹kolní algoritmus sèítání pod sebou}. Ten
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 do vy¹¹ího øádu 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á sama o~sobì konstantní hloubku, ov¹em k~výpoètu potøebuje pøenos
219 vypoèítaný pøedcházející krabièkou. Jednotlivé krabièky proto musí le¾et
220 v~rùzných vrstvách sítì. Vrstev tedy je $\Theta(n)$ a stejnì tak hradel.
221 Oproti sekvenènímu algoritmu jsme si bohu¾el ani trochu 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 xorová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 u~¾ádného bloku 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 -- pøenos tedy pohlcuje. Poslední blok naopak sám o~sobì pøenos vytváøí,
252 a» dostane cokoliv. 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 chování èástí urèit,
256 jak se chová celý blok. Mìjme blok~$B$ slo¾ený z~men¹ích podblokù~$H$ (horní èást)
257 a~$D$ (dolní). Chování celku závisí na chování èástí takto:
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 pøeci jen
270 rozmyslet, jak~bychom takovou operaci popsali èistì binárnì.
271
272 Tøi stavy mù¾eme zakódovat pomocí dvou bitù, øíkejme jim tøeba $p$ a~$q$.
273 Dvojice $(p,q)$ pøitom mù¾e nabývat hned ètyø mo¾ných hodnot, my dvìma z~nich
274 pøiøadíme stejný význam:
275 $$
276   (1,*) = \hbox{\tt <} \qquad
277   (0,0) = \hbox{\bo 0} \qquad
278   (0,1) = \hbox{\bo 1}.
279 $$
280 Kdykoliv $p=1$, blok kopíruje pøenos. Naopak $p=0$ odpovídá tomu, ¾e blok
281 posílá do~vy¹¹ího øádu konstantní pøenos, a $q$~pak urèuje, jaký.
282 Kombinování blokù (skládání funkcí) pak mù¾eme popsat následovnì:
283 $$\eqalign{
284    p_B &= p_H \and p_D,\cr
285    q_B &= (\neg{p_H} \and q_H) \lor (p_H \and q_D).
286 }$$
287 A~prùchod pøenosu blokem (dosazení hodnoty funkce) takto:
288 $$
289    c_{j+1} = (p \and c_i) \lor (\neg p \and q).
290 $$
291 Rozmyslete si, ¾e tyto formule odpovídají vý¹e uvedené tabulce.
292
293 \h{Paralelní sèítání}
294
295 Od~popisu chování blokù je u¾ jenom krùèek k~paralelnímu pøedpovídání pøenosù,
296 a~tím i k~paralelní sèítaèce. Bez újmy na~obecnosti budeme pøedpokládat,
297 ¾e~poèet bitù vstupních èísel je mocnina dvojky; jinak vstup doplníme zleva
298 nulami.
299
300 Algoritmus bude rozdìlen na~dvì èásti:
301
302 {\I První èást} spoèítá chování v¹ech {\I pøirozených blokù} -- tak budeme øíkat
303 blokùm, jejich¾ velikost je mocnina dvojky a pozice je dìlitelná velikostí
304 (bloky té¾e velikosti se tedy nepøekrývají). Nejprve v~konstantním èase stanoví
305 chování blokù velikosti~1, ty pak spojí do dvojic, dvojice zase do dvojic atd.,
306 obecnì v~$i$-tém kroku spoète chování v¹ech pøirozených blokù velikosti~$2^i$.
307
308 {\I Druhá èást} pak dopoèítá 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í bloku $\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 \numlist\ndotted
318 \:$\Theta(1)$ hladin výpoètu chování blokù velikosti~1.
319 \:$\Theta(\log n)$ hladin poèítajících chování v¹ech pøirozených blokù.
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 \endlist
323
324 \figure{deleni_bloku.eps}{Výpoèet pøenosu}{2.5in}
325
326 Algoritmus tedy pracuje v~èase $\Theta(\log n)$. Vyu¾ívá k~tomu lineárnì mnoho hradel:
327 pøi 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~$x$, 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 sáhnout po~osvìdèeném triku: sèítat dvojice èísel, pak dvojice tìchto souètù, atd.
346 Taková sí» by mìla tvar binárního stromu hloubky $\log n$, jeho¾ ka¾dý vrchol
347 by obsahoval 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 v¹echna tøi èísla jsme 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 pøitom 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ícero 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á}, jestli¾e ji lze získat
423 rotací (cyklickým posunutím) nìjaké èistì bitonické posloupnosti. Tedy 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 \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$, ka¾dou z~nich pak separátorem~$S_{n/2}$
454 na dvì èásti délky $n/4$, atd., a¾ získáme jednoprvkové posloupnosti ve~správném poøadí.
455 Celkem pou¾ijeme~$\log n$ hladin slo¾ených z~$n$ separátorù, ka¾dá
456 hladina má pøitom konstantní hloubku.
457 \qed
458
459 \figure{sortnet.5}{Bitonická tøidièka $B_n$}{\epsfxsize}
460
461 Bitonické tøidièky nám nyní pomohou ke~konstrukci tøidièky na obecné posloupnosti.
462 Ta bude zalo¾ena na tøídìní sléváním -- nejprve se tedy musíme nauèit slít dvì
463 setøídìné posloupnosti do jedné.
464
465 \s{Definice:} {\I Slévaèka øádu~$n$} je komparátorová sí»~$M_n$ s~$2\times n$
466 vstupy a~$n$ výstupy, která dostane-li dvì setøídìné posloupnosti délky~$n$,
467 vydá posloupnost vzniklou jejich slitím.
468
469 \s{Lemma:} Pro $n=2^k$ existuje slévaèka~$M_n$ hloubky $\Theta(\log n)$
470 s~$\Theta(n\log n)$ komparátory.
471
472 \proof
473 Staèí jednu vstupní posloupnost obrátit a \uv{pøilepit} za tu druhou. Tím vznikne
474 bitonická posloupnost, jí¾ setøídíme bitonickou tøidièkou~$B_{2n}$.
475 \qed
476
477 \s{Definice:} {\I Tøídící sí» øádu~$n$} je komparátorová sí»~$T_n$ s~$n$~vstupy
478 a~$n$~výstupy, která pro ka¾dý vstup vydá jeho setøídìnou permutaci.
479
480 \s{Lemma:} Pro $n=2^k$ existuje tøídící sí»~$T_n$ hloubky $\Theta(\log^2 n)$
481 slo¾ená z~$\Theta(n\log^2 n)$ komparátorù.
482
483 \proof
484 Sí» bude tøídit sléváním. Vstup rozdìlí na~$n$ jednoprvkových posloupností.
485 Ty jsou jistì setøídìné, tak¾e je slévaèkami~$M_1$ mù¾eme slít do dvouprvkových
486 setøídìných posloupností. Na ty pak aplikujeme slévaèky $M_2$, $M_4$, \dots, $M_{n/2}$,
487 a¾ v¹echny èásti slijeme do jedné, setøídìné.
488
489 Celkem provedeme $\log n$~krokù slévání, $i$-tý z~nich obsahuje slévaèky $M_{2^i}$
490 a ty, jak u¾ víme, mají hloubku $\Theta(i)$. Celkový poèet vrstev tedy èiní
491 $\Theta(1+2+3+\ldots+\log n) = \Theta(\log^2 n)$. Ka¾dý krok pøitom potøebuje
492 $\Theta(n\log n)$ komparátorù, co¾ dává celkem $\Theta(n \log^2 n)$ komparátorù.
493 \qed
494
495 \figure{sortnet.6}{Tøidièka $T_8$}{\epsfxsize}
496
497 \s{Konstrukce separátoru:} Zbývá dokázat, ¾e existují separátory konstantní
498 hloubky. Vypadají pøekvapivì jednodu¹e: pro $i=0,\ldots,n/2-1$ zapojíme
499 komparátor se vstupy $x_i$, $x_{i+n/2}$, jeho¾ minimum pøivedeme na~$y_i$
500 a maximum na~$y_{i+n/2}$.
501
502 \figure{sortnet.3}{Konstrukce separátoru}{\epsfxsize}
503
504 Proè separátor separuje? Nejprve pøedpokládejme, ¾e vstupem je èistì bitonická
505 posloupnost. Oznaème~$m$ polohu maxima této posloupnosti; maximum bez újmy
506 na obecnosti le¾í v~první polovinì (jinak celý dùkaz provedeme \uv{zrcadlovì}).
507 Oznaème dále~$k$ nejmen¹í index, pro který komparátor zapojený mezi $x_k$ a~$x_{k+n/2}$
508 hodnoty prohodí, tedy $k=\min \{ i \mid x_i > x_{i+n/2} \}.$
509
510 Jeliko¾ maximum je jedineèné, musí platit $x_m > x_{m+n/2}$, tak¾e~$k$
511 existuje a navíc $0\le k\le m < n/2$. Také platí, ¾e pro ka¾dé~$i$ mezi
512 $k$ a~$n/2$ u¾ komparátory musí prohazovat, proto¾e od~$x_k$ je posloupnost
513 a¾ do konce klesající, a~proto $x_i > x_{i+n/2}$.
514
515 Separátor se tedy chová velice jednodu¹e: první polovina výstupu vznikne
516 slepením rostoucího úseku $x_0,\ldots,x_{k-1}$ s~klesajícím úsekem $x_{n/2+k},\ldots,x_{n-1}$;
517 druhou polovinu tvoøí spojení klesajícího úseku $x_{n/2},\ldots,x_{n/2+k-1}$, rostoucího
518 úseku $x_k,\ldots,x_m$ a klesajícího úseku $x_m,\ldots,x_{n/2-1}$.
519
520 Snadno tedy ovìøíme, ¾e se separátor chová podle definice: První polovina
521 je èistì bitonická a jeliko¾ $x_{n/2-1} > x_{n/2}$, je druhá polovina bitonická
522 (obvykle ne èistì). Navíc víme, ¾e nejvy¹¹ím bodem první èásti je~$x_k$
523 a nejni¾¹ím bodem druhé èásti~$x_{n/2+k} > x_k$, tak¾e v¹echny prvky první
524 èásti musí být men¹í ne¾ v¹echny v~té druhé.
525
526 \figure{sortnet.7}{Ilustrace èinnosti separátoru}{\epsfxsize}
527
528 Doplòme, co se stane, pokud vstup není èistì bitonický. Zde vyu¾ijeme toho,
529 ¾e separátor je symetrický, tudí¾ zrotujeme-li jeho vstup o~$p$ pozic, dostaneme
530 o~$p$ pozic zrotované i obì poloviny výstupu. Podle definice ov¹em pro ka¾dou bitonickou
531 posloupnost existuje její rotace, která je èistì bitonická, a~pro ní¾, jak
532 u¾ víme, separátor funguje. Tak¾e pro neèistou bitonickou posloupnost musí
533 vydat výsledek pouze zrotovaný, co¾ ov¹em na jeho správnosti nic nemìní.
534 \qed
535
536 \s{Závìrem:} Nalezli jsme paralelní tøídící algoritmus o~èasové slo¾itosti $\Theta(\log^2 n)$,
537 který vyu¾ívá $\Theta(n\log^2 n)$ komparátorù. Dodejme, ¾e jsou známé i tøídící sítì
538 hloubky $\Theta(\log n)$, ale jejich konstrukce je mnohem komplikovanìj¹í a dává
539 obrovské multiplikativní konstanty, které brání praktickému pou¾ití.
540
541 Pomocí dolního odhadu slo¾itosti tøídìní (viz minulý semestr) navíc mù¾eme
542 snadno dokázat, ¾e logaritmický poèet hladin je nejni¾¹í mo¾ný. Máme-li toti¾
543 libovolnou tøídící sí» hloubky~$h$, mù¾eme ji simulovat po~hladinách a získat
544 tak sekvenèní tøídící algoritmus. Jeliko¾ na ka¾dé hladinì mù¾e le¾et nejvý¹e~$n/2$
545 komparátorù, ná¹ algoritmus provede maximálnì $hn/2$ porovnání. My ov¹em víme, ¾e pro
546 ka¾dý tøídící algoritmus existují vstupy, na~kterých porovná $\Omega(n\log n)$-krát.
547 Proto $h=\Omega(\log n)$.
548
549 \bye