]> mj.ucw.cz Git - ads2.git/blob - 5-hradla/5-hradla.tex
Hradla: Prepsano podle dnesni prednasky
[ads2.git] / 5-hradla / 5-hradla.tex
1 \input ../lecnotes.tex
2
3 \prednaska{5}{Hradlové sítì}{}
4
5 \def\land{\mathbin{\&}}
6
7 ®ivot nám pøiná¹í stále vìt¹í problémy, které obvykle vy¾adují stále více
8 výpoèetního výkonu. Rychlost poèítaèù sice posledních pár desetiletí stále
9 roste exponenciálnì, ale tento rùst se urèitì nìkdy zastaví (napøíklad proto,
10 ¾e vesmír je koneèný) a podle v¹eho u¾ k~tomuto bodu jsme docela blízko
11 (nará¾íme na nejrùznìj¹í fyzikální limity, napøíklad není jasné, jak vyrábìt
12 transistory men¹í ne¾ jeden atom).
13
14 Jak si tedy s~obrovskými daty poradíme? Jedna z~lákavých mo¾ností je prostì
15 do~výpoètu zapøáhnout více ne¾ jeden procesor. Ostatnì, vícejádrové procesory,
16 které dneska najdeme ve~svých stolních poèítaèích, nejsou nic jiného ne¾
17 víceprocesorový systém na jednom èipu.
18
19 Nabízí se tedy obtí¾nou úlohu rozdìlit na nìkolik èástí, nechat ka¾dý
20 procesor (èi jádro) poèítat jednu z~èástí a nakonec jejich výsledky spojit
21 dohromady. To se snadno øekne, ale s~výjimkou triviálních úloh u¾ obtí¾nìji
22 provede.
23
24 Pojïme se podívat na nìkolik zajímavých paralelních algoritmù. Abychom se
25 nemuseli zabývat detaily hardwaru konkrétního víceprocesorového poèítaèe,
26 zavedeme si pomìrnì abstraktní výpoèetní model, toti¾ hradlové sítì. Tento
27 model je daleko paralelnìj¹í ne¾ skuteèný poèítaè, ale pøesto se techniky,
28 které si uká¾eme, dají snadno vyu¾ít i prakticky. Konec koncù sama vnitøní
29 architektura procesorù se na¹emu modelu velmi podobá.
30
31 \h{Hradlové sítì}
32
33 Hradlové sítì jsou tvoøeny navzájem propojenými {\I hradly.} Ka¾dé hradlo pøitom
34 poèítá nìjakou (obecnì libovolnou) funkci $\Sigma^k \rightarrow \Sigma$, kde~$\Sigma$
35 je koneèná abeceda (stejná pro celou sí») a~$k$ pøirozené èíslo (poèet vstupù hradla,
36 jinak té¾ jeho {\I arita}).
37
38 \s{Pøíklad:} Èasto studujeme hradla {\I booleovská} (pracující nad abecedou $\Sigma=\{0,1\}$).
39 Ta poèítají jednotlivé logické funkce, mezi nejbì¾nìj¹í patøí:
40
41 \itemize\ibull
42 \:nulární: to jsou konstanty ($\hbox{\csc false}=0$, $\hbox{\csc true}=1$),
43 \:unární: identita a negace ({\csc not},~$\lnot$),
44 \:binární: logický souèin ({\csc and},~$\land$), souèet ({\csc or},~$\lor$), \dots
45 \endlist
46
47 Propojením hradel pak vznikne {\I hradlová sí».} Ne¾ vyøkneme formální definici,
48 pojïme se podívat na pøíklad jedné takové sítì:
49
50 \figure{hradlova_sit.eps}{Hradlová sí» -- tøívstupová verze funkce {\I majorita}}{3in}
51
52 Na¹e sí» má tøi vstupy, vnitøní booleovská hradla a jeden výstup. Na výstupu
53 je pøitom jednièka právì tehdy, jsou-li jednièky pøítomny na alespoò dvou
54 vstupech. Jinými slovy vrací {\I majoritu} ze~vstupù, tedy hodnotu, která
55 pøeva¾uje.
56
57 Obecnì ka¾dá hradlová sí» má nìjaké vstupy, hradla a výstupy.
58 Ka¾dý vstup hradla je pøitom pøipojen buïto na~nìkterý ze~vstupù sítì
59 nebo na~výstup jiného hradla. Výstupy hradel mohou být propojeny na~vstupy
60 dal¹ích hradel (mohou se vìtvit), nebo na výstupy sítì. Pøitom máme zakázáno
61 vytváøet cykly.
62
63 Nyní toté¾ formálnìji:
64
65 \s{Definice:} {\I Hradlová sí»} je urèena:
66 \itemize\ibull
67 \:{\I abecedou} $\Sigma$, co¾ je nìjaká koneèná mno¾ina symbolù;
68 \:po dvou disjunktními koneènými mno¾inami \hfil\break
69   $I$~({\I vstupy}), $O$~({\I výstupy}) a~$H$~({\I hradla});
70 \:acyklickým orientovaným multigrafem~$(V,E)$, kde~$V = I \cup O \cup H$;\foot{Proè
71   potøebujeme multigraf? Napøíklad chceme-li výstup jednoho hradla pøipojit souèasnì
72   na více rùzných vstupù druhého hradla.}
73 \:zobrazením~$F$, které ka¾dému hradlu $h\in H$ pøiøadí nìjakou funkci~$F(h):
74   \Sigma^{a(h)} \rightarrow \Sigma$, co¾ je funkce, kterou toto hradlo vykonává.
75   Èíslu $a(h)$ øíkáme {\I arita} hradla~$h$;
76 \:zobrazením~$z: E \rightarrow {\bb N}$, je¾ o~hranách vedoucích do hradel øíká,
77   kolikátému argumentu funkce odpovídají;\foot{Na hranách vedoucích do výstupù
78   necháváme hodnotu této funkce nevyu¾itu.}
79 \endlist
80
81 \>Pøitom jsou splnìny následující podmínky:
82
83 \itemize\ibull
84 \:$\forall i \in I: \deg^+(i)=0$ {\sl (do~vstupù nic nevede);}
85 \:$\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);}
86 \:$\forall h \in H: \deg^+(v)=a(v)$ {\sl (do~ka¾dého hradla vede tolik hran, kolik je jeho arita);}
87 \:$\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$
88   {\sl (v¹echny vstupy hradel jsou zapojeny).}
89 \endlist
90
91 \s{Poznámka:} Nìkdy se hradlovým sítím také øíká {\I kombinaèní obvody} a pokud pracují
92 nad abecedou $\Sigma = \{0,1\}$, pak {\I booleovské obvody}.
93
94 \s{Definice:} {\I Výpoèet sítì} postupnì pøiøazuje hodnoty z~abecedy~$\Sigma$
95 vrcholùm grafu. Výpoèet probíhá po~{\I taktech.} V~nultém taktu jsou definovány
96 pouze hodnoty na~vstupech sítì a v~hradlech arity~0 (konstanty). V~ka¾dém
97 dal¹ím taktu pak ohodnotíme vrcholy, jejich¾ v¹echny vstupní hrany vedou
98 z~vrcholù s~ji¾ definovanou hodnotou.
99
100 Hodnotu hradla~$h$ pøitom spoèteme funkcí~$F(h)$ z~hodnot na jeho vstupech
101 uspoøádaných podle funkce~$z(h)$. Výstup sítì pouze zkopíruje hodnotu, která do
102 nìj po~hranì pøi¹la.
103
104 Jakmile budou po~nìjakém poètu taktù definované hodnoty v¹ech výstupù, výpoèet
105 se zastaví a~sí» vydá výsledek -- ohodnocení výstupù.
106
107 Podle prùbìhu výpoètu mù¾eme vrcholy sítì rozdìlit do vrstev:
108
109 \s{Definice:} {\I $i$-tá vrstva $S_i$} obsahuje právì takové vrcholy~$v$,
110 pro~které nejdel¹í z~cest z~libovolného vrcholu se~vstupním stupnìm~0
111 do~$v$ má délku rovnou právì~$i$.
112
113 \figure{vypocet_site.eps}{Prùbìh výpoètu a rozdìlení sítì na vrstvy}{6cm}
114
115 \s{Pár pozorování} o~prùbìhu výpoètu:
116
117 \itemize\ibull
118 \:V~$i$-té vrstvì jsou tedy právì ty vrcholy, které poprvé ohodnotíme v~$i$-tém
119   taktu výpoètu.
120 \:Jeliko¾ sí» je acyklická, tak platí, ¾e jakmile vrchol ohodnotíme, u¾ se
121   jeho ohodnocení nikdy nemù¾e zmìnit.
122 \:Kdy¾ se vydáme z~libovolného vrcholu proti smìru hran, po~koneènì mnoha
123   krocích dojdeme do~vrcholu s~nulovým vstupním stupnìm (vstupu sítì nebo
124   konstantního hradla). Proto ka¾dý vrchol le¾í v~nìjaké vrstvì.
125 \:Vrstvy jsou disjunktní, tak¾e poèet neprázdných vrstev je nutnì koneèný.
126   V~kombinaci s~pøedchozím pozorováním dostaneme, ¾e výpoèet sítì se v¾dy zastaví.
127 \:Navíc poslední neprázdná vrstva je právì ta, kde se výpoèet zastaví -- z~ka¾dého
128   dal¹ího vrcholu by toti¾ bylo mo¾né po~hranách dojít do vrcholu s~výstupním
129   stupnìm~0 a jediné takové vrcholy jsou výstupy sítì. Ty by tedy musely také
130   le¾et v~nìkteré z~následujících vrstev, co¾ ov¹em není mo¾né, nebo» výpoèet
131   se u¾ zastavil.
132 \endlist
133
134 \>To nás motivuje k~následující definici:
135
136 \s{Definice:} {\I Èasovou slo¾itost} sítì definujeme jako poèet jejích neprázdných
137 vrstev. Podobnì {\I prostorovou slo¾itost} urèíme jako poèet hradel v~síti.
138
139 \s{Poznámka o~aritách:}
140 Kdybychom pøipustili hradla s~libovolnì vysokým poètem vstupù, mohli bychom
141 libovolný problém se vstupem délky~$n$ a výstupem délky~$\ell$ vyøe¹it v~jedné
142 vrstvì pomocí $\ell$~kusù $n$-vstupových hradel. Ka¾dému bychom prostì
143 pøiøadili funkci, která poèítá pøíslu¹ný bit výsledku ze~v¹ech bitù vstupu.
144
145 To v¹ak není ani realistické, ani pìkné. Jak z~toho ven? Pøijmeme prostì
146 omezení, ¾e~arity v¹ech hradel budou omezeny nìjakou pevnou konstantou,
147 tøeba dvojkou. Budeme tedy pou¾ívat výhradnì nulární, unární a binární hradla.
148
149 Poznamenejme je¹tì, ¾e realistický model (by» s~trochu jinými vlastnostmi)
150 by vznikl také tehdy, kdybychom místo arity omezily typy funkcí, øeknìme
151 na {\csc and}, {\csc or} a {\csc not}.
152
153 \s{Poznámka o~uniformitì:}
154 Dodejme, ¾e od~bì¾ných výpoèetním modelùm, jako je tøeba RAM, se hradlové
155 sítì li¹í jednou podstatnou vlastností -- ka¾dá sí» zpracovává výhradnì vstupy
156 jedné konkrétní velikosti. Chceme tedy najít nìjaký obecný pøedpis, který
157 pro ka¾dou velikost vstupu sestrojí pøíslu¹nou sí». Takovým výpoèetním modelùm
158 se øíká {\I neuniformní.}
159
160 A~co myslíme oním pøedpisem pro sestrojení sítì? Bude to pro nás prostì
161 nìjaký algoritmus (klasický, neparalelní) bì¾ící v~polynomiálním èase.
162 (Kdybychom dovolili i pomalej¹í algoritmy, mohli bychom bìhem konstrukce
163 provádìt nìjaký nároèný pøedvýpoèet a jeho výsledek zabudovat do struktury
164 sítì.)
165
166 \h{Hledá se jednièka}
167
168 Abychom si nový výpoèetní model osahali, zkusme nejprve sestrojit obvod,
169 který zjistí, zda se mezi jeho~$n$ vstupy vyskytuje alespoò jedna jednièka.
170 Jinými slovy vypoèítat $n$-vstupovou funkci {\csc or}.
171
172 \>{\I První øe¹ení:} zapojíme hradla za~sebe (sériovì). Èasová i prostorová
173 slo¾itost èiní $\Theta(n)$. Zde ov¹em vùbec nevyu¾íváme toho, ¾e by mohlo poèítat více
174 hradel souèasnì.
175
176 \>{\I Druhé øe¹ení:} Hradla budeme spojovat do~dvojic, pak výsledky z~tìchto dvojic opìt
177 do~dvojic a tak dále. Díky paralelnímu zapojení dosáhneme èasové slo¾itosti $\Theta(\log n)$,
178 prostorová slo¾itost zùstane lineární.
179
180 \twofigures{hloupy_or.eps}{Sériové øe¹ení}{1in}{chytry_or.eps}{Paralelní øe¹ení}{3in}
181
182 \h{Sèítání binárních èísel}
183
184 Zajímavìj¹í úlohou, její¾ paralelizace u¾ nebude tak triviální, je obyèejné
185 sèítání dvojkových èísel. Mìjme dvì èísla $x$ a $y$ zapsané ve~dvojkové soustavì. Jejich èíslice oznaème
186 $x_{n-1}\ldots x_0$ a $y_{n-1}\ldots y_0$, kde $i$-tý øád má váhu $2^i$.
187
188 K~seètení se~ihned nabízí pou¾ít starý dobrý \uv{¹kolní algoritmus sèítání pod sebou}, který
189 funguje ve~dvojkové soustavì stejnì dobøe jako v~desítkové. Sèítáme èísla zprava doleva,
190 v¾dy seèteme~$x_i$ s~$y_i$ a~pøièteme pøenos z~ni¾¹ího øádu. Tím dostaneme jednu èíslici
191 výsledku a~pøenos do~vy¹¹ího øádu. Formálnì bychom to mohli zapsat tøeba takto:
192 $$
193 z_i=x_i \oplus y_i \oplus c_i,
194 $$
195 kde $z_i$ je $i$-tá èíslice souètu, $\oplus$ znaèí operaci {\csc xor} (souèet modulo~2) a~$c_i$ je {\I pøenos}
196 z~$(i-1)$-ního øádu do~$i$-tého. Pøenos pøitom nastane tehdy, pokud se~nám potkají
197 dvì jednièky pod~sebou, nebo kdy¾ se~vyskytne alespoò jedna jednièka a~k~tomu
198 pøenos z~ni¾¹ího øádu. To je tehdy, kdy¾ mezi tøemi xorovanými èíslicemi jsou alespoò
199 dvì jednièky -- k~tomu se nám hodí ji¾ známý obvod pro majoritu:
200 $$
201 \eqalign{
202 c_{0} &= 0, \cr
203 c_{i+1} &= (x_i~\&~y_i)\lor(x_i~\&~c_i)\lor(y_i~\&~c_i).\cr
204 }
205 $$
206
207 O~tomto pøedpisu snadno doká¾eme, ¾e funguje (zkuste si to), nicménì pokud podle
208 nìj postavíme hradlovou sí», bude pomìrnì pomalá. Sí» si mù¾eme pøedstavit tak,
209 ¾e je slo¾ena z~nìjakých podsítí (\uv{krabièek}), které budou mít na~vstupu $x_i$,
210 $y_i$ a~$c_i$ a jejich výstupem bude $z_i$ a~$c_{i+1}$:
211
212 \figure{hloupe_scitani.eps}{Sèítání ¹kolním algoritmem}{1.5in}
213
214 Ka¾dá krabièka má sice uvnitø konstantní hloubku, ale její výstupy závisí na pøenosu
215 vypoèítaném pøedcházející krabièkou. Jednotlivé krabièky tedy musí urèitì le¾et
216 v~rùzných vrstvách sítì. Celkovì má tedy sí» $\Theta(n)$ hladin a také $\Theta(n)$
217 hradel. Oproti sekvenènímu algoritmu jsme si tedy vùbec nepomohli.
218
219 \h{Pøenosy v~blocích}
220
221 Jak sèítání zrychlit? To, co nás pøi sèítání brzdí, jsou evidentnì pøenosy mezi
222 jednotlivými øády. Kdybychom je dokázali spoèítat rychleji, máme vyhráno -- souèet
223 u¾ získáme jednoduchým {\csc xor}ováním, které zvládneme paralelnì v~èase $\Theta(1)$.
224 Uva¾ujme tedy nad zpùsobem, jak pøenosy spoèítat paralelnì.
225
226 Podívejme se na~libovolný {\I blok} v~na¹em souètu. Tak budeme øíkat èíslùm
227 $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.
228
229 \figure{blok_scitani.eps}{Blok souètu}{3in}
230
231 Pro konkrétní sèítance se tedy mù¾eme na blok dívat jako na nìjakou funkci,
232 která dostane jednobitový vstup (pøenos zespoda) a vydá jednobitový výstup (pøenos
233 nahoru). To je nám milé, nebo» takové funkce existují pouze ètyøi:
234 $$\vbox{\halign{$f(x) = #$\hfil &\qquad # \hfil\cr
235 0&konstantní {\bo 0}, blok {\I pohlcuje} pøenos \cr
236 1&konstantní {\bo 1}, blok {\I vytváøí} pøenos \cr
237 x&identita (znaèíme {\tt <}), blok {\I kopíruje} pøenos \cr
238 \neg{x}&negace, uká¾eme, ¾e nenastane \cr
239 }}$$
240 Této funkci budeme øíkat {\I chování} pøíslu¹ného bloku.
241
242 {\I Jednobitové bloky} se pøitom chovají velice jednodu¹e:
243
244 \figure{bloky_1bit.eps}{Tabulka triviálních blokù}{1.1in}
245
246 Blok prvního druhu v¾dy pøedává nulový pøenos, a» u¾ do~nìj vstoupí jakýkoliv.
247 Poslední blok naopak sám o~sobì pøenos vytváøí, a» dostane cokoliv.
248 Oba bloky prostøední se chovají tak, ¾e samy o~sobì ¾ádný pøenos nevytvoøí,
249 ale~pokud do~nich nìjaký pøijde, tak~také odejde.
250
251 {\I Vìt¹í bloky} mù¾eme rozdìlit na èásti a podle jejich chování urèit,
252 jak se chová celý blok. Mìjme blok~$B$ slo¾ený z~men¹ích podblokù~$H$ (horní)
253 a~$D$ (dolní), jejich¾ chování u¾ známe. Z~toho mù¾eme odvodit, jak se chová celý blok:
254
255 \figure{tabulka_skladani_bloku.eps}{Skládání chování blokù}{1.3in}
256
257 Pokud vy¹¹í blok pøenos pohlcuje, pak a»~se u¾~ni¾¹í blok chová jakkoli, slo¾ení
258 obou blokù musí v¾dy pohlcovat. V~prvním øádku tabulky jsou tudí¾ nuly. Analogicky,
259 pokud vy¹¹í blok generuje pøenos, tak~ten ni¾¹í na~tom nic nezmìní. V~druhém
260 øádku tabulky jsou tedy samé jednièky. Zajímavìj¹í pøípad nastává, pokud vy¹¹í blok
261 kopíruje -- tehdy zále¾í èistì na~chování ni¾¹ího bloku.
262
263 V¹imnìme si, ¾e~skládání chování blokù je vlastnì úplnì obyèejné skládání
264 funkcí. Nyní bychom mohli prohlásit, ¾e~budeme poèítat nad~tøíprvkovou abecedou,
265 a~¾e~celou tabulku doká¾eme spoèítat jedním jediným hradlem. Pojïme si v¹ak
266 rozmyslet, jak~bychom takovouto vìc popsali èistì binárnì. Jak tedy tyto tøi stavy
267 popisovat pouze nìkolika bity?
268
269 Evidentnì nám k tomuto binárnímu zakódování tøí stavù budou staèit bity dva.
270 Oznaème si je jako $p$ a $q$. Tato dvojice mù¾e nabývat hned ètyø mo¾ných hodnot,
271 kterým pøiøadíme tøi mo¾ná chování bloku. Toto kódování mù¾eme zvolit zcela
272 libovolnì, ale pokud si ho zvolíme ¹ikovnì, u¹etøíme si dále práci pøi kompozici.
273 Zvolme si tedy kódování takto:
274 $$
275   (1,*) = \hbox{\tt <} \qquad
276   (0,0) = \hbox{\bo 0} \qquad
277   (0,1) = \hbox{\bo 1}.
278 $$
279 Tomu, ¾e blok kopíruje, odpovídá dvojice $p = 1$, $q = \<cokoliv.>$ V~ostatních
280 pøípadech bude~$p$ nulové a~$q$ nám bude øíkat, co je na~výstupu pøíslu¹ného bloku.
281 Jinými slovy $p = 0$ znamená, ¾e funkce je konstanta, pøièem¾ $q$ øíká jaká; naproti
282 tomu $p = 1$~znamená, ¾e funkce je identita, a»~u¾~je $q$ cokoli.
283
284 V~tomto kódování mù¾eme na¹i tabulku popsat následovnì:
285 $$\eqalign{
286    p_B &= p_H \land p_D,\cr
287    q_B &= (\neg{p_H} \land q_H) \lor (p_H \land q_D).
288 }$$
289
290 \h{Paralelní sèítání}
291
292 Z~popisu chování blokù u¾ je jenom krùèek k~paralelnímu pøedpovídání pøenosù,
293 a~tím i k~paralelní sèítaèce. Bez újmy na~obecnosti budeme pøedpokládat,
294 ¾e~poèet bitù vstupních èísel je mocnina dvojky, jinak si vstup doplníme
295 nulami, co¾ výsledný èas bìhu algoritmu zhor¹í maximálnì konstanta-krát.
296
297 Algoritmus bude rozdìlen na~dvì èásti. V~první èásti spoèítá chování
298 v¹ech {\I pøirozených blokù} -- tak budeme øíkat blokùm, jejich¾ velikost
299 je mocnina dvojky a pozice je dìlitelná velikostí. Nejprve v~konstantním
300 èase spoèítá chování blokù velikosti~1, ty pak spojí do dvojic, dvojice
301 zase do dvojic atd., obecnì v~$i$-tém kroku spoète chování v¹ech pøirozených
302 blokù velikosti~$2^i$.
303
304 V~druhé èásti pak dopoèítává pøenosy, a~to tak, aby v~$i$-tém kroku byly známy
305 pøenosy do~øádù dìlitelných~$2^{\log n - i}$. V~nultém kroku tedy pouze $c_0=0$
306 a~$c_n$, který spoèítá z~$c_0$ pomocí chování bloku $\left< 0,n \right>$.
307 V~prvním kroku pomocí $\left< 0,n/2 \right>$ dopoèítá $c_{n/2}$,
308 v~druhém pomocí $\left< 0,n/4 \right>$ spoèítá $c_{n/4}$ a pomocí
309 $\left< n/2,3/4\cdot n \right>$ dostane $c_{3/4\cdot n}$ atd.
310 Obecnì v~$i$-tém kroku pou¾ívá chování blokù velikosti $2^{\log n - i}$.
311
312 \s{Sèítací sí»} tedy bude vypadat takto:
313 \algo
314 \:$\Theta(1)$ hladin výpoètu chování blokù velikosti~1.
315 \:$\Theta(\log n)$ hladin poèítajících chování pøirozených blokù velikosti~$2^i$.
316 \:$\Theta(\log n)$ hladin dopoèítávajících pøenosy \uv{zahu¹»ováním}.
317 \:$\Theta(1)$ hladin na samotné seètení: $\forall i: z_i = x_i \oplus y_i \oplus c_i$.
318 \endalgo
319
320 \figure{1_9_deleni_bloku.eps}{Výpoèet pøenosu}{2.5in}
321
322 Algoritmus tedy pracuje v~èase $\Theta(\log n)$. Hradel je pou¾ito lineárnì: pøi
323 výpoètu chování blokù na jednotlivých hladinách poèet hradel exponenciálnì klesá
324 od~$n$ k~1, bìhem zahu¹»ování pøenosù naopak exponenciálnì stoupá od~1 k~$n$.
325 Obì geometrické øady mají souèet $\Theta(n)$.
326
327 \h{Paralelní násobení}
328
329 Podobnì jako u~sèítání si vzpomeneme na~¹kolní algoritmus -- tentokráte v¹ak pro násobení.
330 To fungovalo tak, ¾e~jsme si jedno ze~dvou binárních èísel na~vstupu (øíkejme mu tøeba $x$) $n$-krát posouvali. Tam kde pak byly v~èísle~$y$ jednièky, pøíslu¹né kopie $x$ jsme seèetli. Jinými slovy tedy násobení umíme pøevést na~nìjaké posuny (ty lze realizovat pouze \uv{pøedrátováním} -- nic nás nestojí), násobení jedním bitem (co¾ je 
331 {\csc and} ) a~nakonec potøebujeme výsledných~$n$ èísel seèíst.
332 \figure{skolni_scitani.eps}{©kolní sèítání}{2in}
333
334 Jak nyní seèíst $n$ $n$-bitových èísel..? Nabízí se vyu¾ít osvìdèený \uv{stromeèek} -- sèítat dvojice èísel, výsledky pak opìt po~dvojicích seèíst, a¾ na~konci vyjde jediný výsledek.
335 \figure{stromecek.eps}{Stromeèek}{1.4in}
336
337 Toto øe¹ení by v¹ak vedlo na~èasovou slo¾itost $\Theta (\log^2 n)$, nebo» sèítat umíme v~èase $\Theta (\log n)$. To je sice dle na¹ich mìøítek
338 docela efektivní, ale pøekvapivì to jde je¹tì lépe -- toti¾ na~$\Theta (\log n)$ hladin. Této 
339 slo¾itosti dosáhneme malým trikem.
340
341 Vymyslíme obvod konstantní hloubky, který na~vstupu dostane tøi èísla. Odpoví pak dvìma èísly
342 takovými, ¾e budou mít stejný souèet jako pùvodní tøi èísla. Jinými slovy pomocí
343 tohoto obvodu budeme umìt seètení tøí èísel pøevést na seètení dvou èísel.
344
345 \figure{obvod.eps}{$x+y+z = p+q$}{0.3in}
346
347 V¹imnìme si, ¾e~kdy¾ sèítáme tøi bity, mù¾e být pøenos do~vy¹¹ího øádu nula èi~jednièka. Vezmeme si tedy bity $x_i$, $y_i$, $z_i$ a~ty seèteme. To nám dá dvoubitový výsledek, pøièem¾ ni¾¹í bit z~tohoto výsledku po¹leme do~èísla~$p$, vy¹¹í do~èísla~$q$.
348
349 \figure{obvod_real.eps}{Redukování sèítání}{1.2in}
350
351 Toto zredukování sèítání nám nyní umo¾ní opìt stavit strom, by» o malièko slo¾itìj¹í.
352
353 \figure{sl_stromecek.eps}{Slo¾itìj¹í stromeèek}{0.9in}
354
355 Pokud jsme mìli na~zaèátku $n$ èísel, po~první redukci nám jich zbývá jen $2/3 \cdot n$ a~obecnì v~$k$-té hladiné $(2/3)^k \cdot n$. Znamená to, ¾e èísel nám ubývá exponenciálnì, tak¾e poèet hladin bude logaritmický. Redukující obvod je pøi tom jen konstantnì hluboký, tak¾e celé redukování zvládneme v~èase $\Theta (\log n)$. Na~konci Slo¾itìj¹ího stromeèku pak máme umístìnou jednu obyèejnou sèítaèku, která zbývající dvì èísla seète v~logaritmickém èase.
356
357 Seètení v¹ech $n$ èísel tedy zabere $\Theta (\log n)$ hladin.
358
359 Kdy¾ se nyní vrátíme k~násobení, zbývá nám vyøe¹it posouvání a~{\csc and}ování. Uvìdomme si, ¾e to je plnì paralelní a~zvládneme ho za~konstantnì mnoho hladin. Celé násobení tedy zvládneme v~logaritmickém èase.
360
361 \bye