Paralelní algoritmy v lineární algebře Násobení matic
Násobení matic mějme matice A, B, C R n,n počítáme součin C = AB mějme p procesu a necht p je mocnina dvou matice rozdělíme blokově na p p bloků pak je C i,j = p 1 k=0 A i,k B k,j výpočet bloku C i,j provádí ten proces, na který je blok mapován od ostatních procesů si musí vyžádat příslušné bloky A i,k a B k,j
Násobení matic Příklad: pro p = 9 C 0,0 = A 0,0 B 0,0 + A 0,1 B 1,0 + A 0,2 B 2,0 C 1,0 = A 1,0 B 0,0 + A 1,1 B 1,0 + A 1,2 B 2,0 C 2,0 = A 2,0 B 0,0 + A 2,1 B 1,0 + A 2,2 B 2,0 C 0,1 = A 0,0 B 0,1 + A 0,1 B 1,1 + A 0,2 B 2,1 C 1,1 = A 1,0 B 0,1 + A 1,1 B 1,1 + A 1,2 B 2,1 C 2,1 = A 2,0 B 0,1 + A 2,1 B 1,1 + A 2,2 B 2,1 C 0,2 = A 0,0 B 0,2 + A 0,1 B 1,2 + A 0,2 B 2,2 C 1,2 = A 1,0 B 0,2 + A 1,1 B 1,2 + A 1,2 B 2,2 C 2,2 = A 2,0 B 0,2 + A 2,1 B 1,2 + A 2,2 B 2,2 vidíme, že např. v prvním kroku tři různé procesy potřebují současně bloky A 0,0, A 1,0, A 2,0 a podobně pro bloky z matice B
Násobení matic tyto konflikty jsou nevýhodné zejména pro architektury s distribuovanou pamětí změníme pořadí sčítání bloků v jednotlivých procesech každý řádek pro výpočet bloku C i,j orotujeme (i + j)-krát doleva C 0,0 = A 0,0 B 0,0 + A 0,1 B 1,0 + A 0,2 B 2,0 C 1,0 = A 1,1 B 1,0 + A 1,2 B 2,0 + A 1,0 B 0,0 C 2,0 = A 2,2 B 2,0 + A 2,0 B 0,0 + A 2,1 B 1,0 C 0,1 = A 0,1 B 1,1 + A 0,2 B 2,1 + A 0,0 B 0,1 C 1,1 = A 1,2 B 2,1 + A 1,0 B 0,1 + A 1,1 B 1,1 C 2,1 = A 2,0 B 0,1 + A 2,1 B 1,1 + A 2,2 B 2,1 C 0,2 = A 0,2 B 2,2 + A 0,0 B 0,2 + A 0,1 B 1,2 C 1,2 = A 1,0 B 0,2 + A 1,1 B 1,2 + A 1,2 B 2,2 C 2,2 = A 2,1 B 1,2 + A 2,2 B 2,2 + A 2,0 B 0,2
Násobení matic Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Násobení matic a sumu zaměníme za 2 C i,j = A i,k B k,j k=0 2 C i,j = A i,(k+i+j)%3 B (k+i+j)%3,j k=0
Násobení matic Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 v každém kroku algoritmu bloky matice A rotují o jeden doleva a bloky matice B o jeden nahoru
Násobení matic Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda GEM je základem přímých řešičů lineárních soustav rovnic ukážeme si paralelizaci pro případ plné matice lineární soustavy začneme s přímým chodem GEM, tj. prvním eliminačním krokem sekvenční algoritmus má následující tvar
Gaussova eliminační metoda 1 void GEM( double A [ n ] [ n ], double b [ n ] ) 2 { 3 / 4 Outer loop 5 / 6 for ( i n t k = 0; k < n ; k++ ) 7 { 8 / 9 D i v i s i o n step 10 / 11 for ( i n t j = k + 1; j < n ; j ++ ) 12 A [ k ] [ j ] /= A [ k ] [ k ] ; 13 b [ k ] /= b [ k ] / A [ k ] [ k ] ; 14 A [ k ] [ k ] = 1. 0 ; 15 for ( i n t i = k + 1; i < n ; i ++ ) 16 { 17 / 18 E l i m i n a t i o n step 19 / 20 for ( i n t j = k + 1; j < n ; j ++ ) 21 A [ i ] [ j ] = A [ i ] [ k ] A [ k ] [ j ] ; 22 b [ i ] = A [ i ] [ k ] y [ k ] ; 23 A [ i ] [ k ] = 0. 0 ; 24 } 25 } 26 }
Gaussova eliminační metoda výpočet probíhá podle následujícího schématu Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Paralelizace podle řádků matice: každý rádek matice A mapujeme na jeden proces výpočet k-tého kroku eliminace probíhá následujícím způsobem
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda lze ukázat, že tento algoritmus není nákladově optimální tedy ani nebude mít dobrou efektivitu a škálovatelnost ukážeme si modifikaci, která tento problém řeší zavedeme pipelining, čímž dokážeme současně provádět komunikaci i výpočet v předchozím algoritmu byl vnější cyklus (řádek 6) prováděn sekvenčně to nyní napravíme jakmile proces P k+1 provede eliminaci svého řádku, nemusí již čekat na ostatní procesy a může provést dělení pivotem a následně poslat svůj řádek ostatním
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003
Gaussova eliminační metoda dále si můžeme všimnout, že proces P 3 provádí výrazně více výpočtů, než P 0 řešením je použít méně procesů, než kolik je řádků matice např. pro n = 8 a p = 2 se nabízí: blokové mapování P 0 {0, 1, 2, 3} P 1 {4, 5, 6, 7} cyklické mapování P 0 {0, 2, 4, 6} P 1 {1, 3, 5, 7} je zřejmé, že cyklické mapování je pro GEM výhodnější GEM má složitost n 3 při využití n procesorů se nemůžeme dostat na nižší složitost než n 2 ukážeme si algoritmus pro p = θ(n 2 ) procesorů
Gaussova eliminační metoda tentokrát budeme pro začátek mapovat jeden proces na jeden prvke matice budeme paralelizovat i cykly přes řádky
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 na začátku k-tého kroku nejrpve provedeme broadcast prvků v k-tém sloupci pod diagonálou, každý do svého řádků
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 dále se podělí k-tý řádek pivotem
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 prvky k-tého řádku se broadcastují každý ve svém sloupci
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 provede se paralelně eliminace v celé aktivní části matice
Gaussova eliminační metoda i zde lze pomocí pipeliningu získat efektivnější algoritmus ukážeme si jak
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 (a) proces P 0,0 posílá pivota procesu P 0,1 (b) proces P 0,1 dělí svůj prvek pivotem (c) proces P 0,1 posílá pivota procesu P 0,2 a svůj podělený prvek procesu P 1,1, proces P 1,0 posílá svou hodnotu procesu P 1,1 (d) procesy P 0,2 a P 1,1 provádějí výpočet
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 (e) proces P0,2 přeposílá pivota z iterace k = 0 procesu P 0,3 a svou přepočítanou hodnotu procesu P 1,2 P1,1 posílá hodnotu od P 0,1 dále procesu P 2,1 a hodnotu od procesu P 1,0 přeposílá procesu P 1,2 proces P 2,0 posílá svou hodnotu procesu P 2,1
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 (f) procesy P 0,3, P 1,2 a P 2,1 provádějí výpočet (g) proces P 1,1 zahajuje iteraci pro k = 1 a posílá pivota procesu P 1,2, ostatní procesy přeposílají data pro iteraci k = 0 (h) procesy P 0,4, P 1,3, P 2,2 a P 3,1 provádějí výpočet pro iteraci k = 0, proces P 1,2 provádí výpočet pro iteraci k = 1
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 (i) procesy P 0,4,P 1,3, P 2,2, P 3,1 a P 4,0 provádí komunikaci pro iteraci k = 0, procesy P 1,2 a P 2,1 provádí komunikaci pro iteraci k = 1 komunikace procesu P 0,4 na obrázku chybí (j) procesy P 1,4, P 2,3, P 3,2 a P 4,1 provádí výpočet pro k = 0 a procesy P 1,3 a P 2,2 pro k = 1 (k)...
Gaussova eliminační metoda Zdroj: A. Grama, A. Gupta, G. Karypis, V. Kumar, Introduction to Parallel Computing, Pearson/Addison Wesley, 2003 (m) proces P 2,2 začíná iteraci pro k = 2 (p) proces P 4,4 ukončuje iteraci pro k = 0
GEM - zpětná substituce i v tomto případě je pro lepší efektivitu potřeba použít méně procesů než n 2 a mapovat cyklicky P 0 P 1 P 0 P 1 P 2 P 3 P 2 P 3 P 0 P 1 P 0 P 1 P 2 P 3 P 2 P 3
GEM - zpětná substituce původní matici jsme převedli na horní trojúhelníkovou nyní lze provést zpětnou substituci 1 for ( i n t k = n 1; k >= 0; k ) 2 { 3 x [ k ] = b [ k ] ; 4 for ( i n t j = n 1; j > k ; j ) 5 x [ k ] = x [ k ] A [ k ] [ j ] x [ j ] ; 6 } cyklus na ř. 1 je čistě sekvenční, lze paralelizovat jen cyklus na ř. 4 to lze ale jen pro 2D dělení pro velká k je tu navíc málo práce tj. i paralelismu při paralelizaci GEM je často výhodné provádět eliminaci a zpětnou substituci současně
GEM - zpětná substituce 1 void GEM2( double A [ n ] [ n ], double b [ n ] ) 2 { 3 / 4 Outer loop 5 / 6 for ( i n t k = 0; k < n ; k++ ) 7 { 8 / 9 D i v i s i o n step 10 / 11 for ( i n t j = k + 1; j < n ; j ++ ) 12 A [ k ] [ j ] /= A [ k ] [ k ] ; 13 b [ k ] /= b [ k ] / A [ k ] [ k ] ; 14 A [ k ] [ k ] = 1. 0 ; 15 for ( i n t i = 0; i < n ; i ++ ) 16 { 17 / 18 E l i m i n a t i o n step 19 / 20 i f ( i == k ) 21 continue ; 22 for ( i n t j = k + 1; j < n ; j ++ ) 23 A [ i ] [ j ] = A [ i ] [ k ] A [ k ] [ j ] ; 24 b [ i ] = A [ i ] [ k ] y [ k ] ; 25 A [ i ] [ k ] = 0. 0 ; 26 } 27 } 28 }
GEM - zpětná substituce paralelizací tohot alogritmu zaměstnáme procesy, které byly během eliminace nečinné a výsledkem je přímo řešení soustavy uvedené paralelní algoritmy výrazně využívají faktu, že pracujeme s hustými maticemi pro řídké matice je potřeba použít mnohem složitější algoritmy http://www.pardiso-project.org/ ukážeme si paralelizaci řešiče pro tridiagonální lineární systémy rovnic
Thomasův algoritmus mějme následující soustavu se silně regulární maticí a 1 b 1 x 1 c 2 a 2 b 2 x 2 c 3 a 3 b 3 x 3......... =. c n 1 a n 1 b n 1 c n a n x n 1 x n d 1 d 2 d 3. d n 1 d n
Thomasův algoritmus pomocí GEM ji lze převést na tvar 1 µ 1 1 µ 2 1 µ 3...... 1 µ n 1 1 x 1 x 2 x 3. x n 1 x n = ρ 1 ρ 2 ρ 3. ρ n 1 ρ n a zpětná substituce pak má tvar x n = ρ n x n 1 = ρ n 1 µ n 1 x n. x k = ρ k µ k x k+1. x 1 = ρ 1 µ 1 x 2
Thomasův algoritmus algoritmus lze zapsat takto 1 void Thomas ( double a [ n ], double b [ n ], double c [ n ], 2 double d [ n ], 3 double x [ n ] ) 4 { 5 double mu[ n ], rho [ n ] ; 6 mu[ 0 ] = b [ 0 ] / a [ 0 ] ; 7 rho [ 0 ] = d [ 0 ] / a [ 0 ] ; 8 for ( i n t i = 1; i < n 1; i ++ ) 9 { 10 mu[ i ] = b [ i ] / ( a [ i ] c [ i ] mu[ i 1 ] ) ; 11 rho [ i ] = ( d [ i ] c [ i ] rho [ i 1 ] ) / 12 ( a [ i ] c [ i ] mu[ i 1 ] ) ; 13 } 14 rho [ n 1 ] = ( d [ n 1 ] c [ n 1 ] rho [ n 2 ] ) / 15 ( a [ n 1 ] c [ n 1 ] mu[ n 2 ] ) ; 16 x [ n 1 ] = rho [ n 1 ] ; 17 for ( i = n 2; i > = 0; i ) 18 x [ i ] = rho [ i ] mu[ i ] x [ i + 1 ] ; 19 20 } jde o čistě sekvenční kód pomocí šikovného triku ho ale lze paralelizovat
Cyklická redukce vezměme si řádek i pro 1 < i < n a dva jeho sousedy c i 1 x i 2 + a i 1 x i 1 +b i 1 x i = d i 1, c i x i 1 +a i x i +b i x i+1 = d i, c i+1 x i +a i+1 x i+1 + b i+1 x i+2 = d i+1 z prostřední rovnice eliminujeme proměnné x i 1 a x i+1 první rovnici vynásobíme číslem β i = c i a i 1 a třetí číslem γ i = b i a i+1 a obě odečteme od prostřední dostaneme pro c (1) i x i 2 + a (1) i x i + b (1) i x i+2 = d (1) i, c (1) i = β i c i 1 a (1) i = a i β i b i 1 γ i c i+1 b (1) i = γ i b i+1 d (1) i = d i βd i 1 γd i+1.
Cyklická redukce dodefinováním c 1 = 0 a b n = 0 lze tuto úpravu provést pro každou sudou rovnici původní soustavu tak převedeme na redukovaný tvar a (1) 1 b (1) 1 c (1) 2 a (1) 2 b (1) 2 c (1) 3 a (1) 3 b (1) 3......... c (1) n/2 1 a (1) n/2 1 b (1) n/2 1 c (1) n/2 a (1) n/2 x 2 x 4 x 6. x n 2 x n pokud tuto soustavu vyřešíme, dokážeme pak ze znalosti x i 2, x i a x i+2 dopočítat i x i 1 a x i+1 ze vztahů původní soustavy = d (1) 1 d (1) 2 d 3. (1) d (1) n/2 1 d (1) n/2 c i 1 x i 2 + a i 1 x i 1 +b i 1 x i = d i 1, c i+1 x i +a i+1 x i+1 + b i+1 x i+2 = d i+1 tak tedy získáme i všechna lichá x i všimneme si, že redukovanou soustavu můžeme řešit stejným postupem...
Cyklická redukce Příklad: mějme úlohu o pěti neznámých a 1 b 1 d 1 c 2 a 2 b 2 d 2 c 3 a 3 b 3 d 3 c 4 a 4 b 4 d 4 c 5 a 5 d 5 budeme na sudých řádcích budeme eliminovat koeficienty odpovídající proměnným s lichým indexem, tj. indexy podél diagonály od druhého řádku odečteme c2 /a 1 násobek prvního a b 2 /a 3 násobek třetího od čtvrtého řádku odečteme c 4 /a 3 násobek třetího a b 4 /a 5 násobek pátého
Cyklická redukce dostaneme a 1 b 1 0 0 0 d 1 0 a 2 c 2 a 1 b 1 b 2 a 3 c 3 0 b 2 a 3 b 3 0 d 2 c 2 a 1 d 1 b 2 a 3 d 3 0 c 3 a 3 b 3 0 d 3 0 c 4 a 3 c 3 0 a 4 c 4 a 3 b 3 b 4 a 5 c 5 0 d 4 c 4 a 3 d 3 b 4 a 5 d 5 0 0 0 c 5 a 5 d 5 což přeznačíme na a 0 1 b 0 1 0 0 0 d 0 1 0 b 1 2 0 c 1 2 0 d 1 2 0 c 0 3 a 0 3 b 0 3 0 d 0 3 0 a 1 4 0 b 1 4 0 d 1 4 0 0 0 c 0 5 a 0 5 d 0 5 (1) a sudé rovnice lze extrahovat ( b 1 2 c2 1 d2 1 ) a4 1 b4 1 d4 1
Cyklická redukce to je obecně opět tridiagonální soustava pokud by byla větší, lze na ní celý postup opakovat, až dostaneme soustavu pro jednu nebo dvě neznámé tu lze snadno vyřešit x 2, x 4 soustavu 1 lze upravit na tvar a 0 1 b 0 1 0 0 0 d 0 1 0 1 0 0 0 x 2 0 c 0 3 a 0 3 b 0 3 0 d 0 3 0 0 0 1 0 x 4 0 0 0 c 0 5 a 0 5 d 0 5 ze znalosti x 4 lze dopočítat x 5 ze znalosti x 2 a x 4 lze dopočítat x 3 ze znalosti x 2 lze dopočítat x 1
Cyklická redukce Celý výpočet pak probíhá takto: = a i pro i = 1,..., n 2: c (0) i = c i pro i = 2,..., n a c (0) 1 = 0 3: b (0) i = b i pro i = 1,..., n 1 a b (0) 1: a (0) i 4: for k = 1... log 2 n do 5: s = 2 k 6: for i = 1,..., n/2 k do 7: β i = c(k 1) i a (k 1) i 1, γ i = b(k 1) i a (k 1) i+1 n = 0 8: c (k) i/2 = β ic (k 1) i 1 9: a (k) i/2 = a(k 1) i β i b (k 1) i 1 γ i c (k 1) i+1 10: b (k) i/2 = γ ib (k 1) i+1 11: d (k) i/2 = d (k 1) i β i d (k 1) i 1 γ i d (k 1) i+1 12: end for 13: end for 14: vyřeš výslednou rovnici (nebo dvě) 15: for k = log 2 n... 1 do 16: s = 2 k 17: for i = 1,..., n/2 k do 18: ze znalosti x is dopočítej x is s/2 a x is+s/2 19: end for 20: end for
Cyklická redukce Jednotlivé kroky cycklické redukce pro tridiagonální soustavu s osmi neznámými. e značí indexy řádkům x indexy neznámých.
Cyklická redukce všimneme si, že jednotlivé kroky cyklické redukce lze provádět paralelně počet aktivních procesů se v každém kroku redukuje na polovinu snadno vidíme, že pro p = n TS (n) = θ(n) TP (n, p) = θ(log n) C(n, p) = θ(n log n) S(n, p) = θ( n log n ) E(n, p) = θ( 1 log n ) paralelizace není ideální, lze ji o trochu vylepšit
Cyklická redukce v prvním kroku jsme eliminovali liché řádky soustavy nynuděláme to samé i se sudými řádky dostaneme dvě nezávislé soustavy poloviční velikosti, jednu pro sudé neznámé a druhou pro liché neznámé tak postupujeme dále v dalším kroku získáme čtyři čtvrtinové soustavy atd. po log 2 n krocích získáme n/2 až n nezávislých soustav o jedné nebou dvou neznámých, které lze vyřešit paralelně ušetřím si tak druhou fázi algoritmu o log 2 n krocích doba běhu se sníží na polovinu a stále urdžujume všechny procesy aktivní i tento algoritmus ale zůstává nákladově neoptimální
Cyklická redukce Pruhy na obrázku znázorňují jednotlivé nezávislé soustavy rovnic.
SOR metoda Super-overrelaxation method jde o iterativní metodu pro řešení soustav lineárních rovnic při napočítávání nové iterace x (k+1) z x (k) využívá již napočítané složky vektoru x (k+1) x (k+1) i = (1 ω)x (k) i + ω b i a ii j<i a ij x (k+1) j j>i a ij x (k) j
SOR metoda 1 bool sormethod ( const Matrix& A, 2 const Vector& b, 3 Vector& x, 4 double eps, 5 double omega ) 6 { 7 double normb = norm ( b ) ; 8 double r = eps + 1. 0 ; 9 while ( r > eps ) 10 { 11 / 12 SOR i t e r a c e 13 / 14 15 for ( i n t i = 0; i < n ; i ++ ) 16 { 17 double s = 0. 0 ; 18 for ( int j = 0; j < n ; j ++ ) 19 i f ( j!= i ) 20 s = s + A [ i ] [ j ] x [ j ] ; 21 x [ i ] += omega ( b [ i ] s ) / A [ i ] [ i ] ; 22 } 23 / 24 Vypocet rezidua 25 / 26 r = 0. 0 ; 27 for ( i n t i = 0; i < n ; i ++ ) 28 { 29 double Ax_i = 0. 0 ; 30 for ( int j = 0; j < n ; j ++ ) 31 Ax_i = Ax_i + A [ i ] [ j ] x [ j ] ; 32 r = r + ( Ax_i b_i ) ( Ax_i b_i ) ; 33 } 34 r = s q r t ( r ) / normb ; 35 } 36 }
SOR metoda budeme se zabývat paralelizací této smyčky 1 / 2 SOR i t e r a c e 3 / 4 5 for ( i n t i = 0; i < n ; i ++ ) 6 { 7 double s = 0. 0 ; 8 for ( i n t j = 0; j < n ; j ++ ) 9 i f ( j!= i ) 10 s = s + A [ i ] [ j ] x [ j ] ; 11 x [ i ] += omega ( b [ i ] s ) / A [ i ] [ i ] ; 12 } řádky 8-10 vlastně odpovídají násobení i-tého řádku matice A s vektorem x s vynecháním diagonálního prvku to lze snadno paralelizovat s využitím paralelní redukce pro matici A R n,n lze využít maximálně n procesů pokud bude matice A řídká, může se stát, že naprostá většina procesů nebude mít nic na práci vlastně tak nemáme dost práce pro celkem n procesů
SOR metoda v případě řídkých matic lze provést rozklad na skupiny nezávislých řádků a provést paralelizaci cyklu na řádku 15 vysvětlíme si to na matici aproximující Laplaceův operátor konečnými diferencemi na strukturované síti řešíme tedy úlohu na Ω [0, 1] [0, 1] u = f na Ω, u Ω = g,
SOR metoda volíme pravidelnou čtvercovou sít ω h { x ij = (ih, jh) i = 1, N 1, j = 1, N 1 } na vnitřních uzlech pro 0 < i, j < N aproximujeme operátor pomocí konečných diferencí u ij uh i 1,j 2u h ij + u h i+1,j h 2 + uh i,j 1 2uh ij + u h i,j+1 h 2 tj. pro vnitřní uzly 0 < i, j < N řešíme soustavu rovnic u h i,j 1 + uh i 1,j 4u h ij + u h i+1,j + u h i,j+1 = h2 f ij a pro okrajové u ij = g ij.
SOR metoda Zdroj: http://math.stackexchange.com/questions/329765/ discretization-of-inhomogeneous-dirichlet-boundary-conditions-for-2d-poissons-e
SOR metoda Zdroj: http://www.cs.berkeley.edu/~demmel/cs267/lecture24/lecture24.html
SOR metoda obecně si setrojíme graf k němuž bude daná matice tvořit adjacenční matici provedeme vrcholové obarvení to odpovídá tomu, že každému sloupci matice přiřadíme jednu barvu a to tak, že na žadném se nesmí vyskutnout nenulový prvek stejné barvy jako diagonální prvek SOR iteraci pak rozdělíme na bloky řádků se sejnou barvou na diagonále x (k+1) i = (1 ω)x (k) i + ω b i a ii j<i a ij x (k+1) j j>i a ij x (k) j protoze všechny takové řádky jsou na sobě nezávislé, lze je zpracovat současně