From: Martin Mares Date: Sat, 19 Nov 2011 21:11:31 +0000 (+0100) Subject: Hradla: Uklid maker X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;ds=sidebyside;h=1b629daa4cb37c907c051aca7f5a96a53f31b941;p=ads2.git Hradla: Uklid maker --- diff --git a/5-hradla/5-hradla.tex b/5-hradla/5-hradla.tex index 95ba29f..65dcd6c 100644 --- a/5-hradla/5-hradla.tex +++ b/5-hradla/5-hradla.tex @@ -2,7 +2,11 @@ \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 @@ -40,8 +44,8 @@ Ta po \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, @@ -148,7 +152,7 @@ t 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é @@ -167,7 +171,7 @@ s 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 @@ -192,7 +196,7 @@ v $$ 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ò @@ -220,7 +224,7 @@ hradel. Oproti sekven 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 @@ -283,8 +287,8 @@ tomu $p = 1$~znamen 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í} @@ -334,7 +338,7 @@ a v \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