====== 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 BLOKOVĚ šachovnicově na 2D mřížku , vektor 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 x vektorem trvá čas .
★ //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 x a procesory v prvním sloupci mřížky mají každý 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: \\
\\
* **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)): \\
\\
* **Krok 3)** Lokální násobení submatic zabere (je přímo v zadání příkladu):
* Lokální redukce na jedno číslo (každý řádek ze své submatice musí zredukovat na jedno číslo):
* **Krok 4)** Paralelní redukce (každý procesor má už nyní pouze sloupcový subvektor):
== 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)
Jak je vidět, Krok 1 je asymptoticky menší než krok 2, takže ho k tomu asymptoticky přičtu :
\\
Sekvenční algoritmus pracuje dle zadání : , pro jeden procesor to tedy bude :
\\
\\
\\
== Postup 2.2 ==
\\
levý zanedbáme a pravý je vždy větší
\\
\\
\\
\\
\\
\\
\\
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í :
\\
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 :
\\
\\
\\
\\
== 2.2.2. Vytváření cesty ==
Nechám v rovnici druhou část pro vytváření cesty :
\\
\\
\\
\\
== 2.2.merge ==
Teď obě rovnice "zmerguju". Vycházím z toho, že 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 :
\\
\\
Aby obě dvě rovnice platili zároveň, tak N musí být nejméně řádu a tedy :
\\
A druhá část je hned :
\\
\\
\\
\\
**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}}