====== PDP - Vyřešené zkouškové příklady za 12 bodů ====== ===== Násobení matice vektorem, mapování matice blokově šachovnicově ===== Násobení matice vektorem, mapování matice A(sqrt{N}, sqrt{N} ) BLOKOVĚ šachovnicově na 2D mřížku M(sqrt{p}, sqrt{p} ), vektor X(sqrt{N}) na první sloupec procesorů mapovaných šachovitě, WH. Popsat algoritmus, co nejpřesněji T(N, p), spočítat Ψ1(p), Ψ2(N). Sekvenční násobení matice rxr vektorem r trvá čas \alpha r^{2}. ★ //Bylo ve zkoušce: [[par_zkouska_2012-05-18|2012-05-18]], [[škola:předměty:mi-par:par_zkouska_2014-01-06|2014-01-06]], [[par_zkouska_2013-01-09|2013-01-09]] // ==== Řešení === :!://Viz skripta CZ [2006] str. 196-197 nebo EN [2009] str. 181, přednáška FIT [12/2012] slajd 15-16// ==Algoritmus== - Krok 1: Poslat části vektoru X na diagonálu - Krok 2: OAB ve sloupci - Krok 3: Lokální násobení submatic - Krok 4: V řádcích se provedou nejdřív lokální redukce na jednotlivých procesorech a následně i paralelní redukce s výsledkem v prvním sloupci. * Každý procesor si drží svou submatici velikosti \frac{\sqrt N}{\sqrt p} x \frac{\sqrt N}{\sqrt p} a procesory v prvním sloupci mřížky mají každý \frac{\sqrt N}{\sqrt p} vektoru X. == Postup 1 == * **Krok 1)** Posílání vektoru X na diagonálu procesorů. Musí se počkat na toho nejpomalejšího - toho který posílá na nejdelší vzdálenost : Vychází ze vzorečku: \\ t_{s} + \underbrace{d}_{\text{ Vzdalenost }} t_{d} + \underbrace{\mu}_{\text{ Velikost dat}} t_{m}\\ t_{s} + (sqrt p -1)t_{d}+ \frac{sqrt N}{sqrt p}t_{m} * **Krok 2)** OAB paralelně ve sloupcích zabere na WH: Vychází ze vzorečku (počítáme s nejhorším případem, tj. o levý horní nebo pravý spodní procesor v dané mřížce, asymptoticky ale mají tak jako tak všechny procesory stejnou složitost, nejlepší to mají ty procesory uprostřed, kteří to zvládnou "jenom" 2x rychleji (může to posílat na obě strany)): \\ \log_z (t_{s} + m t_m) + (z - 1) t_d \\ log sqrt p(t_{s}+\frac{sqrt N}{sqrt p}t_{m}) + (sqrt p -1)t_{d} * **Krok 3)** Lokální násobení submatic zabere (je přímo v zadání příkladu): \alpha (\frac{sqrt N}{sqrt p})^{2} = \alpha \frac{N}{p} * Lokální redukce na jedno číslo (každý řádek ze své submatice musí zredukovat na jedno číslo): \frac{sqrt N}{sqrt p} \frac{sqrt N}{sqrt p} = \frac{N}{p} * **Krok 4)** Paralelní redukce (každý procesor má už nyní pouze sloupcový subvektor): \frac{sqrt N}{sqrt p} \log {\sqrt p} == postup 2 == Postup je skoro stejný jako v případě 1, asymptoticky by měl vyjít stejně. Podle skript se v třetí fázi pouze sekvenčně udělá vše potřebné, takže tam další přepočty nedělám a také podle skript je fáze druhá a čtvrtá asymptoticky stejná, tak je tak i rovnou počítám. Tedy - Krok 1: Poslat vektor části vektoru X na diagonálu - Krok 2: OAB ve sloupci - Krok 3: Lokální násobení submatic - Krok 4: Paralelní redukce (dle skript Krok 4 = O(Krok 2), tak ho tam prostě počítám dvakrát) T(n,p) = \underbrace{t_{s} + (\sqrt{p}-1)t_{d}+ \frac{\sqrt{N}}{\sqrt{p}}t_{m}}_{\text{Krok 1}} + \underbrace{2 \log \sqrt{p}(t_{s}+(\frac{\sqrt{N}}{\sqrt{p}})t_{m}) + 2(sqrt{p}-1)t_{d}}_{\text{Krok 2 + Krok 4}} + \underbrace{\alpha \frac{N}{p}}_{\text{Krok 3}} Jak je vidět, Krok 1 je asymptoticky menší než krok 2, takže ho k tomu asymptoticky přičtu : T(n,p) = 2 \log \sqrt{p}(t_{s}+(\frac{\sqrt{N}}{\sqrt{p}})t_{m}) + 3(sqrt{p}-1)t_{d} + \alpha \frac{N}{p}\\ T(n,p) = 2 \log \sqrt{p} t_{s} + 2 \log \sqrt{p} \frac{\sqrt{N}}{\sqrt{p}} t_{m} + 3 sqrt{p} t_{d} + \alpha \frac{N}{p} C(n,p) = 2 p \log \sqrt{p} t_{s} + 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} + 3 p sqrt{p} t_{d} + \alpha N Sekvenční algoritmus pracuje dle zadání : \alpha \frac{N}{p}, pro jeden procesor to tedy bude : \alpha N SU(n) = \alpha N E(n,p) = \frac{SU(n)}{C(n,p)} = E_0\\ \frac{\alpha N}{2 p \log \sqrt{p} t_{s} + 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} + 3 p sqrt{p} t_{d} + \alpha N} = E_0\\ \alpha N= 2 p \log \sqrt{p} t_{s} E_0 + 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} E_0 + 3 p sqrt{p} t_{d} E_0 + \alpha N E_0 \\ == Postup 2.2 == 2 p \log \sqrt{p} t_{s} E_0 = O(3 p sqrt{p} t_{d} E_0) \\ levý zanedbáme a pravý je vždy větší \alpha N \dot= 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} E_0 + 3 p sqrt{p} t_{d} E_0 + \alpha N E_0 \\ - 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} E_0 = 3 p sqrt{p} t_{d} E_0 + \alpha N E_0 - \alpha N \\ 2 \sqrt{p} \log \sqrt{p} \sqrt{N} t_{m} E_0 = - 3 p sqrt{p} t_{d} E_0 - \alpha N E_0 + \alpha N \\ 2 t_{m} E_0 \sqrt{p} \log \sqrt{p} \sqrt{N} = - t_{d} E_0 3 p sqrt{p} + N (\alpha - \alpha E_0) \\ 2 t_{m} E_0 \sqrt{p} \log \sqrt{p} \sqrt{N} = N (\alpha - \alpha E_0) - t_{d} E_0 3 p sqrt{p} \\ \underbrace{2 t_{m} E_0}_{\beta} \sqrt{p} \log \sqrt{p} \sqrt{N} = N \underbrace{(\alpha - \alpha E_0)}_{\gamma} - \underbrace{3 t_{d} E_0}_{\delta} p sqrt{p} \\ \beta \sqrt{p} \log \sqrt{p} \sqrt{N} = \gamma N - \delta p sqrt{p} \\ Nyní je potřeba udělat rovnici se zanedbáním jedné části, pak se zanedbáním druhé části a pak asymptoticky vybrat to asymptoticky menší/větší (podle toho, jestli si vyjádřím "p" nebo "N") Pokud se podívám, na původ těch výrazů, zjistím následující : \underbrace{\beta \sqrt{p} \log \sqrt{p} \sqrt{N}}_{\text{Posilani dat v kroku 2,4 }} = \underbrace{\gamma N}_{\text{ Sekvencni cast }} - \underbrace{\delta p sqrt{p}}_{\text{ Vytvareni cesty v kroku 2,4}} \\ Sekvenční část musí zůstat vždy, ale můžu úlohu rozdělit na dvě části, tj. jednou počítat jenom s posíláním dat a jednou s vytvářením cesty. == 2.2.1. Posílání dat == Nechám v rovnici posílání dat : \beta \sqrt{p} \log \sqrt{p} \sqrt{N} = \gamma N \\ \beta \sqrt{p} \log \sqrt{p} = \gamma \sqrt{N} \\ \frac{\beta^2 p \log^2 \sqrt{p}}{\gamma^2} = N \\ N = \frac{\beta^2 p \log^2 \sqrt{p}}{\gamma^2} \dot = p \log^2 {p} = \psi_{1_a}(p) \\ == 2.2.2. Vytváření cesty == Nechám v rovnici druhou část pro vytváření cesty : 0 = \gamma N - \delta p sqrt{p} \\ \delta p sqrt{p} = \gamma N\\ \frac{\delta p sqrt{p}}{\gamma} = N\\ N = \frac{\delta p sqrt{p}}{\gamma} \dot= p sqrt{p} = \psi_{1_b}(p)\\ == 2.2.merge == Teď obě rovnice "zmerguju". Vycházím z toho, že \psi_1(p) je asymptoticky MINIMÁLNÍ (viz definice v první přednášce). Zajímá nás tedy co nejmenší možné. Z toho, co jsme vypočítali víme že : N = \Omega(p sqrt{p}) \\ N = \Omega(p \log^2 {p}) \\ Aby obě dvě rovnice platili zároveň, tak N musí být nejméně řádu p sqrt{p} a tedy : N = p sqrt{p} = \psi_1(p) \\ A druhá část je hned : N = p sqrt{p} \\ N = p^{\frac{3}{2}} \\ N^{\frac{2}{3}} = p \\ N^{\frac{2}{3}} = \sqrt[3]{N^2} = p = \psi_2(N) \\ **Tak jsem volal s Tvrdíkem po skypu a toto řešení je SPRÁVNĚ. Ve skriptech má drobnou nepřesnost, pro 2D mřížku je opravdu takováto složitost. (On to má ve skriptech jako pro hyperkrychli a 2D mřížku, ale ve skutečnosti to platí pouze pro hyperkrychli, pro 2D mřížku platí to, co jsem tady napsal).** == postup 2.1 == Tento postup je sice správný, ale prý zbytečně složitý a pro některé případy nepoužitelný (třeba pro větší odmocniny jak ze dvou). Nyní vzhledem k dalším obtížným úpravám to zredukuji asymptoticky co nejvíce. Potřebuji se zbavit odmocniny z N, což mohu udělat [[https://www.fit-wiki.cz/%C5%A1kola/p%C5%99edm%C4%9Bty/mi-par/principy_%C5%99e%C5%A1en%C3%AD_%C3%BAloh#odmocnina_navíc|tímto způsobem]] Pro přehlednost jsem tento alternativní postup dal do zvláštní stránky, pro většinu případů se vám bude hodit spíše znalost postupu 2.2. Na alternativní řešení se můžete podívat [[par_sachovnice_druhe_reseni|zde]] {{tag>zkoušky s_řešením škola}}