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
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
users:martin.kocicka:pdp:10b [2017/06/09 19:34] – martin.kocicka | users:martin.kocicka:pdp:10b [2017/06/13 11:18] (current) – martin.kocicka | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PDP - Vyřešené zkouškové příklady za 10 bodů ====== | ====== PDP - Vyřešené zkouškové příklady za 10 bodů ====== | ||
- | ====== Kolektivní komunikační algoritmy | + | ====== Kolektivní komunikační algoritmy ====== |
===== OAS 2-D toroid, WH, kombinující ===== | ===== OAS 2-D toroid, WH, kombinující ===== | ||
Line 79: | Line 79: | ||
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í). | 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 | + | ====== Lineární algebra ====== |
===== Cannonův algoritmus na všeportové hyperkrychli ===== | ===== Cannonův algoritmus na všeportové hyperkrychli ===== | ||
Line 268: | Line 267: | ||
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á, | 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á, | ||
- | |||
- | |||
===== Cannonův algoritmus na 1-portové mřížce ===== | ===== Cannonův algoritmus na 1-portové mřížce ===== | ||
Line 304: | Line 301: | ||
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ě. | 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é < | ||
- | ==== Ř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 [[https:// | ||
- | |||
- | Algoritmus : | ||
- | Na jednom procesoru by mělo být < | ||
- | |||
- | |||
- | * **První fáze** | ||
- | |||
- | Jeden procesor musí spočítat inverzi\\ | ||
- | < | ||
- | |||
- | * **Druhá fáze** | ||
- | |||
- | OAB na sloupci | ||
- | |||
- | < | ||
- | |||
- | |||
- | * **Třetí fáze** | ||
- | |||
- | násobení + OAB na řádku | ||
- | |||
- | < | ||
- | |||
- | * **Čtvrtá fáze** | ||
- | |||
- | Každý procesor opět násobí. | ||
- | |||
- | < | ||
- | |||
- | * **Celkem** | ||
- | No a jedeme po diagonále, která je dlouhá < | ||
- | |||
- | < | ||
- | |||
- | U T_2 se nám to jediné mění v závislosti na parametru " | ||
- | |||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | |||
- | ** První část ** | ||
- | |||
- | < | ||
- | |||
- | ** Druhá část ** | ||
- | |||
- | < | ||
- | |||
- | === Výpočet === | ||
- | < | ||
- | 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}} | ||
- | </ | ||
- | |||
- | < | ||
- | SU = \alpha (\sqrt{N})^3 | ||
- | </ | ||
- | |||
- | A jde se upravovat : | ||
- | |||
- | < | ||
- | 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} | ||
- | </ | ||
- | |||
- | < | ||
- | C(N,p) = \beta N \sqrt{N} + | ||
- | \log {p} \sqrt{p} N t_m + | ||
- | p^2 t_d + | ||
- | 2 \gamma N \sqrt{N} | ||
- | </ | ||
- | |||
- | < | ||
- | E(N,p) = \frac{SU(N)}{C(N, | ||
- | |||
- | \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 | ||
- | \\ | ||
- | |||
- | </ | ||
- | |||
- | Rozdělíme na dva podúkoly a zmergujeme : | ||
- | |||
- | ** a) ** | ||
- | |||
- | < | ||
- | 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) | ||
- | \\ | ||
- | |||
- | </ | ||
- | |||
- | ** b) ** | ||
- | |||
- | < | ||
- | 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) | ||
- | \\ | ||
- | |||
- | </ | ||
- | |||
- | No a teď to dáme dohromady : | ||
- | |||
- | < | ||
- | |||
- | N = \Omega(\psi_{1_a}(p)) = \Omega(p \log^2{p})\\ | ||
- | N = \Omega(\psi_{1_b}(p)) = \Omega(p \sqrt[3] {p}) | ||
- | </ | ||
- | |||
- | No a z toho plyne že : | ||
- | |||
- | < | ||
- | |||
- | N = p \sqrt[3] {p} = \psi_1(p)\\ | ||
- | N = p^{\frac{4}{3}}\\ | ||
- | p = N^{\frac{3}{4}} = \psi_2(N)\\ | ||
- | |||
- | |||
- | </ | ||
- | |||
- | |||
- | ===== Ř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, | ||
- | |||
- | ★ //Bylo ve zkoušce: NE[[par_zkouska_2012-01-24|2012-01-24]] (místo Q< | ||
- | |||
- | |||
- | ==== Řešení ==== | ||
- | |||
- | :!://Viz skripta CZ [2006] str. 201// | ||
- | === Algoritmus === | ||
- | |||
- | Soustava má podobu: | ||
- | |||
- | < | ||
- | \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} | ||
- | &\cdots & \\ | ||
- | \end{array} | ||
- | </ | ||
- | |||
- | Pokud jsou všechny koeficienty < | ||
- | |||
- | Komunikační závislosti při paralelním algoritmu jsou naznačeny na obrázku: | ||
- | |||
- | {{: | ||
- | |||
- | Při < | ||
- | |||
- | V 1. kroku komunikují uzly ve vzdálenosti 1. | ||
- | |||
- | V 2. kroku uzly ve vzdálenosti 2, ve třetím ve vzdálenosti < | ||
- | |||
- | |||
- | === Složitost === | ||
- | |||
- | Složitost se skládá z lokálního (sekvenčního) výpočtu < | ||
- | |||
- | < | ||
- | |||
- | == Sekvenční část == | ||
- | < | ||
- | T_1(n, | ||
- | = \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} | ||
- | </ | ||
- | |||
- | Jak je vidno, jedná se o součet geometrické posloupnosti. Součet prvních //n// členů posloupnosti se vypočítá jako < | ||
- | |||
- | Po dosazení do vzorce dostáváme: | ||
- | |||
- | < | ||
- | = \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 } | ||
- | </ | ||
- | |||
- | 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ě, | ||
- | |||
- | < | ||
- | = 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) | ||
- | </ | ||
- | |||
- | Pozn.: Pro logaritmus platí < | ||
- | |||
- | == Paralelní část == | ||
- | |||
- | V paralelní části bude provedeno < | ||
- | |||
- | < | ||
- | |||
- | EDIT: **pro WH na mřížce by to mohlo být**: | ||
- | |||
- | logp kroků, tzn. < | ||
- | |||
- | 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: | ||
- | < | ||
- | 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í, | ||
- | |||
- | 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 == | ||
- | |||
- | < | ||
- | |||
- | |||
- | ===== 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 < | ||
- | - 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 < | ||
- | - jedna aritmetická/ | ||
- | - sekvenční násobení matice < | ||
- | |||
- | ★ //Bylo ve zkoušce: [[par_zkouska_2012-01-24|2012-01-24]] a [[par_zkouska_2012-01-31|2012-01-31]] a [[par_zkouska_2012-12-18|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)/ | ||
- | | ||
- | } | ||
- | </ | ||
- | |||
- | 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 | ||
- | |||
- | < | ||
- | T(N,p)= O(\frac {N}{p} + log \sqrt p ) = O(\frac {N}{p} + log p ) | ||
- | </ | ||
- | |||
- | |||
- | + | ||
- | |||
- | 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í = | ||
- | < | ||
- | log \sqrt p = \frac{1}{2} log p | ||
- | </ | ||
- | |||
- | JDU: Proč ne < | ||
- | |||
- | |||
- | < | ||
- | d*td = \(sqrt p - 1)td | ||
- | </ | ||
- | |||
- | FIXME Nemělo by pro td platit spíše exc(u)td nebo v tomto případě < | ||
- | |||
- | < | ||
- | \mu tm = \frac{n}{p}log p tm | ||
- | </ | ||
- | |||
- | JDU: Proč posíláme data o velikosti n/p, když norma, která se OAB posílá je jedno číslo? | ||
- | |||
- | Celková složitost je: | ||
- | |||
- | < | ||
- | 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) | ||
- | </ | ||
- | |||
- | === 3. a 4. má složitost: === | ||
- | |||
- | Poslání vektoru r na diagonálu, kde jsou namapovány a< | ||
- | |||
- | < | ||
- | O( ts + \sqrt p td + \frac{n}{p} tm ) | ||
- | </ | ||
- | |||
- | //-> Proč je //< | ||
- | JDU: Souhlasím s < | ||
- | |||
- | Vydělení a sečtení výsledných hodnot | ||
- | < | ||
- | O( 2\frac{n}{p}) | ||
- | </ | ||
- | |||
- | JDU: opět se domnívám, že se bude dělit vektor o výšce jen < | ||
- | |||
- | Celková složitost je: | ||
- | |||
- | < | ||
- | 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} ) | ||
- | </ | ||
- | |||
- | === 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 = | ||
- | |||
- | < | ||
- | O( ts + \sqrt p td + \frac{n}{p} tm ) | ||
- | </ | ||
- | |||
- | 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. | ||
- | |||
- | < | ||
- | O (\frac {n}{p} log p tm + \(sqrt p - 1)td) | ||
- | </ | ||
- | |||
- | 3. Každá procesor si vynásobí svojí matici vektorem | ||
- | |||
- | < | ||
- | O ((\frac {n}{p})^2) | ||
- | </ | ||
- | |||
- | 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: | ||
- | < | ||
- | O (\frac {n}{p} log p tm + \(sqrt p - 1)td) | ||
- | </ | ||
- | |||
- | Každý procesor provede redukci na n/p číslech: | ||
- | < | ||
- | O (\frac {n}{p}) | ||
- | </ | ||
- | |||
- | Složitost 4. fáze: | ||
- | |||
- | < | ||
- | O (\frac {n}{p} log p tm + \(sqrt p - 1)td + \frac {n}{p}) | ||
- | </ | ||
- | |||
- | Celková složitost všech fází: | ||
- | |||
- | < | ||
- | 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})) | ||
- | </ | ||
- | |||
- | === Celková složitost by měla být: === | ||
- | |||
- | < | ||
- | 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})) = | ||
- | </ | ||
- | |||
- | < | ||
- | O ( \frac {n}{p} log p tm + \sqrt p td + (\frac {n^2}{p})) | ||
- | </ | ||
- | |||
- | 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 < | ||
- | |||
- | 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)/ | ||
- | | ||
- | } | ||
- | </ | ||
- | |||
- | 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 < | ||
- | |||
- | < | ||
- | O ( ts + 3*\frac {\sqrt n}{\sqrt p}*tm + ({\sqrt p} - 1) * td) | ||
- | </ | ||
- | |||
- | V dalším kroce se násobí matice vektorem - viz [[par_řešené_příklady_12b# | ||
- | (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á < | ||
- | |||
- | 1) Všechno sečíst na diagonále by měl být běžný postup, akorát vzdálenosti budou dvojnásobné, | ||
- | |||
- | 2) OAB na mřížce - musí se poslat všem procesorům, | ||
- | |||
- | |||
- | 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 < | ||
- | |||
- | 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 na SF 2D toroidu ===== | ||
Line 915: | Line 364: | ||
tedy psí_1(p)= p^2, psí_2(N)= sqrt(N) | tedy psí_1(p)= p^2, psí_2(N)= sqrt(N) | ||
+ | |||
===== Alg. násobení matice A(√N, | ===== Alg. násobení matice A(√N, | ||
Line 1009: | Line 459: | ||
< | < | ||
- | |||
- | |||
- | |||
- | {{tag> |
users/martin.kocicka/pdp/10b.1497036857.txt.gz · Last modified: 2017/06/09 19:34 by martin.kocicka