1 \input ../lecnotes.tex
\r
3 \prednaska{1}{Paralelní algoritmy}{(zapsal Jirka Fajfr a Ján Èerný)}
\r
7 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
\r
8 $$f : \{0,1\}^{k} \rightarrow \{0,1\}$$
\r
9 \>kde $k$ je poèet vstupù. Pøíklad dvouvstupového hradla provádìjícího operaci AND je na Obrázku 1.1
\r
10 \figure{1_1_hradlo.eps}{Obrázek 1.1 - Hradlo provádìjící logickou operaci AND se dvìma vstupy}{4cm}
\r
11 %\>speciálním pøípadem je hradlo s poètem vstupù $k$ rovným nule. Toto hradlo pova¾ujeme za konstantu.
\r
13 \h{Druhy hradlových sítí}
\r
15 \:boolovské obvody (maximálnì dvoustavová hradla)
\r
16 \:kombinaèní obvod (hradla s mnoha stavy)
\r
20 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
\r
22 \:Výsledný graf je acyklický
\r
23 \:Do ¾ádného vstupu (hradla) nevede více ne¾ jedna hrana
\r
24 \:V¹echny kromì vstupních portù jsou zapojeny
\r
25 \:Do vstpních portù nic nevede (vstupní port není výsledkem ¾ádného hradla)
\r
26 \:Výstupní porty nejsou zapojeny (nejsou zdrojem ¾ádného hradla)
\r
29 \s{Vícevstupové hradlo s neomezeným poètem vstupù:} nepraktické (nerealizovatelné) vìt¹inou se poèet vstupù omezuje konstantou (\#)
\r
30 \figure{1_2_vice_vstupove_hradlo.eps}{Obrázek 1.2 - Trojvstupové hradlo na funkci AND}{3cm}
\r
32 \s{Vícevstupové hradlo:} hradlo z Obrázku 1.2, lze jednodu¹e simulovat soustavou dvou dvouvstupových hradel
\r
33 \figure{1_3_vice_vstupove_hradlo.eps}{Obrázek 1.3 - Dvouvstupové hradlo simulující funkci trojvstupového AND}{3cm}
\r
35 \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
\r
37 \:$\forall v \in I : deg^{+}(v) = 0$
\r
38 \:$\forall v \in O : deg^{-}(v) = 0, deg^{+}(v) = 1$
\r
39 \:$\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}
\r
42 \>$deg^{+}(v) = a(v)$, hrany vstupující do hradla jsou oèíslovány $1 \ldots a(v)$.
\r
43 Navíc $\forall v \in H : a(v) \leq 2$.
\r
45 \s{Definice:} {\I Konstanta} je hradlo $v$, pro které platí $\#vstupù=0$, tedy ¾e nemá ¾ádné vstupy.
\r
47 \s{Definice:} {\I Výpoèet sítì} probíhá v taktech. V 0tém taktu jsou definované právì vstupy.
\r
48 V i-tém taktu vydají výsledek hradla, která mìla definována vstupy v $(i - 1)$tém taktu.
\r
49 Kdy¾ jsou definovány hodnoty v¹ech hradel a portù. Sí» se zastaví a vydá výsledek.
\r
50 \figure{1_7_vypocet_site.eps}{Obrázek 1.4 - Výpoèet hradlové sítì}{6cm}
\r
52 \s{Definice:} {\I i-tá vrstva} $\equiv$ vrcholy takové, ¾e $max$ $d(w, v) = i$, kde $w \in I$ a $v \in V$
\r
54 \s{Slo¾itosti:} Èasová slo¾itost je rovna \#poètu vrstev. Prostorová slo¾itost \#hradel sítì
\r
56 Je na vstupu alespoò 1 jednièka?
\r
58 \>{\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.
\r
59 \figure{1_5_hloupy_or.eps}{Obrázek 1.5 - Hradlová sí», která zjistí zda-li je na vstupu alespoò jedna jednièka}{7cm}
\r
61 \>{\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
\r
62 \figure{1_4_chytry_or.eps}{Obrázek 1.6 - Chytøej¹í implementace stejného problému}{8cm}
\r
65 \h{Sèítání dovou binárních èísel}
\r
66 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
\r
68 \h{Algoritmus základní ¹koly}
\r
69 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.
\r
71 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
\r
72 $$c_i=(x_i \land y_i)\lor((x_i \lor y_i) \land c_{i-1})$$.
\r
73 \figure{1_6_hloupe_scitani.eps}{Obrázek 1.7 sèítání}{8cm}
\r
74 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.
\r
76 \h{Trik - chování blokù souètu}
\r
78 \figure{1_7_blok_scitani.eps}{Obrázek 1.8 - Blok souètu}{8cm}
\r
79 \>Blok se mù¾e chovat tøemi rùznými zpùsoby:
\r
82 \:V¾dy vydá pøenos 0
\r
83 \:V¾dy vydá pøenos 1
\r
84 \:Kopíruje (pøedá dál)
\r
87 \h{Rozdìlení a skládání blokù}
\r
88 Blok B lze rozdìlit na 2 bloky p,q (pokud B není trivální)
\r
89 \figure{1_10_konvence_deleni_bloku.eps}{Obrázek 1.9 - Dìlení blokù}{3cm}
\r
93 \figure{1_11_tabulka_kodovani.eps}{Obrázek 1.10 - Tabulka triviálních bitù}{3cm}
\r
95 \s{Tvrzení:} Ka¾dý blok mohu postavit z triviálních bitù.
\r
98 Dùkaz indukcí z asociativity.
\r
102 \h{Kódování typù chování blokù}
\r
103 %\>{\I Sem tabulku prosím :)}
\r
105 \>Definujeme (a,x) :
\r
112 \>a operaci skládání blokù $\sigma$ pro kterou platí
\r
114 $(a,x) \sigma (b,y) = (c,z)$
\r
120 $z = (\neg a \land x) \lor (a \land y)$
\r
124 \h{Lep¹í algoritmus sèítání}
\r
125 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).
\r
127 \figure{1_9_deleni_bloku.eps}{Obrázek 1.11 - Výpoèet pøenosu}{8cm}
\r
128 Víme pro ka¾dý blok velikosti $2^k$ na pozici dìlitelné $2^k$ jeho chování.
\r
129 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.
\r