\input ../lecnotes.tex

\prednaska{1}{Paralelní algoritmy}{(zapsal Jirka Fajfr a Ján Èerný)}


\h{Hradlo}
Jedná se o obvod provádìjící elementární binární operace (AND, OR, ...). Ka¾dé hradlo má k-vstupù a právì jeden výstup. Mù¾eme si ho pøedstavit jako funkci
$$f : \{0,1\}^{k} \rightarrow \{0,1\}$$
\>kde $k$ je poèet vstupù. Pøíklad dvouvstupového hradla provádìjícího operaci AND je na Obrázku 1.1
\figure{1_1_hradlo.eps}{Obrázek 1.1 - Hradlo provádìjící logickou operaci AND se dvìma vstupy}{4cm}
%\>speciálním pøípadem je hradlo s poètem vstupù $k$ rovným nule. Toto hradlo pova¾ujeme za konstantu. 

\h{Druhy hradlových sítí}
\itemize\ibull
\:boolovské obvody (maximálnì dvoustavová hradla)
\:kombinaèní obvod (hradla s mnoha stavy)
\endlist

\h{Hradlová sí»}
Hradlová sí» je obvod slo¾ený ze soustavy navzájem propojených hradel, vstupních a výstupních portù. Dohromady tvoøí acyklický orientovaný graf s vrcholy $V = I \cup O \cup H$ a hranami $E$. Hradlová sí» musí splòovat následující podmínky
\numlist{\ndotted}
\:Výsledný graf je acyklický
\:Do ¾ádného vstupu (hradla) nevede více ne¾ jedna hrana
\:V¹echny kromì vstupních portù jsou zapojeny
\:Do vstpních portù nic nevede (vstupní port není výsledkem ¾ádného hradla)
\:Výstupní porty nejsou zapojeny (nejsou zdrojem ¾ádného hradla)
\endlist   

\s{Vícevstupové hradlo s neomezeným poètem vstupù:} nepraktické (nerealizovatelné) vìt¹inou se poèet vstupù omezuje konstantou (\#)
\figure{1_2_vice_vstupove_hradlo.eps}{Obrázek 1.2 - Trojvstupové hradlo na funkci AND}{3cm}

\s{Vícevstupové hradlo:} hradlo z Obrázku 1.2, lze jednodu¹e simulovat soustavou dvou dvouvstupových hradel
\figure{1_3_vice_vstupove_hradlo.eps}{Obrázek 1.3 - Dvouvstupové hradlo simulující funkci trojvstupového AND}{3cm}

\s{Definice:} {\I Hradlová sí»} je obvod slo¾ený ze soustavy hradel tvoøící acyklický orientovaný graf s vrcholy $V = I \cup O \cup H$ \foot{I - vstupní porty, O - výstupní porty, H - hradla} a hranami $E$, takovými, ¾e 
\numlist{\ndotted}
\:$\forall v \in I : deg^{+}(v) = 0$
\:$\forall v \in O : deg^{-}(v) = 0, deg^{+}(v) = 1$
\:$\forall v \in H: \exists f(v) : \left\{0,1\right\}^{a(v)} \rightarrow \left\{0,1\right\}$\ \ \ \foot{$f(v)$ je funkce vykonávaná hradlem a $a(v)$ je arita této funkce}
\endlist

\>$deg^{+}(v) = a(v)$, hrany vstupující do hradla jsou oèíslovány $1 \ldots a(v)$.
Navíc $\forall v \in H : a(v) \leq 2$.

\s{Definice:} {\I Konstanta} je hradlo $v$, pro které platí $\#vstupù=0$, tedy ¾e nemá ¾ádné vstupy. 

\s{Definice:} {\I Výpoèet sítì} probíhá v taktech. V 0tém taktu jsou definované právì vstupy.
V i-tém taktu vydají výsledek hradla, která mìla definována vstupy v $(i - 1)$tém taktu. 
Kdy¾ jsou definovány hodnoty v¹ech hradel a portù. Sí» se zastaví a vydá výsledek.
\figure{1_7_vypocet_site.eps}{Obrázek 1.4 - Výpoèet hradlové sítì}{6cm}

\s{Definice:} {\I i-tá vrstva} $\equiv$ vrcholy takové, ¾e $max$ $d(w, v) = i$, kde $w \in I$ a $v \in V$

\s{Slo¾itosti:} Èasová slo¾itost je rovna \#poètu vrstev. Prostorová slo¾itost \#hradel sítì 
\s{Pøíklady:}
Je na vstupu alespoò 1 jednièka?

\>{\I První øe¹ení: } zapojíme hradla sériovì za sebou. Èasová a prostorová slo¾itost n (kde n je \# hradel). Hloupé øe¹ení. Nevyu¾íváme paraleního výpoètu, v¾dy mù¾e poèítat jen jedno hradlo. 
\figure{1_5_hloupy_or.eps}{Obrázek 1.5 - Hradlová sí», která zjistí zda-li je na vstupu alespoò jedna jednièka}{7cm}

\>{\I Druhé øe¹ení: } chytøej¹í øe¹ení. Èasová slo¾itost $log(n)$, prostorová slo¾itost n. Výpoèet probíhá správnì po vrstvách
\figure{1_4_chytry_or.eps}{Obrázek 1.6 - Chytøej¹í implementace stejného problému}{8cm}


\h{Sèítání dovou binárních èísel}
Máme 2 èísla délky n, oznaèíme $x_i$, $y_i$ èíslice na jejich i-tých místech, $i=0,1,..n-1$, tj $x = x_{n-1}x_{n-2} \ldots x_1x_0$, $y = y_{n-1}y_{n-2} \ldots y_1y_0$. Podobnì jejich souèet znaèíme $z = z_nz_{n-1} \ldots z_1z_0$. Ka¾dý ji¾ urèitì zná jeden algoritmus jak tento souèet spoèítat, a to

\h{Algoritmus základní ¹koly}
Pøenosy oznaèíme $c_0$ a¾ $c_{n-1}$ v krocích poèítání, dodefinujeme $c_{-1}=0$. Algoritmus probíhá zleva od místa s nejni¾¹í vahou, viz Obrázek 1.6. 
 
Výsledné èíslo $z_{n}...z_1z_0$ lze tedy vyjádøit pøedpisem $$z_i=x_i \oplus y_i \oplus c_{i-1}$$ kde $\oplus$ znaèí operaci XOR. Pøenos nastane, pokud je alespoò 1 èíslo jednièka, tedy
$$c_i=(x_i \land y_i)\lor((x_i \lor y_i) \land c_{i-1})$$.
\figure{1_6_hloupe_scitani.eps}{Obrázek 1.7 sèítání}{8cm}
Bohu¾el na to abychom spoèítali $z_i$ musíme znát hodnotu $c_{i-1}$, tedy mít spoèítané hodnoty pro v¹echny èísla men¹í ne¾ i. To dává lineární èasovou slo¾itost. Zamysleme se nad tím jak by se proces sèítání mohl zrychlit.

\h{Trik - chování blokù souètu}

\figure{1_7_blok_scitani.eps}{Obrázek 1.8 - Blok souètu}{8cm}
\>Blok se mù¾e chovat tøemi rùznými zpùsoby:

\numlist{\ndotted}
\:V¾dy vydá pøenos 0 
\:V¾dy vydá pøenos 1
\:Kopíruje (pøedá dál)
\endlist

\h{Rozdìlení a skládání blokù}
Blok B lze rozdìlit na 2 bloky p,q (pokud B není trivální)
\figure{1_10_konvence_deleni_bloku.eps}{Obrázek 1.9 - Dìlení blokù}{3cm}


\h{Triviální bity}
\figure{1_11_tabulka_kodovani.eps}{Obrázek 1.10 - Tabulka triviálních bitù}{3cm}

\s{Tvrzení:} Ka¾dý blok mohu postavit z triviálních bitù. 

\proof 
Dùkaz indukcí z asociativity.



\h{Kódování typù chování blokù}
%\>{\I Sem tabulku prosím :)}

\>Definujeme (a,x) : 
\itemize\ibull
\:$(1,*) = <$
\:$(0,0) = 0$
\:$(0,1) = 1$
\endlist

\>a operaci skládání blokù $\sigma$ pro kterou platí

$(a,x) \sigma (b,y) = (c,z)$

\>kde

$c = a \land b$

$z = (\neg a \land x) \lor (a \land y)$



\h{Lep¹í algoritmus sèítání}
V na¹em pùvodním algoritmu ze základní ¹koly jsme mìli O(n) hradel v O(n) hladinách. Algoritmus tedy nebyl paralelní a trval èas O(n).

\figure{1_9_deleni_bloku.eps}{Obrázek 1.11 - Výpoèet pøenosu}{8cm}
Víme pro ka¾dý blok velikosti $2^k$ na pozici dìlitelné $2^k$ jeho chování.
Teï, kdy¾ u¾ známe v¹echny zbytky $c_0$ a¾ $c_n$ mù¾eme u¾ jednodu¹e v konstantním èase spoèítat výsledek.



\bye
