\prednaska{5}{Hradlové sítì}{}
-\def\land{\mathbin{\&}}
+\def\NOT{{\csc not}}
+\def\AND{{\csc and}}
+\def\OR{{\csc or}}
+\def\XOR{{\csc xor}}
+\def\and{\mathbin{\&}}
®ivot nám pøiná¹í stále vìt¹í problémy, které obvykle vy¾adují stále více
výpoèetního výkonu. Rychlost poèítaèù sice posledních pár desetiletí stále
\itemize\ibull
\:nulární: to jsou konstanty ($\hbox{\csc false}=0$, $\hbox{\csc true}=1$),
-\:unární: identita a negace ({\csc not},~$\lnot$),
-\:binární: logický souèin ({\csc and},~$\land$), souèet ({\csc or},~$\lor$), \dots
+\:unární: identita a negace (\NOT,~$\lnot$),
+\:binární: logický souèin (\AND,~$\and$), souèet (\OR,~$\lor$), \dots
\endlist
Propojením hradel pak vznikne {\I hradlová sí».} Ne¾ vyøkneme formální definici,
Poznamenejme je¹tì, ¾e realistický model (by» s~trochu jinými vlastnostmi)
by vznikl také tehdy, kdybychom místo arity omezily typy funkcí, øeknìme
-na {\csc and}, {\csc or} a {\csc not}.
+na \AND, \OR{} a \NOT.
\s{Poznámka o~uniformitì:}
Dodejme, ¾e od~bì¾ných výpoèetním modelùm, jako je tøeba RAM, se hradlové
Abychom si nový výpoèetní model osahali, zkusme nejprve sestrojit obvod,
který zjistí, zda se mezi jeho~$n$ vstupy vyskytuje alespoò jedna jednièka.
-Jinými slovy vypoèítat $n$-vstupovou funkci {\csc or}.
+Jinými slovy vypoèítat $n$-vstupovou funkci \OR.
\>{\I První øe¹ení:} zapojíme hradla za~sebe (sériovì). Èasová i prostorová
slo¾itost èiní $\Theta(n)$. Zde ov¹em vùbec nevyu¾íváme toho, ¾e by mohlo poèítat více
$$
z_i=x_i \oplus y_i \oplus c_i,
$$
-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}
+kde $z_i$ je $i$-tá èíslice souètu, $\oplus$ znaèí operaci \XOR{} (souèet modulo~2) a~$c_i$ je {\I pøenos}
z~$(i-1)$-ního øádu do~$i$-tého. Pøenos pøitom nastane tehdy, pokud se~nám potkají
dvì jednièky pod~sebou, nebo kdy¾ se~vyskytne alespoò jedna jednièka a~k~tomu
pøenos z~ni¾¹ího øádu. To je tehdy, kdy¾ mezi tøemi xorovanými èíslicemi jsou alespoò
Jak sèítání zrychlit? To, co nás pøi sèítání brzdí, jsou evidentnì pøenosy mezi
jednotlivými øády. Kdybychom je dokázali spoèítat rychleji, máme vyhráno -- souèet
-u¾ získáme jednoduchým {\csc xor}ováním, které zvládneme paralelnì v~èase $\Theta(1)$.
+u¾ získáme jednoduchým \XOR{}ováním, které zvládneme paralelnì v~èase $\Theta(1)$.
Uva¾ujme tedy nad zpùsobem, jak pøenosy spoèítat paralelnì.
Podívejme se na~libovolný {\I blok} v~na¹em souètu. Tak budeme øíkat èíslùm
V~tomto kódování mù¾eme na¹i tabulku popsat následovnì:
$$\eqalign{
- p_B &= p_H \land p_D,\cr
- q_B &= (\neg{p_H} \land q_H) \lor (p_H \land q_D).
+ p_B &= p_H \and p_D,\cr
+ q_B &= (\neg{p_H} \and q_H) \lor (p_H \and q_D).
}$$
\h{Paralelní sèítání}
\figure{skolni_nasobeni.eps}{©kolní násobení}{2in}
Ve~dvojkové soustavì je to je¹tì jednodu¹¹í: násobení jednou èíslicí je prostý
-{\csc and.} Paralelnì tedy vytvoøíme v¹echna posunutí a spoèítáme v¹echny {\csc and}y.
+\AND. Paralelnì tedy vytvoøíme v¹echna posunutí a spoèítáme v¹echny \AND{}y.
To v¹e stihneme za 1~takt výpoètu.
Zbývá seèíst $n$~èísel, z~nich¾ ka¾dé má $\Theta(n)$ bitù. Mohli bychom opìt