]> mj.ucw.cz Git - ads2.git/blob - 5-hradla/5-hradla.tex
Oziveni hradlovych siti a bitonickeho trideni, zatim bez uprav
[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 Výkon poèítaèù nelze zvy¹ovat donekoneèna a pøesto¾e ji¾ pìkných pár let platí,
8 ¾e se jejich rychlost s~èasem exponenciálnì zvìt¹uje, jednou urèitì narazíme
9 pøinejmen¹ím na~fyzikální limity.
10
11 Kdy¾ tedy nemù¾eme zvy¹ovat rychlost jednoho procesoru, jak poèítat rychleji?
12 Øe¹ením by mohlo být poøídit si procesorù víc. U¾~dnes na~bì¾ném PéCéèku máme
13 k~dispozici vícejádrové procesory, díky nim¾ mù¾eme vyu¾ít pararelní poèítání
14 a úlohu øe¹it tak, ¾e práci ¹ikovnì rozdìlíme mezi procesory (èi jádra) a
15 zamìstnáme je pøi~výpoètu v¹echny.
16
17 My se podíváme na~abstraktní výpoèetní model, který je je¹tì paralelnìj¹í.
18 Techniky, které si uká¾eme na~tomto modelu, se v¹ak dají pøekvapivì vyu¾ít i~pøi~reálném
19 paralelizování na~nìkolika málo procesorech. Konec koncù i proto, ¾e vnitøní
20 architektura procesoru se na¹emu modelu velmi podobá. Budeme se zabývat 
21 jednoduchým modelem paralelního poèítaèe, toti¾ hradlovou sítí.
22
23 \h{Hradlové sítì}
24
25 \s{Definice:} {\I Hradlo} je prvek, který umí vyhodnocovat nìjakou funkci
26 nad~koneènou abecedou $\Sigma$.
27
28 Obecnì se na~hradlo díváme jako na~funkci $f: {\Sigma}^{k} \rightarrow \Sigma$, která dostane $k$ vstupù
29 a~vrátí jeden výstup, pøièem¾ hodnoty, nad~kterými pracuje, budou z~nìjaké koneèné
30 abecedy -- tedy z~nìjaké koneèné mno¾iny symbolù $\Sigma$. Písmenku $k$ zde øíkáme {\I arita
31 hradla}.
32
33 \s{Pøíklad:} Èasto studujeme hradla booleovská (pracující nad abecedou $\{0,1\}$), která poèítají logické funkce.
34
35 Z~nich nejèastìji potkáme:
36
37 \itemize\ibull
38 \:nulární: to jsou konstanty (FALSE=0, TRUE=1),
39 \:unární: napø. negace (znaèíme~$\lnot$),
40 \:binární: logický souèin ({\csc and},~$\land$), souèet ({\csc or},~$\lor$), ...
41 \endlist
42
43 \>Hradla kreslíme tøeba následovnì:
44
45 \figure{hradlo_and.eps}{Binární hradlo provádící logickou operaci {\csc and}.}{1in}
46
47 Jednotlivá hradla mù¾eme navzájem urèitým zpùsobem propojovat a vytváøet
48 z nich {\I hradlové sítì}. Pokud pou¾íváme pouze booleovská hradla, øíkáme takto vytvoøeným
49 sítím {\I booleovské obvody}. Pokud pracujeme s~operacemi nad nìjakou obecnìj¹í (ale koneènou) 
50 mno¾inou symbolù (abecedou), nazývají se {\I kombinaèní obvody.}
51
52 Ka¾dá hradlová sí» má nìjaké vstupy, nìjaké výstupy a uvnitø jsou propojovaná
53 hradla. Ka¾dý vstup hradla je pøipojen buïto na~nìkterý ze~vstupù sítì nebo
54 na~výstup jiného hradla. Výstupy hradel mohou být propojeny na~vstupy dal¹ích
55 hradel (mohou se vìtvit), nebo na výstupy sítì. Pøitom máme zakázáno vytváøet
56 cykly. 
57
58 Ne¾ si øekneme formální definici, podívejme se na obrázek.
59
60 \figure{hradlova_sit.eps}{Hradlová sí» -- tøívstupová verze funkce {\I majorita}.}{3in}
61
62 Obrazek znázoròuje hradlovou sí», která poèítá, zda je alespoò na~dvou ze~vstupù
63 jednièka. Pojïme si ale {\I hradlovou sí»} definovat formálnì.
64
65 \s{Definice:} {\I Hradlová sí»} je urèena:
66 \itemize\ibull
67 \:{\I abecedou} $\Sigma$ (to je nìjaká koneèná mno¾ina symbolù, obvykle $\Sigma=\{0,1\}$);
68 \:po dvou disjunktními koneènými mno¾inami $I$~({\I vstupy}), $O$~({\I výstupy}) \hfil\break a~$H$~({\I hradla});
69 \:acyklickým orientovaným multigrafem~$(V,E)$, kde~$V = I \cup O \cup H$;
70 \:zobrazením~$F$, které ka¾dému hradlu $h\in H$ pøiøadí nìjakou funkci~$F(h):
71   \Sigma^{a(h)} \rightarrow \Sigma$, co¾ je funkce, kterou toto hradlo vykonává.
72   Èíslu $a(h)$ øíkáme {\I arita} hradla~$h$;
73 \:zobrazením~$z: E \rightarrow {\bb N}$, které ka¾dé hranì vedoucí do~nìjakého
74   hradla pøiøazuje nìkterý ze vstupù tohoto hradla.
75 \endlist
76
77 \>Pøitom jsou splnìny následující podmínky:
78
79 \itemize\ibull
80 \:$\forall i \in I: \deg^{in}(i)=0$ (do~vstupù nic nevede);
81 \:$\forall o \in O: \deg^{in}(o)=1~\land~\deg^{out}(o)=0$ (z~výstupù nic nevede a do~ka¾dého vede právì jedna hrana);
82 \:$\forall h \in H: \deg^{in}(v)=a(v)$ (do~ka¾dého hradla vede tolik hran, kolik je jeho arita);
83 \:$\forall h \in H~\forall j: 1\le j\le a(h)$ existuje právì jedena hrana~$e$ taková, ¾e~$e$ konèí v~$h$ a~$z(e)=j$, 
84   (v¹echny vstupy hradel jsou zapojeny).
85 \endlist
86
87 \s{Pozorování:} Kdybychom pøipustili hradla s~libovolnì vysokým poètem vstupù, mohli
88 bychom libovolný problém se vstupem délky~$n$ vyøe¹it jedním hradlem o~$n$~vstupech,
89 kterému bychom pøiøadili funkci, která by na¹i úlohu rovnou vyøe¹ila. Tento model
90 v¹ak není ani realistický, ani pìkný. Proto pøijmìme omezení, ¾e~arity v¹ech hradel
91 budou omezeny nìjakou pevnou konstantou $k$ (uká¾e se, ¾e nám bude staèit dvojka
92 a~vystaèíme si tedy pouze s nulárními, unárními a binárními hradly). 
93 Následující obrázky ukazují, jak hradla o~více vstupech nahradit dvouvstupovými:
94
95 \twofigures{hradlo_ternor.eps}{Trojvstupové hradlo \csc or.}{0.5in}{hradlo_ternbior.eps}{Jeho nahrazení 2-vstupovými hradly.}{0.6in}
96
97
98 Nyní bychom je¹tì mìli definovat, co taková hradlová sí» vlastnì poèítá a~jak
99 její výpoèet probíhá.
100
101 \s{Definice:} {\I Výpoèet sítì} probíhá po~{\I taktech.} V nultém taktu jsou definovány pouze 
102 hodnoty na~vstupech sítì a na~výstupech hradel arity 0. Mù¾eme si to pøedstavit
103 tak, ¾e na~zaèátku nemá ¾ádné hradlo definovánu výstupní hodnotu (a¾ na ji¾ 
104 zmínìná hradla nulární). V~ka¾dém dal¹ím taktu pak vydají výstup hradla, která
105 na~konci minulého taktu mìla definovány v¹echny hodnoty na vstupech. Jakmile
106 budou po~nìjakém koneèném poètu taktù definované i hodnoty v¹ech výstupù, sí»
107 se zastaví a~vydá výsledek.
108
109 \s{Pozorování:} Proto¾e je sí» acyklická, je jasné, ¾e jakmile jednou nìjaké hradlo vydá
110 výstup, tak se tento výstup bìhem dal¹ího výpoètu sítì ji¾ nezmìní.
111
112 \figure{vypocet_site.eps}{Výpoèet hradlové sítì.}{6cm}
113
114 \>Podle toho, jak sí» poèítá, si ji mù¾eme rozdìlit na~vrstvy:
115
116 \s{Definice:} {\I $i$-tá vrstva $S_i$} obsahuje právì takové vrcholy~$v$, pro~které nejdel¹í cesta ze~vstupù
117 sítì do $v$ má délku rovnou~$i$.
118
119 \s{Pozorování:} V¹imnìme si, ¾e v $i$-tém taktu vydají hodnoty právì hradla z $S_i$.
120  
121 Dává tedy smysl prohlásit za~{\I èasovou slo¾itost} sítì poèet
122 jejích vrstev. Podobnì {\I prostorovou slo¾itost} definujeme jako poèet hradel v~síti.
123
124 \s{Pøíklad:} Sestrojme sí», která zjistí, zda se mezi jejími~$n$ vstupy
125 vyskytuje alespoò jedna jednièka.
126
127 \>{\I První øe¹ení:} zapojíme hradla za~sebe (sériovì). Èasová i prostorová
128 slo¾itost odpovídají~$\Theta(n)$. Zde ov¹em vùbec nevyu¾íváme toho, ¾e by mohlo poèítat více
129 hradel souèasnì.
130
131 \figure{hloupy_or.eps}{Hradlová sí», která zjistí, zdali je na vstupu alespoò jedna jednièka.}{0.7in}
132
133 \>{\I Druhé øe¹ení:} Hradla budeme spojovat do~dvojic, pak výsledky z~tìchto dvojic opìt
134 do~dvojic a tak dále. Díky paralelnímu zapojení dosáhneme èasové slo¾itosti $\Theta(\log n)$,
135 prostorová slo¾itost zùstane lineární.
136
137 \figure{chytry_or.eps}{Chytøej¹í øe¹ení stejného problému pro vstup velikosti 16.}{3in}
138
139 Minule jsme si zavedli paralelní výpoèetní model, ve kterém si nyní nìco naprogramujeme \dots
140
141 \h{Sèítání binárních èísel}
142
143 Mìjme dvì èísla $x$ a $y$ zapsané ve~dvojkové soustavì. Jejich èíslice oznaème
144 $x_{n-1}\ldots x_0$ a $y_{n-1}\ldots y_0$, kde $i$-tý øád má váhu $2^i$. Nyní budeme chtít tato èísla
145 seèíst.
146
147 K tomuto úèelu se~ihned nabízí pou¾ít starý dobrý \uv{¹kolní algoritmus}, který
148 funguje ve~dvojkové soustavì stejnì dobøe jako v~desítkové. Zkrátka sèítáme èísla
149 zprava doleva. V¾dy seèteme pøíslu¹né èíslice pod~sebou a~pøièteme pøenos z~ni¾¹ího
150 øádu. Tím dostaneme jednu èíslici výsledku a~pøenos do~vy¹¹ího øádu. Formálnì
151 bychom to mohli zapsat tøeba takto:
152 $$
153 z_i=x_i \oplus y_i \oplus c_i,
154 $$
155 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}
156 z~$(i-1)$-ního øádu do~$i$-tého. Pøenos pøitom nastane tehdy, pokud se~nám potkají
157 dvì jednièky pod~sebou, nebo kdy¾ se~vyskytne alespoò jedna jednièka a~k~tomu
158 pøenos z~ni¾¹ího øádu. Jinými slovy tehdy, kdy¾ ze~tøí xorovaných èíslic jsou alespoò
159 dvì jednièky (pomocí obvodu pro majoritu z minulé pøedná¹ky lehce zkonstruujeme):
160 $$
161 \eqalign{
162 c_{0} &= 0, \cr
163 c_{i+1} &= (x_i~\&~y_i)\lor(x_i~\&~c_i)\lor(y_i~\&~c_i).\cr
164 }
165 $$
166
167 Takovéto sèítání sice perfektnì funguje, nicménì je bohu¾el pomìrnì pomalé.
168 Pokud bychom stavìli hradlovou sí» podle tohoto pøedpisu, byla by slo¾ená z~nìjakých
169 podsítí (\uv{krabièek}), které budou mít na~vstupu $x_i$, $y_i$ a~$c_i$ a jejich výstupem
170 bude $z_i$ a~$c_{i+1}$. 
171
172 \figure{hloupe_scitani.eps}{Sèítání ¹kolním algoritmem.}{1.5in}
173
174 V¹imìme si, ¾e~ka¾dá krabièka závisí na~výstupu té pøedcházející. Jednotlivé
175 krabièky tedy musí urèitì le¾et na~rùzných hladinách. Celkovì bychom museli pou¾ít
176 $\Theta{(n)}$ hladin a~jeliko¾ je ka¾dá krabièka konstantnì velká, také $\Theta{(n)}$ hradel. To dává
177 lineární èasovou i~prostorovou slo¾itost, èili oproti sekvenènímu algoritmu jsme si nepomohli.
178
179 Zamysleme se nad tím, jak by se proces sèítání mohl zrychlit.
180
181 \h{Pøenosy v~blocích}
182 Jediné, co nás pøi sèítání brzdí, jsou pøenosy mezi jednotlivými øády. Ka¾dý øád,
183 aby~vydal souèet, musí poèkat na~to, a¾~dopoèítají v¹echny pøedcházející øády.
184 Teprve pak se~toti¾ dozví pøenos. Kdybychom ov¹em pøenosy dokázali spoèítat
185 nìjakým zpùsobem paralelnì, máme vyhráno. Jakmile známe v¹echny pøenosy, souèet
186 u¾~zvládneme dopoèítat na~konstantnì mnoho hladin -- tedy v~konstantním èase.
187
188 Podívejme se na~libovolný {\I blok} v~na¹em souètu. Tak budeme øíkat èíslùm
189 $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.
190
191 \figure{blok_scitani.eps}{Blok souètu.}{3in}
192
193 Z tohoto pohledu se mù¾eme na blok také dívat jako na nìjakou funkci, která
194 dostane jednobitový vstup a vydá jednobitový výstup. To je nám pøíjemné, nebo» 
195 takových funkcí existují jenom ètyøi typy:
196 \numlist\ndotted
197 \:$f(x) = 0$,  ~~~~(0)
198 \:$f(x) = 1$,  ~~~~(1)
199 \:$f(x) = x$,  ~~~~($<$ -- kopírování)
200 \:$f(x) = \neg{x}$.
201 \endlist
202 Jak se za~chvíli uká¾e, poslední pøípad, kdy by~nìjaký blok pøedával opaèný
203 pøenos, ne¾ do~nìj vstupuje, navíc nikdy nemù¾e nastat. Pojïme si to rozmyslet.
204 Jednobitové bloky se chovají velice jednodu¹e:
205
206 \figure{bloky_1bit.eps}{Tabulka triviálních blokù.}{1.1in}
207
208 Z prvního bloku evidentnì v¾dy vyleze 0, a»~do~nìj vstoupí jakýkoli pøenos.
209 Poslední blok naopak sám o~sobì pøenos vytváøí, a»~ji¾ do~nìj vleze jakýkoliv.
210 Bloky prostøední se chovají stejnì, a~to tak, ¾e~samy o~sobì ¾ádný pøenos nevytvoøí,
211 ale~pokud do~nich nìjaký pøijde, tak~také odejde.
212
213 Mìjme nyní nìjaký vìt¹í blok~$C$ slo¾ený ze~dvou men¹ích podblokù $A$ a~$B$, jejich¾
214 chování u¾ známe. Z~toho mù¾eme odvodit, jak se chová celý blok:
215
216 \figure{tabulka_skladani_bloku.eps}{Skládání chování blokù.}{1.3in}
217
218 Pokud vy¹¹í blok pøenos pohlcuje, pak a»~se u¾~ni¾¹í blok chová jakkoli, slo¾ení
219 tìchto blokù musí v¾dy pohlcovat. V~prvním øádku tabulky jsou tudí¾ nuly. Analogicky,
220 pokud vy¹¹í blok generuje pøenos, tak~ten ni¾¹í na~tom nic nezmìní. V~druhém
221 øádku tabulky jsou tedy samé jednièky. Zajímavìj¹í pøípad nastává, pokud vy¹¹í blok
222 kopíruje -- tehdy zále¾í èistì na~chování ni¾¹ího bloku.
223
224 V¹imnìme si, ¾e~skládání chování blokù je vlastnì úplnì obyèejné skládání
225 funkcí. Nyní bychom mohli prohlásit, ¾e~budeme poèítat nad~tøíprvkovou abecedou,
226 a~¾e~celou tabulku doká¾eme spoèítat jedním jediným hradlem. Pojïmì si v¹ak
227 rozmyslet, jak~bychom takovouto vìc popsali èistì binárnì. Jak tedy tyto tøi stavy
228 popisovat pouze nìkolika bity?
229
230 Evidentnì nám k tomuto binárnímu zakódování tøí stavù budou staèit bity dva.
231 Oznaème si je jako $p$ a $q$. Tato dvojice mù¾e nabývat hned ètyø mo¾ných hodnot,
232 kterým pøiøadíme tøi mo¾ná chování bloku. Toto kódování mù¾eme zvolit zcela
233 libovolnì, ale pokud si ho zvolíme ¹ikovnì, u¹etøíme si dále práci pøi kompozici.
234 Zvolme si tedy kódování takto:
235
236 \itemize\ibull
237 \:$(1,*) = <$,
238 \:$(0,0) = 0$,
239 \:$(0,1) = 1$
240 \endlist
241
242 Tomu, ¾e blok kopíruje, odpovídá dvojice $p = 1$; $q =$ \<cokoliv>. V~ostatních
243 pøípadech bude~$p$ nulové a~$q$ nám bude øíkat, co je na~výstupu pøíslu¹ného bloku.
244 Jinými slovy $p = 0$ znamená, ¾e funkce je konstanta, pøièem¾ $q$ øíká jaká; naproti
245 tomu $p = 1$~znamená, ¾e funkce je identita, a»~u¾~je $q$ cokoli.
246
247 Pojïme si nyní ukázat, jak bude celé skládání blokù vypadat. Rozmysleme si,
248 kdy je~$p$ celého dvojbloku jednièkové, tedy kdy celý dvojblok kopíruje. To nastane
249 tehdy, pokud kopírují obì jeho èásti, a tedy  $p = p_a~\&~p_b$. Dále $q$ bude rovno jednièce,
250 pokud $q = (\neg{p_a}~\&~q_a) \lor (p_a~\&~q_b)$.
251
252 Skládání chování blokù lze tedy popsat buï ternárnì -- tabulkou, ale lze to
253 i~binárnì vý¹e uvedeným pøedpisem.
254
255 Nyní si tedy mù¾eme dopøedu vypoèítat chování bloku velikosti jedna, poté
256  z~nich skládáním blokù velikosti dva, dál velikosti ètyøi, osm, atd \dots
257
258 \h{Paralelní sèítání}
259
260 Paralelní algoritmus na~sèítání u¾~zkonstruujeme pomìrnì snadno. Bez újmy
261 na~obecnosti budeme pøedpokládat, ¾e~poèet bitù vstupních èísel je mocnina dvojky,
262 jinak si vstup doplníme nulami, co¾ výsedný èas bìhu algoritmu zhor¹í maximálnì
263 konstanta-krát.
264
265 \algo
266 \:Spoèteme chování blokù velikosti~1. ($\O(1)$ hladin)
267 \:Postupnì poèítáme chování blokù\foot{myslíme \uv{pøirozenì zarovnané} bloky, tedy takové, jejich¾ poloha je násobkem velikosti} velikosti 2, 4, 8, ..., $2^k$. 
268   ($\O(\log n)$ hladin, na~nich¾ se skládají bloky)
269 \:$c_0 \leftarrow 0$ (pøenos do nejni¾¹ího øádu je v¾dy 0)
270 \:Urèíme $c_n$ podle $c_0$ a chování (jediného) bloku velikosti~$n$.
271 \:Postupnì dopoèítáme pøenosy na~hranicích dìlitelných $2^k$ \uv{zahu¹»ováním}:
272   jakmile víme $c_{2^k}$, mù¾eme dopoèítat $c_{2^k+2^{k-1}}$ podle
273   chování bloku $\left< 2^k, 2^k+2^{k-1}\right>$. ($\O(\log n)$ hladin,
274   na~nich¾ se dosazuje)
275 \:Seèteme: $\forall i: z_i = x_i \oplus y_i \oplus c_i$.
276 \endalgo
277
278 \figure{1_9_deleni_bloku.eps}{Výpoèet pøenosu.}{2.5in}
279
280 Algoritmus pracuje v~èase $\O(\log n)$. Hradel je pou¾ito lineárnì: na~jednotlivých
281 hladinách kroku~2 poèet hradel exponenciálnì klesá od~$n$ k~1, na~hladinách kroku~5
282 exponenciálnì stoupá od~1 k~$n$, tak¾e dohromady se seète na~$\Theta(n)$.
283
284 \h{Paralelní násobení}
285
286 Podobnì jako u~sèítání si vzpomeneme na~¹kolní algoritmus -- tentokráte v¹ak pro násobení.
287 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 
288 {\csc and} ) a~nakonec potøebujeme výsledných~$n$ èísel seèíst.
289 \figure{skolni_scitani.eps}{©kolní sèítání.}{2in}
290
291 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.
292 \figure{stromecek.eps}{Stromeèek}{1.4in}
293
294 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
295 docela efektivní, ale pøekvapivì to jde je¹tì lépe -- toti¾ na~$\Theta (\log n)$ hladin. Této 
296 slo¾itosti dosáhneme malým trikem.
297
298 Vymyslíme obvod konstantní hloubky, který na~vstupu dostane tøi èísla. Odpoví pak dvìma èísly
299 takovými, ¾e budou mít stejný souèet jako pùvodní tøi èísla. Jinými slovy pomocí
300 tohoto obvodu budeme umìt seètení tøí èísel pøevést na seètení dvou èísel.
301
302 \figure{obvod.eps}{$x+y+z = p+q$}{0.3in}
303
304 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$.
305
306 \figure{obvod_real.eps}{Redukování sèítání}{1.2in}
307
308 Toto zredukování sèítání nám nyní umo¾ní opìt stavit strom, by» o malièko slo¾itìj¹í.
309
310 \figure{sl_stromecek.eps}{Slo¾itìj¹í stromeèek}{0.9in}
311
312 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.
313
314 Seètení v¹ech $n$ èísel tedy zabere $\Theta (\log n)$ hladin.
315
316 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ì paralelení a~zvládneme ho za~konstantnì mnoho hladin. Celé násobení tedy zvládneme v~logaritmickém èase.
317
318 \bye