Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
users:martin.kocicka:pdp:10b

This is an old revision of the document!


PDP - Vyřešené zkouškové příklady za 10 bodů

Kolektivní komunikační algoritmy (10. + 11. přednáška)

OAS 2-D toroid, WH, kombinující

Odvoďte spodní meze <math>\normalsize \rho_{OAS}</math> na počet kroků,<math>\normalsize \gamma_{OAS}</math> na paralelní součet délek použitých cest a <math>\normalsize \tau_{OAS}</math> na komunikační časovou složitost operace rozesílání jeden-všem (OAS) v kombinujícím 2-portovém 2-D toroidu <math>\normalsize K(z_1,z_2)</math> s červím přepínáním (WH), jestliže zdrojový uzel <math>\normalsize s=[a_1,a_2]</math> má pro každý uzel připravený packet o velikosti m. Předpokládejte, že přenos packetu o velikosti <math>\normalsize \mu</math> na vzdálenost d trvá čas <math>\normalsize t(d,\mu)=t_s+dt_d+\mu t_m</math>. Popište co nejefektivnější OAS algoritmus za těchto podmínek. Odvoďte jeho počet kroků <math>\normalsize r_{OAS}</math>, paralelní součet délek použitých cest <math>\normalsize g_{OAS}</math> a komunikační zpoždění <math>\normalsize t_{OAS}</math> a porovnáním se spodními mezemi vyhodnoťte jeho optimalitu.

Bylo ve zkoušce: 2013-01-16 a NE2012-01-24 a 2011-01-17 a 2015-01-06 (ale všeportový)

Řešení

mi-par2014-prednaska10-kko1.pdf slide 40

Spodní mez na počet kroků: V prvním kroku to vědí 3, v dalším 3×3=9 … Takže vzorec je <math>\rho=\lceil log_{d+1}(V(G))\rceil = \lceil log_{3}(z1.z2)\rceil</math> (d - počet portů)

Spodní mez na paralelní součet délek: diam(G) = exc(s, G), u 2-D toroidu <math>\lfloor \frac{z_1}{2} \rfloor + \lfloor \frac{z_2}{2} \rfloor</math>

Časová složitost: <math>\tau = \lceil log_{3}(z1 z2) \rceil ts + (\lfloor \frac{z_1}{2} \rfloor + \lfloor \frac{z_2}{2} \rfloor) td + \lceil \frac{z1 z2 - 1}{2} \rceil \mu tm</math>

Algoritmus: Ternární rozesílání - zdroj vezme jednu třetinu adresátů, tu si nechá, zbylé dvě třetiny rozešle doprava a doleva. V první fázi algoritmu rozesíláme data jen po kružnici 1D. Po té, co proběhne OAS na kružnici začnou uzly rozesílat data po svých jednotlivých kružnicích, takže musíme pouze vyřešit rozesílání po kružnici. V každém kroce se velikost paketu zetřetinuje a na třetinu klesne i vzdálenost. Celé je to geometrická řada.

Počet kroků tohoto algoritmu je <math>\rho=\lceil log_{3}(z1.z2)\rceil</math>, protože v každém kroku každý uzel posílá data.

JDU: doporučuju přejít na řešení 2. Dejte sem nějak vědět, který z těch řešení je tedy dobře, ať se to špatné smaže.
řešení1:
řešení2:+

Celková poslaná vzdálenost je z1.(z2-1)/2 , tento vzorec dostaneme sečtením řady <math>z1*(\frac{1}{3}*\frac{\frac{1}{z2}-1}{\frac{1}{3}-1})</math>

Další věc, kterou musíme spočítat pro dosazení je celková odeslaná velikost. To je opět geometrická řada a dostaneme <math>\frac{z1*z2-1}{2}</math>

Komunikační zpoždění je po dosazení: <math>T=log_{3}(z1*z2)*ts+z1*\frac{z2-1}{2}*td+log_{3}(z1*z1)*\frac{z1*z2-1}{2}*tm</math>

Srovnání optimality: Algoritmus je optimální.

Poznámky: Za bernou minci berte myšlenky, ač jsem si to nechal zkontrolovat od Tvrdíka, tak je možné, že tam nějaký chybky zbyly. Ptal jsem se ho ještě na to, jestli je lepší vybrat pro první broadcast delší rozměr, nebo kratší, ale to je už prý mimo předmět.

EDIT 1: FIXME: Kde sa v riešení vzala časť: <math>log_{3}(z1*z1)</math> ? Nemá byť riešením len: <math>T=log_{3}(z1*z2)*ts+\frac{z1*z2-1}{2}*td+\frac{z1*z2-1}{2}*tm</math> ? Obdobne ako je to v príklade pre 1-port OAS.

EDIT 2: Podle mě je to tam protože tolik se provede kroků. Jinak řečeno: Na začátku má zpráva velikost Z1*Z2, na konci 1. Průměrně v každém kroku tedy <math>(z1*z2-1)/2</math>. A celkem kroků je <math>log_{3}(z1*z2)</math>. Dohromady to dá tedy výsledek výše

Řešení 2

Podle prosemináře 2013 bych řekl, že výsledek je:

První komunikuji v první dimenzi:

<math> t_{OAS}(K(z_{1})) =
t_{s} + \frac{z_{1}}{3}t_{d} + \frac{z_{1} * z_{2} - 1}{3}mt_{m} +
t_{s} + \frac{z_{1}}{9}t_{d} + \frac{z_{1} * z_{2} - 1}{9}mt_{m} +
… </math>

Součet:

<math> t_{OAS}(K(z_{1})) = log_{3}(z_{1})t_{s} + \frac{z_{1}-1}{3-1}t_{d} + … cekam\_na\_dokonceni\_rady …

t_{OAS}(K(…, z_{2})) = log_{3}(z_{2})t_{s} + \frac{z_{2}-1}{3-1}t_{d} + … dale …

t_{OAS}(K(z_{1}, z_{2})) = log_{3}(z_{1}z_{2})t_{s} + \frac{z_{1} + z_{2} - 2}{2}t_{d} + \frac{z_{1}z_{2} - 2}{2}mt_{m} </math>

Vysvětlení: ts + nechám si 1/3 a zbytek pošlu na obě strany + mám zprávu (z1*z2-1), kterou postupně dělím na 1/3.

JDU: Nemám náhodou v první dimenzi zprávu pouze (z1*z2-z2), kterou dělím na třetiny? (v první dimenzi se zprávy, které bude zdroj posílat do druhé dimenze, dělit nemusí).

Lineární algebra (12. přednáška)

Cannonův algoritmus na všeportové hyperkrychli

Vysvětlete a popište Cannonův algoritmus paralelního násobení čtvercových <math>\sqrt{N}</math> x <math>\sqrt{N}</math> matic C=AB na všeportové hyperkrychli Qlog p, p<N. Odvoďte výraz pro paralelní čas T(N,p) jestliže:

1) směrovače provádí WH přepínání paketů, kde přenos paketu o velikosti µ mezi dvěma uzly ve vzdálenosti d trvá t(d,µ)=ts+dtd+µtm.
2) prvky matic mají velikost m
3) sekvenční lokální násobení dvou matic o velikosti <math>r \times r</math> trvá čas <math>\alpha r^3</math>, kde <math> m </math> a <math>\alpha</math> jsou konstanty. Pro zadanou efektivnost <math>E_0</math> odvoďte izoefektivní funkce <math>\psi_1 (p)</math> a <math>\psi_2(N)</math>. Dále odvoďte spodní mez <math>\psi_3(N)</math> na počet procesorů pro dosažení asymptotické časové optimality.

Řešení

Tohle jsem řešil půlku zkoušky a Tvrdik mi řekl, že jsem došel docela daleko, takže:

Cannon je vlastně:

  1. cyklická rotace ve směru H
  2. cyklická rotace ve směru V
  3. vynásobení
  4. <math>\sqrt{p}</math> * (rotace V + rotace H + násobení)

celkem tedy: <math> \sqrt p * ( T_{komunikace} + T_{nasobeni})</math>. Vzorce máte zadané, na konstanty moc nehleďte, jen aby tam byla všechna písmenka, co tam mají být. Jestli je tam někde plus mínus jedna je vcelku jedno.

<math>\Psi_1(p) = n^2</math>, <math>\Psi_2(n) \sqrt{p}</math> - inverzní k <math>\Psi_1</math>.

Problém nastává při počítání Tmin, kde vám vyjde docela hnusná derivace. Prý se tam dá jeden člen zanedbat, pokud uvažujute p v rozsahu 1 až n. Musíte si tedy tu rovnici rozdělit na několik součtů a místo A1 + A2 = A3, řešit asymptoticky A1 = A3 a A2 = A3. Viz jak to říkal na prosemináři.

Řešení ze semináře pro dálkaře
<math>T_{1} = T_{2} = ts + \sqrt{p} / 2 * n^2 / p * tm</math>
FIXME proč se zde nepočítá s klasickým vzorcem pro WH tedy <math> t_s + dt_d + mt_m</math> ? kde je parametr <math>t_d</math> ?
<math>T_{3} = \sqrt{p} * (Su (n/ \sqrt{p}) + 2ts + n^2 / p * tm)</math>
<math>Su(k) = dk^3 </math>

Možný důvod absence <math>t_d</math> :

Finální asymptotický čas (ten úplně dole - podle skript) už <math>t_d</math> neobsahuje, ale pravděpodobně došlo pouze k jeho zanedbání. Moje představa je taková, že při mapování virt. mřížky do hyperkrychle (BRGC), kdy se řádek <math>\sqrt{p}</math> dlouhý mapuje do podkrychle <math>Q_{log\sqrt{p}}</math>, dochází k tomu, že můžu v rámci té 1D mřížky dělat zkratky. Je celkem jasný, že průměr téhle podkrychle je <math>log\sqrt{p}</math>, což znamená, že nejvzdálenější uzly na mřížce už nebudou od sebe <math>\sqrt{p}</math>, ale právě ten log.

Pokud tam nakonec vyjde něco jako <math>O(t_d log\sqrt{p})</math>, přebije to <math>t_s sqrt{p}</math>

Teorie: Imho jde o algoritmus “Permutační směrování na hyperkrychli” (viz přednáška 9 (2014/2015), slide 38). Mělo by to fungovat, pokud je matice mapovaná šachovnicově do 2D mřížky vnořené do hyperkrychle pomocí BRGC. 8-) (Inception)

Pak se tedy cyklický posun realizuje pomocí nějakého xoru a e-cube směrování (nebudou kolize). Tohle vysvětluje, proč je daná permutace hotová vždy na jeden krok.

FIXME Proč se tu počítá s maticí <math>\normalsize n \times n</math>, když je zadaná <math>\normalsize \sqrt(N) \times \sqrt(N)</math> :?:

<math>T(n^2,p) = 2(ts + \sqrt{p} / 2 * n^2 / p * tm) + \sqrt{p} * ( (n/ \sqrt{p})^3 + 2ts + n^2 / p * tm)</math>

FIXME: Toto je riešenie pre hyperkrychlu. Na seminári bol riešený Cannon pre toroid: Poznámky proseminář_09. Aj na skúške v 2010/2011 bol Cannon pre Toroid.

Podle anglických skript (str. 185) je celková složitost pro všeportovou WH hyperkrychli <math>Q_{\log {p}}</math> následující :

<math>T_{Cannon}(N, p) \dot= t_s sqrt{p} + \frac{N}{\sqrt{p}} t_m + O ( \frac{n^3}{p} )</math>

Cannonův algoritmus na 1-portovém 2D toroidu

Popište a vysvětlete Cannonův algoritmus paralelního násobení čtvercových <math>\sqrt N \times \sqrt N</math> matic <math>C = AB</math> na 1-portovém 2-D toroidu <math>K (\sqrt p, \sqrt p)</math> procesorů, kde <math>p < N</math>. Odvoďte co nejpřesněji výraz pro paralelní čas <math>T (N,p)</math>, jestliže (1) směrovače provádějí červí (WH) přepínání paketů, kde přenos paketu o velikosti <math> \mu </math> mezi 2 uzly ve vzdálenosti d trvá <math>t(d, \mu) = t_s + dt_d + \mu t_m</math>, (2) prvky matic mají velikost <math> m </math> a (3) sekvenční lokální násobení dvou matic o velikosti <math>r \times r</math> trvá čas <math>\alpha r^3</math>, kde <math> m </math> a <math>\alpha</math> jsou konstanty. Pro zadanou efektivnost <math>E_0</math> odvoďte izoefektivní funkce <math>\psi_1 (p)</math> a <math>\psi_2(N)</math>. Dále odvoďte spodní mez <math>\psi_3(N)</math> na počet procesorů pro dosažení asymptotické časové optimality.

Bylo ve zkoušce: 2012-02-03

Řešení

:!:Viz skripta CZ [2006] str. 199, obdobná varianta příkladu (avšak SF, tudíž čísla nejsou stejná!) je též vysvětlena na videu z 13. prosemináře 2013.

Algoritmus

Algoritmus má celkem tři fáze:

  1. horizontální cyklická rotace řádku i v matici A o i-1 pozic doleva,
  2. vertikální cyklická rotace sloupce k v matici B o k-1 pozic nahoru,
  3. cyklus <math>\sqrt p</math>x;
    1. násobení submatic na procesorech,
    2. cyklická rotace v matici A o 1 pozici doleva,
    3. cyklická rotace v matici B o 1 pozici nahoru.

FAZE 1
for all i = 1,…,<math>sqrt p</math> doIP všechny submatice <math>A_i_,_*</math> v řádku i rotace o i-1 pozic doleva

FAZE 2
for all k = 1,…,<math>sqrt p</math> doIP všechny submatice <math>B_*_,_k</math> v sloupci k rotace o k-1 pozic nahoru

FAZE 3
repeat <math>sqrt p</math> times
{
for all i,k = 1,…<math>sqrt p</math> doIP <math>P_i_,_k</math> vynásobí momentální submatice A*B a přičte do <math>C_i_,_k</math>
for all i = 1,…,<math>sqrt p</math> doIP všechny submatice <math>A_i_,_*</math> v řádku i rotace o 1 pozici doleva
for all k = 1,…,<math>sqrt p</math> doIP všechny submatice <math>B_*_,_k</math> ve sloupci k rotace o 1 pozici nahoru
}

doIP = do_In_Parallel

Složitost

[základ podle Poznámek z prosemináře 9 ZS 11/12 ]

<math>T(N,p) = T_1(N,p) + T_2(N,p) + T_3(N,p)</math>

První dvě fáze mají shodnou složitost, liší se pouze dimenzí, ve které se rotuje. Výpočet složitosti vychází ze zadaného vzorce pro komunikační zpoždění. Jedná se o rotaci na kružnici o 0 až <math>\normalsize \sqrt p</math> (délka jedné strany) pozic. Vybereme si vždy nejkratší směr, takže nejdelší vzdálenost bude rovna polovině, tedy <math>\normalsize d = \frac{\sqrt p}{2}</math>. Velikost paketu odpovídá velikosti submatice na jeden procesor, tedy <math>\normalsize \mu = \frac{N}{p}</math>.

Protoze mame WH smerovani, vime, ze WH blokuje cely kanal od uzlu U az do uzlu V ve vzdalenosti tech <math>\normalsize \frac{\sqrt p}{2}</math>. Namalujte si kruznici o 7dmi uzlech, kde kazdy posila zpravu protejsimu uzlu, vyznacte si cary te komunikace a vidite, ze se vam ty cary prekryvaji ⇒ v jednu chvili tak muzou komunikovat max jen 2 uzly (jedna komunikace jednou stranou kruznice, druha druhou). Ale tech uzlu co chteji komunikovat je <math>\normalsize \sqrt p</math>, takze se cela komunikace bude opakovat <math>\normalsize \frac{\sqrt p}{2}</math>krat. Kdybychom meli vseportovy model, budou se akorat soucasne provadet prvni 2 faze, stejne tak 2. a 3. cast 3. faze, protoze se jedna o ruzne matice, tak je muzem rotovat zaroven. Vse je vysvetleno na 13. proseminari viz /https://fit.avc-cvut.cz/

<math>T_1(N,p) = T_2(N,p) = \frac{\sqrt p}{2} \left(t_s + \frac{\sqrt p}{2} t_d + \frac{N}{p} t_m \right)</math>

Ve třetí fázi probíhá lokální sekvenční násobení submatic, která má dle zadání pro matice <math>\normalsize k \times k</math> složitost <math>\normalsize \alpha k^3</math>. Naše submatice mají velikost <math>\normalsize \frac{N}{p} = \frac{\sqrt N \cdot \sqrt N}{\sqrt p \cdot sqrt p}</math>, takže složitost <math>\normalsize \alpha \left( \frac{\sqrt N}{\sqrt p} \right)^3</math>. Poté se provede horizontální a vertikální cyklický posun o 1 pozici. A to celé se <math>\normalsize \sqrt p</math>krát opakuje.

<math>T_3(N,p) = \sqrt p \cdot \left[ \alpha \left( \frac{\sqrt N}{\sqrt p} \right)^3 + 2\left( t_s + 1\cdot t_d + \frac{N}{p} t_m \right) \right]</math>

Celkový čas je potom:

<math>T(N,p) = 2 \frac{\sqrt p}{2} \left(t_s + \frac{\sqrt p}{2} t_d + \frac{N}{p} t_m \right) + \sqrt p \cdot \left[ \alpha \left( \frac{\sqrt N}{\sqrt p} \right)^3 + 2\left( t_s + t_d + \frac{N}{p} t_m \right) \right] </math>

Vypustíme jednotkové konstanty <math>{t_s}, {t_d}</math> a po úpravách dostáváme:

<math>T(N,p) = \frac{1}{2} p \cdot t_d + \alpha \frac{ N\sqrt{N} }{ p } + 3 \frac{ N \sqrt{p} }{ p } t_m = \frac{1}{2} p \cdot t_d + \alpha \frac{ N\sqrt{N} }{ p } + 3 \frac{ N }{ \sqrt{p} } t_m</math>

Dle poznámek z 9. prosemináře se celý člen s <math>{t_m}</math> může vypustit. Člen <math>{t_m}</math> je asymptoticky menší než ostatní. Potom dostáváme:

<math>T(N,p) = O\left( p \cdot t_d + \alpha \frac{ N\sqrt{N} }{ p } \right)</math>

Vloženo by plech.d: (Pozn: Já používám všude místo samotného <math>t_m</math> součin <math>m t_m</math>. Vycházím ze zadání, kde je m definováno jako velikost jednoho prvku matice.)

Není možné jen tak zanedbat člen <math>3 \frac{ N }{ \sqrt{p} } m t_m</math>, protože pro malé p je tento člen naopak velký oproti <math>\frac{1}{2} p t_d</math>. Musíme nalézt hranici <math>p_0</math>, pro kterou jsou oba výrazy navzájem rovny. Pak budeme řešit problém zvlášť pro <math>p = o(p_0)</math> a pro <math>p = \Omega(p_0)</math>. Tento postup jsme si ukazovali na posledním prosemináři 2014.

Výpočet <math>p_0</math>:

<math>\frac{1}{2} p_0 t_d = 3 \frac{N}{sqrt{p_0}} m t_m</math>

<math>p_0^{\frac{3}{2}} = \frac{6 m t_m}{t_d} N</math>

<math>p_0 = \Theta(N^{\frac{2}{3}})</math>

První část řešení je pro <math>p = o(p_0) = o(N^{\frac{2}{3}})</math> a zanedbává člen <math>\frac{1}{2} p t_d</math>:

<math>T(N,p) = \alpha \frac{\sqrt{N}^3}{p} + 3 \frac{N}{\sqrt{p}} m t_m</math>

<math>C(N,p) = \alpha \sqrt{N}^3 + 3 \sqrt{p} N m t_m</math>

Nyní si ze vzorečku pro efektivnost vyjádříme p, abychom našli <math>\psi_2(N) = N</math>. To je ale ve sporu s předpokladem, že <math>p = o(N^{\frac{2}{3}})</math>. Tuto větev řešení můžeme zahodit.

Následuje řešení pro <math>p = \Omega(p_0) = \Omega(N^{\frac{2}{3}})</math>, které zanedbává člen <math>3 \frac{N}{sqrt{p}} m t_m</math>. Toto řešení pokračuje níže v sekci Škálovatelnost od původního autora.

Škálovatelnost

<math>E(N,p) = \frac{ \alpha (\sqrt N)^3 }{ p \cdot \left( p \cdot t_d + \alpha \frac{ N\sqrt{N} }{ p } \right) } = \frac{ \alpha N\sqrt N }{ p^2 \cdot t_d + \alpha N\sqrt{N} }</math>

<math>E(N,p) = E_{\tiny O}</math>

<math>\alpha (1-E_{\tiny 0}) \cdot N\sqrt N = E_{\tiny 0} \cdot p^2 \cdot t_d</math>

<math>N^{\frac{3}{2}}= \frac{ E_0 \cdot p^2 \cdot t_d }{ \alpha (1-E_0) }</math>

<math>N =\left( \frac{E_0 \cdot t_d }{\alpha (1-E_0)}\right)^{\frac{2}{3}} \cdot p^{\frac{4}{3}} = O(p^{\frac{4}{3}}) = \psi_1</math>

<math>p = \sqrt{ \frac{ \alpha (1-E_0) \cdot N\sqrt N }{ E_0 \cdot t_d} } = O( N^{\frac{3}{4}}) = \psi_2</math>

Výpočet <math>\psi_3</math>:

<math>\frac{\partial T(N,p)}{\partial p}=\frac{\partial}{\partial p} \left( p \cdot t_d + \alpha \cdot \frac{N^{\frac{3}{2}}}{p} \right) = t_d - \alpha \cdot N^{\frac{3}{2}} \cdot p^{-2}</math>

<math>p_t = \sqrt{\frac{\alpha}{t_d}} \cdot N^{\frac{3}{4}}</math>

<math>T(N,p_t) = \sqrt{\alpha \cdot t_d} \cdot N^{\frac{3}{4}} + \sqrt{\alpha \cdot t_d} \cdot N^{\frac{3}{4}} = 2 \cdot \sqrt{\alpha \cdot t_d} \cdot N^{\frac{3}{4}} </math>

<math>\psi_3 = O(N^{\frac{3}{4}})</math>

:!: Neni to tak, ze dosazenim p_t do puvodni rovnice pro cas teprve dostaneme Tmin a to pak musime polozit rovno za T(N,p), vyjadrit p a az to nam da Psi3 ?

:!: EDIT: z prosemináře 2013/2014 při výpočtu psi_1 se dostaneme do tvaru <math>\psi_1 = (1-E0)\alpha N\sqrt{N} = 3E0N\sqrt{p} + 2E0p\sqrt{p}</math> Člen <math> 3E0N\sqrt{p} </math> se nedá rozdělit, proto si musíme uvědomit jak musí být N velký vůči p aby platila rovnost. Jediná možnost aby to platilo je, že <math>P=\theta(N)</math>. Důkaz je sporem. a je v tom duchu, že jestli platí p=O(N) tak musí platit i malý o(N), čili aby platilo p<n musím dosait <math>p=N/k</math> kde <math>k>=1</math> čili počítam <math> \psi_1(p) = \theta(N)</math> a <math>\psi_2(n) = \theta(p)</math>

susantom koment: Bacha, na tom prosemináři 2013 se to dělalo s SF, tady je WH, proto ta rovnice vypadá jinak. Takže ta tvoje logika je sice správná, ale zde nepoužitelná, protože pracuješ se špatnou rovnicí.

Cannonův algoritmus na 1-portové mřížce

Popište a vysvětlete Cannonův algoritmus paralelního násobení čtvercových <math>\sqrt N \times \sqrt N</math> matic <math>C = AB</math> na 1-portové 2-D mřížce <math>M (\sqrt p, \sqrt p)</math> procesorů, kde <math>p < N</math>. Odvoďte co nejpřesněji výraz pro paralelní čas <math>T (N,p)</math>, jestliže (1) směrovače provádějí červí (WH) přepínání paketů, kde přenos paketu o velikosti <math> \mu </math> mezi 2 uzly ve vzdálenosti d trvá <math>t(d, \mu) = t_s + dt_d + \mu t_m</math>, (2) prvky matic mají velikost <math> m </math> a (3) sekvenční lokální násobení dvou matic o velikosti <math>r \times r</math> trvá čas <math>\alpha r^3</math>, kde <math> m </math> a <math>\alpha</math> jsou konstanty. Pro zadanou efektivnost <math>E_0</math> odvoďte izoefektivní funkce <math>\psi_1 (p)</math> a <math>\psi_2(N)</math>. Dále odvoďte spodní mez <math>\psi_3(N)</math> na počet procesorů pro dosažení asymptotické časové optimality.

Bylo ve zkoušce: 2013-01-02 a 2015-01-06

Algoritmus a škálovatelnost spočítáme stejně jako v případě výše. Škálovatelnost vyjde ve finále stejně.

Složitost

Ověřeno p. Tvrdíkem.

<math>T_1(N,p) = T_2(N,p) = \frac{\sqrt{p}}{2} \left(t_s + \frac{\sqrt{p}}{2}t_d + \frac{N}{p} t_m \right)</math>

V prvních dvou fázích je nejhorší situace ve středním řádku, kde lze posílat z každé poloviny mřížky na druhou stranu pouze jeden paket, aby nedošlo ke kolizím. V této situaci posílám přesně na vzdálenost poloviny řádku (<math>\frac{\sqrt{p}}{2}</math>) a je nutné to zopakovat pro všechny dvojice, tedy <math>\frac{\sqrt{p}}{2}</math> krát.

<math>T_3(N,p) = \sqrt p \cdot \left[ \alpha \left( \frac{\sqrt N}{\sqrt p} \right)^3 + 2\left( t_s + \sqrt{p}t_d + \frac{N}{p} t_m \right) \right]</math>

Ve 3. fázi už pak posouvám všude stejně a nejhorší případ je přesunutí nejlevějš submatice na nejpravější procesor v řádku a to lze dělat zároveň během toho, co ostatní v řádku posouvají pouze sousedům o 1 doleva.

Pokud by se jednalo o SF:

<math>T_1(N,p) = T_2(N,p) = 2\left(t_s + \sqrt{p}\frac{N}{p} t_m \right)</math>

Pro SF je nejhorší případ přesunutí nejlevější submatice v řádku na nejpravějí procesor. V prostředním řádku oproti tomu všechny procesory posouvají submatice pouze o polovinu délku řádku.

<math>T_3(N,p) = \sqrt p \cdot \left[ \alpha \left( \frac{\sqrt N}{\sqrt p} \right)^3 + 2\left( t_s + \sqrt{p}\frac{N}{p} t_m \right) \right]</math>

EDIT: ten WH je dobře, ale T1 tady u SF se mi moc nezdá

EDIT2: Na 13. prosemináři 2013 Tvrdík vysvětluje ten T1 pro SF toroid (pak je triviální to převést na M :-D), je to takhle. správně.

LU Dekompozice

Popište paralelní algoritmus pro LU dekompozici husté <math> \sqrt{N} \times \sqrt{N}</math> matice A mapované blokově šachovnicově na p-procesorovou 2-D mřížku <math> M( \sqrt{p} , \sqrt{p} ) </math> s červím přepínáním (WH), kde přenos r prvků matice na vzdálenost d trvá čas <math> t(d,r) = t_s + d t_d + r t_m </math>. Odvoďte výraz pro paralelní čas T(N,p) a izoefektivní funkce <math> \Psi_1 (p) </math> a <math> \Psi_2 (N) </math>. Předpokládejte, že lokální aritmetické/logické/paměťové operace procesoru mají jednotkovou složitost. Dále předpokládejte, že složitost sekvenční LU dekompozice <math> k \times k </math> matice je <math> \alpha k^3 </math>, sekvenční inverze <math> k \times k </math> matice je <math> \beta k^3 </math> a sekvenčního násobení 2 <math> k \times k </math> matice je <math> \gamma k^3 </math>, kde <math> \alpha, \beta, \gamma </math> jsou konstanty.

Řešení

(při nejmenším pro mřížku)

:!:Viz skripta EN [2010] str. 190, varianta příkladu (liší se v portech) je též vysvětlen na videu z 13. prosemináře 2013 od 45:40.

Algoritmus : Na jednom procesoru by mělo být <math>\frac{N}{p}</math> čísel

  • První fáze

Jeden procesor musí spočítat inverzi
<math>T_1 = \beta \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 </math>

  • Druhá fáze

OAB na sloupci

<math> T_2 = \log ({\sqrt{p} - i + 1}) (t_s + \frac{N}{p} t_m) + (\sqrt{p} - i) t_d </math>

  • Třetí fáze

násobení + OAB na řádku

<math> T_3 = \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 + T_2</math>

  • Čtvrtá fáze

Každý procesor opět násobí.

<math> T_4 = \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 </math>

  • Celkem

No a jedeme po diagonále, která je dlouhá <math>\sqrt{p}</math>

<math> T = \sum_{i=1}^{\sqrt{p}} (T_1 + T_2 + T_3 + T_4) </math>

U T_2 se nám to jediné mění v závislosti na parametru “i”. A to následovně :

<math> T_{2_1} = \log ({\sqrt{p}}) (t_s + \frac{N}{p} t_m) + (\sqrt{p} - 1) t_d </math>
<math> T_{2_2} = \log ({\sqrt{p} - 1}) (t_s + \frac{N}{p} t_m) + (\sqrt{p} - 2) t_d </math>
<math> T_{2_3} = \log ({\sqrt{p} - 2}) (t_s + \frac{N}{p} t_m) + (\sqrt{p} - 3) t_d </math>
<math> T_{2_4} = \log ({\sqrt{p} - 3}) (t_s + \frac{N}{p} t_m) + (\sqrt{p} - 4) t_d </math>
<math> T_{2_{\sqrt{p}}} = \log ({2}) (t_s + \frac{N}{p} t_m) + (1) t_d </math>

První část

<math>\log 2 + \log 3 + \cdot \cdot \cdot + \log {\sqrt{p}} = \log (2 . 3 . 4 . . . \sqrt{p}) = \log (\sqrt{p} !) \dot= \log ({\sqrt{p}}^{\sqrt{p}}) = \sqrt{p} \log {\sqrt{p}} = \frac {1}{2} \sqrt{p} \log {p} </math>

Druhá část

<math>1 + 2 + 3 + \cdot \cdot \cdot + \sqrt{p} - 1 = \frac{n (a_1 + a_n)}{2} = \frac{(\sqrt{p} - 1) (1 + (\sqrt{p} - 1)} {2} \dot= \frac{\sqrt{p} \sqrt{p}}{2} = \frac{p}{2}</math>

Výpočet

<math> T(N,p) = \underbrace{ \sqrt{p} \beta \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3}_{ \text{T_1 = Inverze}} + \underbrace{ \frac {1}{2} \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + \frac{p}{2} t_d}_{ \text{T_2 = OAB na sloupci}} + \underbrace{ \underbrace{ \sqrt{p} \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3}_{ \text{Nasobeni matic}} + \underbrace{ \left(\frac {1}{2} \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + \frac{p}{2} t_d \right)}_{ \text{OAB na radku}}}_{\text{T_3}} + \underbrace{ \sqrt{p} \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3}_{ \text{T_4 = Nasobeni matic}} </math>

<math> SU = \alpha (\sqrt{N})^3 </math>

A jde se upravovat :

<math> T = \sqrt{p} \beta \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 + \frac {1}{2} \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + \frac{p}{2} t_d + \sqrt{p} \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 + \left(\frac {1}{2} \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + \frac{p}{2} t_d \right) + \sqrt{p} \gamma \left(\frac{\sqrt{N}}{\sqrt{p}}\right)^3 =\\=

\beta \frac{N \sqrt{N}}{p} + 2 \left(\frac {1}{2} \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + \frac{p}{2} t_d \right) + 2 \gamma \frac{N \sqrt{N}}{p} =\\=

\beta \frac{N \sqrt{N}}{p} + \sqrt{p} \log {p} (t_s + \frac{N}{p} t_m) + p t_d + 2 \gamma \frac{N \sqrt{N}}{p} =\\=

\beta \frac{N \sqrt{N}}{p} + \underbrace{ \sqrt{p} \log {p} t_s}_{ \sqrt{p} \log {p} = O(p)} + \sqrt{p} \log {p} \frac{N}{p} t_m + p t_d + 2 \gamma \frac{N \sqrt{N}}{p} \dot=
\dot=

\beta \frac{N \sqrt{N}}{p} + \log {p} \frac{N}{\sqrt{p}} t_m + p t_d + 2 \gamma \frac{N \sqrt{N}}{p} </math>

<math> C(N,p) = \beta N \sqrt{N} + \log {p} \sqrt{p} N t_m + p^2 t_d + 2 \gamma N \sqrt{N} </math>

<math> E(N,p) = \frac{SU(N)}{C(N,p)} = E_0

\frac{\alpha N \sqrt{N}}{\beta N \sqrt{N} + \log {p} \sqrt{p} N t_m + p^2 t_d + 2 \gamma N \sqrt{N}}= E_0

\alpha N \sqrt{N} = E_0 \beta N \sqrt{N} + E_0 \log {p} \sqrt{p} N t_m + E_0 p^2 t_d + 2 E_0 \gamma N \sqrt{N}

\alpha N \sqrt{N} - E_0 \beta N \sqrt{N} - 2 E_0 \gamma N \sqrt{N} = E_0 \log {p} \sqrt{p} N t_m + E_0 p^2 t_d

N \sqrt{N}(\alpha - E_0 \beta - 2 E_0 \gamma) = E_0 \log {p} \sqrt{p} N t_m + E_0 p^2 t_d

</math>

Rozdělíme na dva podúkoly a zmergujeme :

a)

<math> N \sqrt{N}(\alpha - E_0 \beta - 2 E_0 \gamma) = E_0 \log {p} \sqrt{p} N t_m

N \sqrt{N} = \frac{E_0 t_m}{\alpha - E_0 \beta - 2 E_0 \gamma} \log {p} \sqrt{p} N

\sqrt{N} = \frac{E_0 t_m}{\alpha - E_0 \beta - 2 E_0 \gamma} \log {p} \sqrt{p}

N = \left(\frac{E_0 t_m}{\alpha - E_0 \beta - 2 E_0 \gamma}\right)^2 p \log^2 {p} \dot= p \log^2{p} = \psi_{1_a}(p)

</math>

b)

<math> N \sqrt{N}(\alpha - E_0 \beta - 2 E_0 \gamma) = E_0 p^2 t_d

N \sqrt{N} = \frac{E_0 t_d}{\alpha - E_0 \beta - 2 E_0 \gamma} p^2

N^{\frac{3}{2}} = \frac{E_0 t_d}{\alpha - E_0 \beta - 2 E_0 \gamma} p^2

N^ = \left(\frac{E_0 t_d}{\alpha - E_0 \beta - 2 E_0 \gamma}\right)^{\frac{2}{3}} p^{\frac{4}{3}} \dot = p \sqrt[3] {p} = \psi_{1_b}(p)

</math>

No a teď to dáme dohromady :

<math>

N = \Omega(\psi_{1_a}(p)) = \Omega(p \log^2{p})
N = \Omega(\psi_{1_b}(p)) = \Omega(p \sqrt[3] {p}) </math>

No a z toho plyne že :

<math>

N = p \sqrt[3] {p} = \psi_1(p)
N = p^{\frac{4}{3}}
p = N^{\frac{3}{4}} = \psi_2(N)

</math>

Řešení tridiagonální soustavy lineárních rovnic

Popište algoritmus sudoliché redukce pro řešení tridiagonální soustavy n lineárních rovnic mapovaných blokově na p-procesorovou hyperkrychli, <math>p<n</math>, SF, přenos paketu o velikosti <math> u </math> na vzdálenost <math> d </math> trvá <math>t(d,u)= t_s + d \cdot u \cdot t_m</math>. Odvoďte asymptoticky hodnotu <math>T(n,p)</math>. Aritmetické, logické, paměťové operace mají konstantní složitost.

Bylo ve zkoušce: NE2012-01-24 (místo Qn na 1D mřížce a WH) a 2013-01-23, 2015-01-28 8b

Řešení

:!:Viz skripta CZ [2006] str. 201

Algoritmus

Soustava má podobu:

<math> \begin{array}{lcr} (f_1 x_0 +) g_1 x_1 + h_1 x_2 & = & b_1
f_2 x_1 + g_2 x_2 + h_2 x_3 & = & b_2
&\cdots &
f_i x_{i-1} + g_i x_i + h_i x_{i+1} & = & b_i
&\cdots &
\end{array} </math>

Pokud jsou všechny koeficienty <math>\normalsize g_i</math> nenulové, pak lze všechny sudé řádky vyjádřit jako sousední liché <math>x_{i-1}</math> a <math>x_{i+1}</math> a dosadit do rovnice pro <math>x_i</math>. Tím nám vznikne rovnice obsahující <math>x_i</math>, <math>x_{i-2}</math> a <math>x_{i+2}</math>, tedy opět sudé <math>x_i</math>. Každou sudo-lichou redukcí se počet rovnic sníží na polovinu. Sekvenční čas pro řešení soustavy <math>n</math> rovnic se skládá z postupné eliminace rovnic; <math>O(n) = SU(n)</math>

Komunikační závislosti při paralelním algoritmu jsou naznačeny na obrázku:

Při <math>n>p</math> připadá na 1 procesor <math>n\over p</math> řádků. V každém kroku počet rovnic obsluhovaných procesorem klesá na polovinu.

V 1. kroku komunikují uzly ve vzdálenosti 1.

V 2. kroku uzly ve vzdálenosti 2, ve třetím ve vzdálenosti <math>2^2</math>, … , v n-tém <math>2^{k-1}</math>. Pokud je <math>p<n</math>, pak prvních <math>\log {n \over p}</math> kroků se rovnice zpracovávají lokálně, poté zůstane 1 rovnice na procesor a poté následuje běžná komunikace ⇒ její složitost závisí na vhodném mapování. Očíslujeme-li si procesory čísly 1,2, … , p, namapujeme je v hyperkrychli na uzly ohodnocené binárně pomocí Grayova kódu BRGC ⇒ ten má dobrou vlastnost, že 2 čísla <math>G(j \cdot 2^k)</math> a <math>G1) </math>

Celková složitost by měla být:

<math> O (\frac{n}{p} + \frac {n}{p} log p tm + \(sqrt p - 1)td) + O( \sqrt p td + \frac{n}{p} tm + 2\frac{n}{p} ) + O ( \sqrt p td + 2\frac {n}{p} log p tm + (\frac {n^2}{p})) =

O ( 3\frac {n}{p} log p tm + (3\sqrt p - 1) td + (\frac {n^2}{p})) = </math>

<math> O ( \frac {n}{p} log p tm + \sqrt p td + (\frac {n^2}{p})) </math>

Zatím se jedná jen o hrubý nástřel. Určitě tam budou chyby. Prosím o kontrolu a pripadne upravy

FIXME

Je ve výpočtu zahrnuto to, že je matice namapována blokově šachovnicově - tedy, že jeden procesoru může držet více matic ?

FIXME

Řešení 2

FIXME podle mě řešení výše neni úplně správně, ale aby případný čtenář mohl porovnat obě řešení, vytvořím tento fork.

Pár věcí na úvod:

Jelikož matice je o rozměrech <math>\sqrt N * \sqrt N</math> a procesorů je <math>\sqrt p * \sqrt p</math>, tak každý procesor drží submatice o rozměrech <math>\frac{\sqrt N}{\sqrt p} * \frac{\sqrt N}{\sqrt p}</math> a první sloupec procesorů navíc drží <math>3 * \frac{\sqrt N}{\sqrt p}</math> (r, b a x - to vychází ze zadání).

Pseudokód:

vector x(t) = initial_value;
vector r(t) = vector b - matice A * vector x(t)
while (||vector r|| > epsilon) do_sequently {
   t := t + 1;
   ∀ i:= 0 .. n - 1 do parallel
      xi = ri(t-1)/ai,i + xi(t-1);
   vector r(t) = vector b - matice A * vector x(t)
}

Jak vidíte, kód je stejný - až na inicializaci.

V prvním kroce je tedy potřeba přesunout všechny tyto vektory na diagonálu. Nejdál to bude samozřejmě na vzdálenost <math>{\sqrt p} - 1</math>, čiže

<math> O ( ts + 3*\frac {\sqrt n}{\sqrt p}*tm + ({\sqrt p} - 1) * td) </math>

V dalším kroce se násobí matice vektorem - viz vektor krát matice (bez přesunutí vektoru x na diagonálu, my už ji tam máme! A NAVÍC se výsledek (vector r(t)) neposílá na první sloupec, ale na diagonálu).

Další řádek je while cyklus, vyhodnocuje se ||vector r||. To je obyčejný skalární součin, který trvá <math>O(1)</math> když p = n (každý procesor pouze jeho část umocní), když p < n, tak to trvá <math>\frac{\sqrt n}{\sqrt p}</math>. Teď má tedy každý procesor na diagonále svůj kousek velikosti ||r||, je tedy potřeba vše sečíst a OAB všem. To už neni úplně jednoduchý:

1) Všechno sečíst na diagonále by měl být běžný postup, akorát vzdálenosti budou dvojnásobné, ale jinak by to neměl být problém. Čiže <math> O (\frac{\sqrt n}{\sqrt p} + log \sqrt p * (ts + \frac {\sqrt n}{\sqrt p}*tm) + 2*({\sqrt p} - 1) * td)</math> (lokální + paralelní redukce)

2) OAB na mřížce - musí se poslat všem procesorům, aby všichni věděli, jestli mají skončit

A teď si všimněte, že uvnitř for cyklu se pouze dělí / sčítají prvky, které jsou všechny na diagonále! Takže <math>O(1)</math>

Poslední řádek ve while cyklu je stejný jako při inicializaci. Nakonec je potřeba všechny části vectoru x přesunout z diagonály na první procesor - musí být namapovány stejně jako při začátku algoritmu

Dotaz: Zadání vyžaduje popis a čas jedné iterace algoritmu. Je tedy opravdu třeba počítat podmíku pokračování další iterace, nebo dokonce inicializaci celého algoritmu? Nestačí počítat vnitřek toho while cyklu (jednu iteraci) tj. lokální operaci + MVM? Jenže to bychom pak museli dělat uvnitř této smyčky přesun vektoru na diagonálu a zpět a to by nebylo efektivní. Dle zadání máme počítat s tím, že vektory jsou mapovány na pravý sloupec procesorů – na začátku iterace? Na začátku algoritmu? Zdá se mi, že to zadání není dostatečně přesně formulováno. Co myslíte?

Nebo je myšleno od začátku algoritmu do konce první iterace, jako je to tady popsáno?

Foxův algoritmus na SF 2D toroidu

Foxův algoritmus pro násobení matic <math>\sqrt N * \sqrt N</math> na všeportovém toroidu <math>K(\sqrt p, \sqrt p)</math>, který používá SF přepínání. Byla zadána složitost lokálního násobení a kolik trvá přenos zprávy na délku d (klasický vzoreček pro SF).

Bylo ve zkoušce:2012-01-03 a 2012-01-17 a 2013-01-30, 2013-12-20, 2014-01-13 - s WH přepínáním

Řešení

:!:Viz skripta CZ [2006] str. 200, EN [2009], pg. 185

Algoritmus

<math>\forall j=1, … , \sqrt p</math> do_sequentially {

<math>\forall i=1,…, \sqrt p</math> do_in_parallel

Pi,(i+j) mod sqrt p rezešle matici Ai,(i+j) mod sqrt p v rámci řádku <math>i</math> (OAB);

<math>\forall i, k=1, …, \sqrt p</math> do_in_parallel

Pi,k přičte Ci,k součin přijatých matic Ai,k a Bi,k

<math>\forall k = 1, …, \sqrt p</math> do_in_parallel

Všechny submatice B*,k v sloupci orotují o <math>1</math> pozic nahoru

}

Časová složitost

Jestli čtu skripta správně, Foxův algoritmus předpokládá mapování blokově šachovnicově.

Složitost rozesílání OAB na všeportovém 1-D SF Toroidu <math>(t_s +\frac {N}{p}t_m)\frac{sqrt p }{2} </math>

Strana submatice která má <math>\frac{N}{p}</math> prvků bude <math>\frac{sqrt N}{sqrt p}</math> a lokální násobení by mělo být tudíž <math>(\frac{sqrt N}{sqrt p})^3 </math>

Složitost rotování matic o jednu pozici nahoru <math>t_s +\frac {N}{p}t_m </math>

Celková složitost je:

<math>O(\sqrt p(\frac{sqrt p }{2} t_s +\frac {\sqrt p}{2}\frac {N}{p} t_m + (\frac{sqrt N}{sqrt p})^3 + t_s +\frac {N}{p}t_m) )=</math>

<math>O(\frac {p}{2}t_s +\frac {N}{\sqrt p}(\frac {\sqrt p}{2} + 1 )t_m + \frac{(sqrt N)^3}{p})</math>

<math>O(\frac {p}{2}t_s +\frac {N}{2}t_m + \frac{(sqrt N)^3}{p})</math>

VasekJ: imho by za <math>t_m</math> mělo následovat i ve SF i ve WH <math>t_m * m</math> (velikost jednoho prvku matice má velikost m)

Škálovatelnost

<math>T(N, p) = p + N + \frac{(sqrt N)^3}{p}</math>

<math>C(N, p) = p^2 + Np + (sqrt N)^3</math>

<math>E(N, p) = \frac{(sqrt N)^3}{p^2 + Np + (sqrt N)^3}</math>

V tomto kroku můžete zanedbat <math>p^2</math> protože v nejhorším případě bude mít stejnou složitost jako Np. No a pak dál už je to snadný, psí1 a psí2. (dnes uznáno u zkoušky)

tedy psí_1(p)= p^2, psí_2(N)= sqrt(N)

Alg. násobení matice A(√N,√N) mapované blokově po řádcích vektorem x(√N,1) mapovaným blokově na mřížku M(p)

Bylo ve zkoušce: 2016-01-15, 2015-01-13, 2012-01-10

Popsat alg. násobení matice A(√N,√N) mapované blokově po řádcích vektorem x(√N,1) mapovaným blokově na mřížku M(p), 1⇐p⇐√N. Výsledný vektor y = Ax má být po skončení výpočtu mapován také blokově. Předpokládejte, že M(p) je všeportová s přepínáním ulož-pošli-dál (SF), kde přenos <math> \mu </math> čísel mezi procesory ve vzdálenosti <math> \delta </math> trvá čas t(<math> \delta </math>,<math> \mu </math>) = <math> t_s </math> + <math> \delta \mu </math> <math> t_m </math>. Dále předpokládejte, že skalární součin dvou vektorů o rozměru (k x 1) sekvenčně na 1 procesoru trvá čas <math> \beta </math>k, kde <math> \beta </math> je konstanta. Odvoďte co nejpřesněji jeho paralelní čas T(n,p) a izoefektivní funkce ψ1(p), ψ2(N).

Řešení

Každý cpu má <math>\frac{\sqrt N}{p} </math> řádků.

algoritmus má 2 části

  • A - rozeslat svou část vektoru x všem ostatním procesorům,
  • B - lokálně vynásobit a sečíst části.

<math>T_{A}</math>:

AAB na 1D všeportové mřížce. Všechny uzly pošlou svá data všem ostatním a nějaká dostanou. Ty si uloží a pošlou dál. Důležité je to, že si data uloží. Čili v dalším kroku zase nabíhá <math>t_{s}</math>. Počet těchto kroků se zjistí průměrem sítě - (p-1). Což je asymptoticky stejně jako p (to mi v písemce uznal). Každý krok se posílá na vzdálenost 1. Množství dat, které posíláme je <math>\frac{\sqrt N}{p} </math>. Kdyby byl 1-portová, tak v každém kroku odesíláme <math>O(\frac{\sqrt N}{p} )</math> dat a můžeme to počítat úplně stejně.

<math>T_{A} = (t_{s} + 1\frac{\sqrt N}{p}t_{m})p = p t_{s}+\sqrt N t_{m}</math>

<math>T_{B}</math>:

Nyní má kadý CPU komplet vektor x. Tímto vektorem musí vynásobit svých <math>\frac{\sqrt N}{p} </math> řádků. Takže násobíme <math>\frac{\sqrt N}{p} </math> krát dva vektory velikosti <math>\sqrt N </math> x 1. Jedna tato operace trvá <math>\beta \sqrt N </math>

<math>T_{B}= \frac{\sqrt N}{p} \beta \sqrt N = \beta \frac{ N}{p}</math>

celkově:

<math>T= T_{A}+T_{B}=pt_{s}+\sqrt N t_{m} + \beta \frac{ N}{p}</math>

<math>C(N,p)= p^2 t_{s}+\sqrt N p t_{m} + \beta N</math>

<math>E(N,p)= \frac{ SU(N)}{C(N,p)} =\frac{ \beta N}{p^2 t_{s}+\sqrt N p t_{m} + \beta N }</math>

U opravy mi bylo řečeno, že první sčítanec jmenovatele se dá zanedbat vůči druhému (p bude maximálně <math>\sqrt N</math> čili to bude maximálně rovno). Proč se stejnou logikou nemůžu zanedbat druhý sčítanec vůči třetímu už nevim.

Edit: Protože tam musíš nechat aspoň jeden člen vyjadřující komunikační část a jeden pro lokální část. Zanedbání provádíš jen mezi více komunikačními členy. IMHO.

Edit: IMHO muzes zanedbat prvni scitanec, protoze se da vyjadrit jako multiplikativni konstanta u toho druheho.

Edit: podle mě to jde (pokud zanedbám první sčítanec)

<math> \beta N = E_{0}(p \sqrt{N}t_{m} + \beta N)
\gamma N = p \sqrt{N}
\gamma \frac{N}{\sqrt{N}}*\frac{\sqrt{N}}{\sqrt{N}} = p
\gamma \sqrt{N} = p
N = (\frac{p}{\gamma})^{2} </math>

psi_1 a psi_2

Vyloženě nic zanedbávat se nemusí, klasicky se to rozdělí na podúlohy a pak zase spojí

<math>E(N,p)= \frac{ SU(N)}{C(N,p)} =\frac{ \beta . N}{p^2 .t_{s}+\sqrt N . p. t_{m} + \beta . N } = E_0 </math>

<math>\frac{ \beta . N}{p^2 .t_{s}+\sqrt N . p. t_{m} + \beta . N } = E_0 </math>

<math>\beta . N = E_0 \left(p^2 .t_{s}+\sqrt N . p. t_{m} + \beta . N\right) </math>

<math>\beta . N = E_0 . p^2 .t_{s} + E_0 . \sqrt N . p. t_{m} + E_0 . \beta . N </math>

<math>\beta . N - E_0 . \beta . N = E_0 . p^2 .t_{s} + E_0 . \sqrt N . p. t_{m} </math>

<math>\beta . N(1 - E_0) = E_0 . p^2 .t_{s} + E_0 . \sqrt N . p. t_{m}</math>

No a teď víme, že součet pravé strany se musí asymptoticky rovnat levé straně. Zajímá nás především asymptotické řešení, proto můžeme úlohu rozdělit na dvě části, kdy prvně budeme počítat pouze s jedním členem onoho součtu, pak s druhým členem, a pak to asymptoticky spojíme.

<math>\beta . N(1 - E_0) = E_0 . p^2 .t_{s} </math>

<math>N = \frac{E_0 . p^2 .t_{s}}{\beta . (1 - E_0)} = \frac{E_0 .t_{s}}{\beta . (1 - E_0)} . p^2 \dot= p^2 = \psi_{1_a}(p)</math>

A teď druhou část :

<math>\beta . N(1 - E_0) = E_0 . \sqrt N . p. t_{m}</math>

<math>N = \frac{E_0 . \sqrt N . p. t_{m}}{\beta . (1 - E_0)} = \frac{E_0. t_{m}}{\beta . (1 - E_0)} \sqrt N . p </math>

<math>\sqrt{N}= \frac{E_0. t_{m}}{\beta . (1 - E_0)} p </math>

<math>N= {\left(\frac{E_0. t_{m}}{\beta . (1 - E_0)}\right)}^2 p^2 \dot= p^2 = \psi_{1_b}(p) </math>

Tady to vyšlo obojí stejně, takže není moc co řešit, ale obecně to řešíme tak, že <math>\psi_1(p)</math> je asymptoticky minimální funkce a proto řešíme asymptoticky soustavu dvou rovnic kde :

<math>\psi{1_a} = N = \Omega(p^2)</math>
<math>\psi{1_b} = N = \Omega(p^2)</math>

Což zde je triviální a tedy <math> N = p^2 = \psi_1(p) </math>

No a <math> \psi_2(n) </math> je inverzní, čili :

<math> N = p^2 </math>
<math> p = \sqrt{N} = \psi_2(N) </math>

škola zkoušky s_řešením

1)
j+1) \cdot 2^k )</math> se liší maximálně ve 2 bitech ⇒ jakákoli komunikace potřebná v algoritmu probíhá maximálně po 2 hranách. === Složitost === Složitost se skládá z lokálního (sekvenčního) výpočtu <math>\frac{n}{p}</math> rovnic v <math>log(\frac{n}{p})</math> krocích a paralelní části. <math>T(n,p) = T_1(n,p) + T_2(n,p)</math> == Sekvenční část == <math> T_1(n,p) = \left( {n \over p} \cdot {1 \over 2^0} + {n \over p} \cdot {1 \over 2^1} + … + {n \over p} \cdot {1 \over { 2^{k-1} } } \right) = \frac{n}{p} \cdot \sum_{\small n=0}^{\small k-1} \frac{1}{2^n} </math> Jak je vidno, jedná se o součet geometrické posloupnosti. Součet prvních n členů posloupnosti se vypočítá jako <math>s_n = a_{\tiny 1} \frac{ 1-q^n }{1-q}</math>. V našem případě je <math>a_{\tiny 1} = \frac{n}{p},\: q = \frac{1}{2},\: n = k</math>. :!: Pozor nekdo to tu opravil na <math> n = k-1 </math> coz ale neni pravda protoze cela suma jede od 0 a ne od 1! Po dosazení do vzorce dostáváme: <math>T_1(n,p) = \frac{n}{p} \cdot \frac{ 1-\frac{1}{2^k} }{ 1-\frac{1}{2} } = \frac{n}{p} \cdot \frac{ \frac{2^k-1}{2^k} }{ \frac{1}{2} } = 2\frac{n}{p} \cdot \frac{ 2^k-1 }{ 2^k } </math> Nyní si musíme uvědomit, co tu představuje koeficient k. Jedná se o počet kroků, který bude pro každý procesor proveden sekvenčně, což je <math>k = log\frac{n}{p}</math>. Po dosazení: <math>T_1(n,p) = 2\frac{n}{p} \cdot \frac{ 2^{log\frac{n}{p}} -1 }{ 2^{log\frac{n}{p}} } = 2\frac{n}{p} \cdot \frac{ \frac{n}{p} -1 }{ \frac{n}{p} } = 2(\frac{n}{p} - 1) </math> Pozn.: Pro logaritmus platí <math>\normalsize y = log_2(x),\; x = 2^y</math>, z čehož vyplývá <math>\normalsize 2^{log_2(x)} = x</math>. == Paralelní část == V paralelní části bude provedeno <math>\normalsize \log p</math> redukčních kroků. Díky zmíněné speciální vlastnosti Grayova kódu bude komunikace probíhat maximálně po dvou hranách. Ze zadání pak vyplývá horní mez komunikačního zpoždění <math>\normalsize t_s + 2 t_m \cdot \mu</math>. <math>T_2(n,p) \le \log p \cdot (t_s + 2 t_m \cdot \mu)</math> EDIT: pro WH na mřížce by to mohlo být: logp kroků, tzn. <math>logp \cdot t_s + (1+2+4+…) \cdot t_d + (\frac{n}{2p} + \frac{n}{4p} + …) \mu \cdot t_m</math> tzn. nejdřív komunikují procesory vzdálenosti 1, poté vzd. 2 atd. To proběhne logp krát Viz obrázek. Množství dat, které si posílají je nejdřív polovina rovnic, poté polovina poloviny, atd. To proběhne log(n/p) krát = dokud nemám jen jednu rovnici. to jsou všechno geometrické řady, takže po úpravách dostaneme: <math>T_2(n,p) = logp \cdot t_s + (p-1) \cdot t_d + (\frac{n}{p}-1) \cdot \mu \cdot t_m </math> FIXME Edit By Rulfik: Dle mě to není pro ten případ s 1D WH Mřížkou uplně dobře, jelikož po sekvenční části se zredukuje počet rovnic na 1! Tudíž je velikost dat pro výměnu v každém paralelním kroku konstantní, mění se pouze vzdálenost, ta je dobře. Mělo by to tedy být: <math>logp \cdot t_s + (1+2+4+…) \cdot t_d + \mu \cdot t_m</math> a ve výsledku tedy <math>T_2(n,p) = logp \cdot t_s + (p-1) \cdot t_d + logp \cdot \mu \cdot t_m </math> EDIT: Aha, tak jsem to špatně pochopila. Je to tedy tak, že nejdřív to procesory zredukují lokálně na 1 rovnici (já myslela, že jen na půlku), posílají jen jednu rovnici. Takže procesory na druhé úrovni mají každý tři rovnice, vyřeší a pošlou zase jednu? A toto řešení 3 rovnic se už zanedbává? Response: Lokálně na jednu rovnici ano (viz anglická scripta str 188). Mělo by to být tak jak říkáš, i ve skriptech píše, že komunikační zátěž je značná a ten výpočet vlastně konstantní. == Celková složitost == <math>T(n,p) \leq 2(\frac{n}{p} - 1) + \log p \cdot (t_s + 2 t_m \cdot \mu ) = O \left ({n\over p} + \log p \right )</math> ===== Jacobiho algoritmus ===== Popište pseudokódem jednu iteraci Jakobiho algoritmu pro paralelní iterativní řešení soustavy n lineárních rovnic o n neznámých <math>A \vec{x} = \vec{b}</math> na p-procesorové 2-D mřížce <math>M(\sqrt{p},\sqrt{p})</math> na níž je matice <math>A</math> mapována blokově šachovnicově a všechny vektory blokově na poslední sloupec této 2-D mřížky. Identifikujte v tomto algoritmu základní výpočetní a komunikační operace. Odvoďte co nejpřesnější výraz pro paralelní čas <math>T(n,p)</math> jedné této iterace, jestliže:
  1. mřížka je 1-portová s plně-duplexními linkami a s červím (WH) přepínáním paketů, kde přenos paketu o velikosti <math>\mu</math> mezi 2 uzly ve vzdálenosti <math>d</math> trvá <math>t(d, \mu) = t_s + d t_d + \mu t_m</math>,
  2. jedna aritmetická/paměťová operace procesoru trvá jednotkový čas,
  3. sekvenční násobení matice <math>r \times r</math> vektorem <math>r \times 1</math> trvá čas <math>\alpha r^2</math>.
Bylo ve zkoušce: 2012-01-24 a 2012-01-31 a 2012-12-18 ==== Řešení ==== :!:Viz skripta CZ [2006] str. 205-206 nebo EN [2009] str. 191 Jedna iterace jacobiho algoritmu:
while (||vector r|| > epsilon) do_sequentially {
   t := t + 1;
   ∀ i:= 0 .. n - 1 do parallel
      xi(t) = ri(t-1)/ai,i + xi(t-1);
   vector r(t) = vector b - matice A * vector x(t)
}
Na 1. řádku se vyhodnocuje kriterium konvergence - paralelní výpočet skalárního součinu vektorů to je paralelní redukce a OAB výsledku tohoto součinu. U paralelní fáze 3. a 4. řádku zaleží na namapování matice, zde se jedná o 2D mřížku stejně jako v CZ skriptech, ale vektory jsou namapovány místo na diagonálu na poslední sloupec blokově (podle mne se jedná o vektory - r,b,x), což díky WH směrování by se měl tento vektor v jednom kroku poslat na diagonalu. Poté provest výpočet. 5. řádek je násobení matice vektorem (následné odečtní dvou vektorů lze zanedbat) === 1. řádek má složitost: === Par. redukce <math> T(N,p)= O(\frac {N}{p} + log \sqrt p ) = O(\frac {N}{p} + log p ) </math> + EDIT: FIXME Po fázi redukce drží tento výsledek jeden z procesorů nemělo by se tak v následující fázi jednat o OAB na 2D mřížce? Tak aby o výsledku skalárního součinu věděly všechny CPU's. OAB na 1-portové = Binární zdvojování (záleží, ale na pozici zdroje): počet opakování = <math> log \sqrt p = \frac{1}{2} log p </math> JDU: Proč ne <math>log p </math>?? <math>log \sqrt p </math> na jednom rozměru + <math>log \sqrt p </math> na druhém rozměru. <math> d*td = \(sqrt p - 1)td </math> FIXME Nemělo by pro td platit spíše exc(u)td nebo v tomto případě <math>\(sqrt p - 1)td</math> (broadcastuju z posledniho sloupce) dle P10S26. Délky cest přeci na n vůbec nezávisí. Pravda - opraveno <math> \mu tm = \frac{n}{p}log p tm </math> JDU: Proč posíláme data o velikosti n/p, když norma, která se OAB posílá je jedno číslo? Celková složitost je: <math> O (\frac{n}{p} + log p + \frac{1}{2}log p (ts + \frac {n}{p}tm) + \(sqrt p - 1) td) = O (\frac{n}{p} + \frac {n}{p} log p tm + \(sqrt p - 1)td) </math> === 3. a 4. má složitost: === Poslání vektoru r na diagonálu, kde jsou namapovány ai,i konstanty. <math>
 O( ts + \sqrt p td + \frac{n}{p} tm )
</math> → Proč je <math>\frac{n}{p} tm</math>? Přeci se posílá jenom r a to je <math>\frac{\sqrt{N}}{\sqrt{p}}</math> čísel ne?
JDU: Souhlasím s <math>\frac{n}{\sqrt{p}}</math>, kde n je strana matice dle zadáníVydělení a sečtení výsledných hodnot <math>
 O( 2\frac{n}{p})
</math> JDU: opět se domnívám, že se bude dělit vektor o výšce jen <math>\frac{n}{\sqrt{p}}</math> Celková složitost je: <math> O( ts + \sqrt p td + \frac{n}{p} tm + 2\frac{n}{p} ) = O( \sqrt p td + \frac{n}{p} tm + 2\frac{n}{p} ) </math> === 5. má složitost === Ze stránky 197 CZ skript. Má násobení matice a vektoru 4 fáze. 1. Rozeslání vektoru na diagonálu - ta samá složitost jako 1. část na řádku 3 a 4 = <math>
 O( ts + \sqrt p td + \frac{n}{p} tm )
</math> JDU: Pokud zde chceme posílat vektor X z pravého sloupce na diagonálu, museli bychom ho tam v části, kde se řeší 3. a 4. řádek také poslat.
Může ten vektor X zůstat na těch diagonálách po tom výpočtu, nebo ho opravdu musíme v tom kroku odeslat do pravého sloupce a v dalším kroku ho poslat zase zpět kvůli násobení? 2. rozeslání všech hodnot ve sloupečku, to by mělo mít stejnou složitost jako OAB z řádku 1. <math> O (\frac {n}{p} log p tm + \(sqrt p - 1)td) </math> 3. Každá procesor si vynásobí svojí matici vektorem <math> O ((\frac {n}{p})^2) </math> 4. Par. redukce na řádcích má stejnou složitost jako OAB, jedná se přesně o opačný proces + sekvenční redukce jednotlivých vektorů paralelní komunikační část: <math> O (\frac {n}{p} log p tm + \(sqrt p - 1)td) </math> Každý procesor provede redukci na n/p číslech: <math> O (\frac {n}{p}) </math> Složitost 4. fáze: <math> O (\frac {n}{p} log p tm + \(sqrt p - 1)td + \frac {n}{p}) </math> Celková složitost všech fází: <math> O ( ts + \sqrt p td + \frac{n}{p} tm + \frac {n}{p} log p tm + \(sqrt p - 1)td + \frac {n}{p} log p tm + \(sqrt p - 1)td + (\frac {n}{p})^2 + \frac {n}{p}) = O ( \sqrt p td + 2\frac {n}{p} log p tm + (\frac {n^2}{p}
users/martin.kocicka/pdp/10b.1497036857.txt.gz · Last modified: 2017/06/09 19:34 by martin.kocicka