]> mj.ucw.cz Git - ads2.git/commitdiff
Revize prvni poloviny kapitoly. Nakonec jsem vetsinu prepsal.
authorMartin Mares <mj@ucw.cz>
Thu, 1 Nov 2007 15:05:51 +0000 (16:05 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 1 Nov 2007 15:05:51 +0000 (16:05 +0100)
1-hradla/1-hradla.tex

index dc2b52cb7f329ac7e95bc3cb71c26d44994ac092..833cf473f42193915e29eaf919693b052834551f 100644 (file)
-\input ../lecnotes.tex\r
-\r
-\prednaska{1}{Paralelní algoritmy}{(zapsal Jirka Fajfr a Ján Èerný)}\r
-\r
-\r
-\h{Hradlo}\r
-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
-$$f : \{0,1\}^{k} \rightarrow \{0,1\}$$\r
-\>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
-\figure{1_1_hradlo.eps}{Obrázek 1.1 - Hradlo provádìjící logickou operaci AND se dvìma vstupy}{4cm}\r
-%\>speciálním pøípadem je hradlo s poètem vstupù $k$ rovným nule. Toto hradlo pova¾ujeme za konstantu. \r
-\r
-\h{Druhy hradlových sítí}\r
-\itemize\ibull\r
-\:boolovské obvody (maximálnì dvoustavová hradla)\r
-\:kombinaèní obvod (hradla s mnoha stavy)\r
-\endlist\r
-\r
-\h{Hradlová sí»}\r
-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
-\numlist{\ndotted}\r
-\:Výsledný graf je acyklický\r
-\:Do ¾ádného vstupu (hradla) nevede více ne¾ jedna hrana\r
-\:V¹echny kromì vstupních portù jsou zapojeny\r
-\:Do vstpních portù nic nevede (vstupní port není výsledkem ¾ádného hradla)\r
-\:Výstupní porty nejsou zapojeny (nejsou zdrojem ¾ádného hradla)\r
-\endlist   \r
-\r
-\s{Vícevstupové hradlo s neomezeným poètem vstupù:} nepraktické (nerealizovatelné) vìt¹inou se poèet vstupù omezuje konstantou (\#)\r
-\figure{1_2_vice_vstupove_hradlo.eps}{Obrázek 1.2 - Trojvstupové hradlo na funkci AND}{3cm}\r
-\r
-\s{Vícevstupové hradlo:} hradlo z Obrázku 1.2, lze jednodu¹e simulovat soustavou dvou dvouvstupových hradel\r
-\figure{1_3_vice_vstupove_hradlo.eps}{Obrázek 1.3 - Dvouvstupové hradlo simulující funkci trojvstupového AND}{3cm}\r
-\r
-\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
-\numlist{\ndotted}\r
-\:$\forall v \in I : deg^{+}(v) = 0$\r
-\:$\forall v \in O : deg^{-}(v) = 0, deg^{+}(v) = 1$\r
-\:$\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
-\endlist\r
-\r
-\>$deg^{+}(v) = a(v)$, hrany vstupující do hradla jsou oèíslovány $1 \ldots a(v)$.\r
-Navíc $\forall v \in H : a(v) \leq 2$.\r
-\r
-\s{Definice:} {\I Konstanta} je hradlo $v$, pro které platí $\#vstupù=0$, tedy ¾e nemá ¾ádné vstupy. \r
-\r
-\s{Definice:} {\I Výpoèet sítì} probíhá v taktech. V 0tém taktu jsou definované právì vstupy.\r
-V i-tém taktu vydají výsledek hradla, která mìla definována vstupy v $(i - 1)$tém taktu. \r
-Kdy¾ jsou definovány hodnoty v¹ech hradel a portù. Sí» se zastaví a vydá výsledek.\r
-\figure{1_7_vypocet_site.eps}{Obrázek 1.4 - Výpoèet hradlové sítì}{6cm}\r
-\r
-\s{Definice:} {\I i-tá vrstva} $\equiv$ vrcholy takové, ¾e $max$ $d(w, v) = i$, kde $w \in I$ a $v \in V$\r
-\r
-\s{Slo¾itosti:} Èasová slo¾itost je rovna \#poètu vrstev. Prostorová slo¾itost \#hradel sítì \r
-\s{Pøíklady:}\r
-Je na vstupu alespoò 1 jednièka?\r
-\r
-\>{\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
-\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
-\r
-\>{\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
-\figure{1_4_chytry_or.eps}{Obrázek 1.6 - Chytøej¹í implementace stejného problému}{8cm}\r
-\r
-\r
-\h{Sèítání dovou binárních èísel}\r
-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
-\r
-\h{Algoritmus základní ¹koly}\r
-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
\r
-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
-$$c_i=(x_i \land y_i)\lor((x_i \lor y_i) \land c_{i-1})$$.\r
-\figure{1_6_hloupe_scitani.eps}{Obrázek 1.7 sèítání}{8cm}\r
-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
-\r
-\h{Trik - chování blokù souètu}\r
-\r
-\figure{1_7_blok_scitani.eps}{Obrázek 1.8 - Blok souètu}{8cm}\r
-\>Blok se mù¾e chovat tøemi rùznými zpùsoby:\r
-\r
-\numlist{\ndotted}\r
-\:V¾dy vydá pøenos 0 \r
-\:V¾dy vydá pøenos 1\r
-\:Kopíruje (pøedá dál)\r
-\endlist\r
-\r
-\h{Rozdìlení a skládání blokù}\r
-Blok B lze rozdìlit na 2 bloky p,q (pokud B není trivální)\r
-\figure{1_10_konvence_deleni_bloku.eps}{Obrázek 1.9 - Dìlení blokù}{3cm}\r
-\r
-\r
-\h{Triviální bity}\r
-\figure{1_11_tabulka_kodovani.eps}{Obrázek 1.10 - Tabulka triviálních bitù}{3cm}\r
-\r
-\s{Tvrzení:} Ka¾dý blok mohu postavit z triviálních bitù. \r
-\r
-\proof \r
-Dùkaz indukcí z asociativity.\r
-\r
-\r
-\r
-\h{Kódování typù chování blokù}\r
-%\>{\I Sem tabulku prosím :)}\r
-\r
-\>Definujeme (a,x) : \r
-\itemize\ibull\r
-\:$(1,*) = <$\r
-\:$(0,0) = 0$\r
-\:$(0,1) = 1$\r
-\endlist\r
-\r
-\>a operaci skládání blokù $\sigma$ pro kterou platí\r
-\r
-$(a,x) \sigma (b,y) = (c,z)$\r
-\r
-\>kde\r
-\r
-$c = a \land b$\r
-\r
-$z = (\neg a \land x) \lor (a \land y)$\r
-\r
-\r
-\r
-\h{Lep¹í algoritmus sèítání}\r
-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
-\r
-\figure{1_9_deleni_bloku.eps}{Obrázek 1.11 - Výpoèet pøenosu}{8cm}\r
-Víme pro ka¾dý blok velikosti $2^k$ na pozici dìlitelné $2^k$ jeho chování.\r
-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
-\r
-\r
-\r
-\bye\r
+\input ../lecnotes.tex
+
+\prednaska{1}{Hradlové sítì}{(zapsali Jirka Fajfr a Ján Èerný)}
+
+Na této pøedná¹ce se budeme zabývat jednoduchým modelem paralelního poèítaèe,
+toti¾ hradlovou sítí, a uká¾eme si alespoò jeden efektivní paralelní algoritmus,
+konkrétnì sèítání dvojkových èísel v~logaritmickém èase vzhledem k~jejich délce.
+
+\h{Hradlové sítì}
+
+\s{Definice:} {\I Hradlo} je element, který poèítá nìjakou pevnì danou funkci
+s~$k$ vstupy a jedním výstupem.
+
+\s{Pøíklad:} Obvykle pracujeme s~booleovskými hradly, ta pak odpovídají funkcím
+$f: \{0,1\}^{k} \rightarrow \{0,1\} $. Z~nich nejèastìji potkáme:
+
+\itemize\ibull
+\:0-vstupové: to jsou konstanty {\sc true} a {\sc false},
+\:1-vstupové: identita (ta je vcelku k~nièemu) a negace (znaèíme~$\lnot$),
+\:2-vstupuvé: logický souèin ({\sc and},~\&) a souèet ({\sc or},~$\lor$).
+\endlist
+
+\>Hradla kreslíme tøeba následovnì:
+
+\figure{1_1_hradlo.eps}{Hradlo provádìjící logickou operaci {\sc AND} se dvìma vstupy}{4cm}
+
+Z~jednotlivých hradel pak vytváøíme hradlové sítì. Pokud pou¾íváme pouze booleovská
+hradla, øíkáme takovým sítím {\I booleovské obvody,} pokud operace nad nìjakou obecnìj¹í
+(ale koneènou) mno¾inou symbolù (abecedou), nazývají se {\I kombinaèní obvody.}
+Ka¾dý vstup hradla je pøipojen buïto na~nìkterý ze~vstupù sítì nebo na~výstup nìjakého
+jiného hradla. Výstupy hradel mohou být propojeny na výstupy sítì nebo pøivedeny
+na~vstupy dal¹ích hradel, pøièem¾ je zakázáno vytváøet cykly. Ne¾ si øekneme
+formální definici, podívejme se na obrázek.
+
+\todo{OBR}
+
+\s{Definice:} {\I Hradlová sí»} je urèena:
+\itemize\ibull
+\:{\I abecedou} $\Sigma$ (to je nìjaká koneèná mno¾ina symbolù, obvykle $\Sigma=\{0,1\}$);
+\:mno¾inou {\I hradel} $H$, {\I vstupních portù} $I$ a {\I výstupních portù} $O$;
+\:acyklickým orientovaným grafem~$(V,E)$, kde~$V = H \cup I \cup O$;
+\:zobrazením~$F$, které ka¾dému hradlu $h\in H$ pøiøadí nìjakou funkci~$F(h):
+  \Sigma^{a(h)} \rightarrow \Sigma$. To je funkce, kterou toto hradlo vykonává,
+  a~èíslu $a(h)$ øíkáme {\I arita} hradla~$h$;
+\:zobrazením~$z: E \rightarrow {\bb N}$, které ka¾dé hranì vedoucí do~nìjakého
+  hradla pøiøazuje nìkterý ze vstupù tohoto hradla.
+\endlist
+
+\>Pøitom jsou splnìny následující podmínky:
+
+\itemize\ibull
+\:$\forall i \in I: \deg^{+}(i)=0$ (do~vstupù nic nevede);
+\:$\forall o \in O: \deg^{+}(o)=1 \mathbin{\&} \deg^{-}(o)=0$ (z~výstupù nic nevede a do~ka¾dého vede právì jedna hrana);
+\:$\forall h \in H: \deg^{+}(v)=a(v)$ (do~ka¾dého hradla vede tolik hran, kolik je jeho arita);
+\:$\forall h \in H, 1\le j\le a(h)$ existuje právì jeden vrchol~$v$ takový, ¾e $z(vh)=j$
+  (v¹echny vstupy hradel jsou zapojeny).
+\endlist
+
+\s{Pozorování:} Kdybychom pøipustili hradla s~libovolnì vysokým poètem vstupù, mohli bychom
+libovolný problém se vstupem délky~$n$ vyøe¹it jedním hradlem o~$n$~vstupech, co¾ není
+ani realistické, ani pìkné. Proto pøijmìme omezení, ¾e v¹echna hradla budou mít maximálnì
+$k$ vstupù, kde~$k$ je nìjaká pevná konstanta, obvykle dvojka. Následující obrázky
+ukazují, jak hradla o~více vstupech nahradit dvouvstupovými:
+
+\twofigures{1_2_vice_vstupove_hradlo.eps}{Trojvstupové hradlo {\sc and}}{3cm}{1_3_vice_vstupove_hradlo.eps}{Jeho nahrazení 2-vstupovými hradly}{3cm}
+
+\s{Definice:} {\I Výpoèet sítì} probíhá v taktech. V nultém taktu jsou definovány právì hodnoty
+vstupních portù. V~$i$-tém taktu vydají výsledek hradla, která jsou pøipojena na~porty
+nebo hradla, jejich¾ hodnota byla definována v~$(i-1)$-ním taktu. A¾ po~nìjakém koneèném
+poètu taktù budou definované i hodnoty výstupních portù, sí» se zastaví a vydá výsledek.
+
+\figure{1_7_vypocet_site.eps}{Výpoèet hradlové sítì}{6cm}
+
+\>Podle toho, jak sí» poèítá, si ji mù¾eme rozdìlit na~vrstvy:
+
+\s{Definice:} {\I $i$-tá vrstva} obsahuje v¹echny vrcholy~$v$ takové, ¾e
+nejdel¹í cesta z~nìkterého z~portù sítì do~$v$ má délku právì~$i$. To jsou
+pøesnì vrcholy, které vydají výsledek poprvé v~$i$-tém taktu výpoètu.
+Dává tedy smysl prohlásit za~{\I èasovou slo¾itost} sítì poèet jejích
+vrstev. Podobnì {\I prostorovou slo¾itost} definujeme jako poèet hradel
+v~síti.
+
+\s{Pøíklad:} Sestrojte sí», která zjistí, zda se mezi jejími~$n$ vstupy
+vyskytuje alespoò jedna jednièka.
+
+\>{\I První øe¹ení:} zapojíme hradla za~sebe (sériovì). Èasová a prostorová
+slo¾itost jsou~$n$. Zde vùbec nevyu¾íváme toho, ¾e by mohlo poèítat více
+hradel souèasnì.
+
+\figure{1_5_hloupy_or.eps}{Hradlová sí», která zjistí zda-li je na vstupu alespoò jedna jednièka}{7cm}
+
+\>{\I Druhé øe¹ení:} Budeme vrcholy spojovat do~dvojic, pak výsledky z~tìchto
+dvojic opìt do~dvojic a tak dále. Tak dosáhneme èasové slo¾itosti $\log_2 n$,
+prostorová slo¾itost zùstane lineární.
+
+\figure{1_4_chytry_or.eps}{Chytøej¹í øe¹ení stejného problému}{8cm}
+
+\h{Sèítání dvou binárních èísel}
+
+Mìjme dvì èísla zapsané ve~dvojkové soustavì jako $x_{n-1}\ldots x_1x_0$ a $y_{n-1}\ldots y_1y_0$.
+Budeme chtít spoèítat jejich souèet $z_nz_{n-1}\ldots z_1z_0$.
+
+\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