Matrix Algorithms - Corelab

Matrix Algorithms - Corelab Matrix Algorithms - Corelab

corelab.ntua.gr
from corelab.ntua.gr More from this publisher

<strong>Matrix</strong> <strong>Algorithms</strong><br />

Παρουσίαση στα πλαίσια του<br />

μαθήματος «Παράλληλοι<br />

Αλγόριθμοι»<br />

Γ. Καούρη<br />

Β. Μήτσου


Περιεχόμενα παρουσίασης<br />

• Πολλαπλασιασμός πίνακα με διάνυσμα<br />

• Πολλαπλασιασμός πινάκων<br />

• Επίλυση τριγωνικού συστήματος γραμμικών<br />

εξισώσεων (αντιστροφή<br />

πίνακα)<br />

• Επίλυση τριδιαγώνιου συστήματος εξισώσεων<br />

• Επίλυση τυχαίου συστήματος εξισώσεων με<br />

άμεσες μεθόδους<br />

• Επίλυση τυχαίου συστήματος γραμμικών και<br />

διαφορικών εξισώσεων με επαναληπτικές<br />

μεθόδους


Πολλαπλασιασμός πίνακα με<br />

διάνυσμα (1/2)<br />

Πρόβλημα: Α = (α(<br />

ij ) ΝxΝ πίνακας<br />

x = (x(<br />

j ) διάνυσμα Ν διαστάσεων<br />

Να υπολογιστεί το γινόμενο y = Ax,όπου<br />

N<br />

y = (y i ) και y i = ∑ax<br />

ij j , 1 ≤ i ≤ N<br />

j=<br />

1<br />

sequential algorithm: 2N 2 – N steps<br />

parallel algorithm: 2N – 1 steps


Πολλαπλασιασμός πίνακα με<br />

διάνυσμα (2/2)<br />

Υπολογισμός γινομένου πίνακα με διάνυσμα για Ν = 4 με<br />

τη χρήση Ν – διάστατου γραμμικού πίνακα


Πολλαπλασιασμός πινάκων (1/2)<br />

Πρόβλημα: A = (a(<br />

ij ) ΝxΝ πίνακας<br />

B = (b(<br />

ij ) ΝxΝ πίνακας<br />

Να υπολογιστεί το γινόμενο C = AB = (c(<br />

N<br />

ij<br />

με c =<br />

ij ∑aikbkj<br />

, 1 ≤ i, j ≤ N.<br />

k = 1<br />

ij ),<br />

sequential algorithm: O(N 3 )<br />

parallel algorithm: 3N – 2 steps


Πολλαπλασιασμός πινάκων (2/2)<br />

Υπολογισμός γινομένου πινάκων ΑxΒ, όπου Α, Β 4x4<br />

πίνακες. Βρισκόμαστε<br />

στο 5 ο βήμα του αλγόριθμου, όπου το κελί (i, j) j υπολογίζει το a ik b kj , με k =<br />

7 – i – j και 1 ≤ k ≤ 4.


Βελτίωση της απόδοσης των παραπάνω<br />

αλγορίθμων κατά σταθερό παράγοντα


Βελτίωση της απόδοσης των παραπάνω<br />

αλγορίθμων κατά σταθερό παράγοντα


Τριγωνικοί Πίνακες<br />

A<br />

B<br />

⎛1<br />

0 0⎞<br />

⎜ ⎟<br />

= 1 1 0<br />

⎜0 1 0⎟<br />

⎝ ⎠<br />

⎛2 0 4⎞<br />

⎜ ⎟<br />

= 0 1 2<br />

⎜0<br />

0 5⎟<br />

⎝ ⎠<br />

κάτω τριγωνικός πίνακας<br />

άνω τριγωνικός πίνακας<br />

• Ορίζουσα<br />

• Επίλυση συστήματος εξισώσεων<br />

• Υπολογισμός αντίστροφου


Επίλυση τριγωνικού συστήματος<br />

εξισώσεων (1/3)<br />

Έστω Α = (a(<br />

ij ) ΝxN<br />

κάτω τριγωνικός<br />

πίνακας και Ν – διάστατο διάνυσμα<br />

b = (b i ), θέλουμε να βρούμε το x = (x(<br />

j ),<br />

όταν Αx = b.<br />

Πρέπει a ii ≠0,<br />

για 1 ≤ i ≤ N.<br />

sequential algorithm: Πίσω αντικατάσταση


Επίλυση τριγωνικού συστήματος<br />

εξισώσεων (2/3)<br />

parallel algorithm: 2Ν – 1 steps<br />

Ορίζω σύνολο ενδιάμεσων τιμών {t i } ως εξής:<br />

t<br />

=<br />

b<br />

1 1<br />

i−1<br />

t = b −∑a x<br />

i i ij j<br />

j=<br />

1<br />

b<br />

Όμως<br />

συνεπώς:<br />

i<br />

= ∑<br />

a x<br />

i ij j<br />

j=<br />

1<br />

x<br />

i<br />

=<br />

οπότε<br />

t<br />

a<br />

i<br />

ii<br />

t<br />

=<br />

a x<br />

i ii i<br />

και


Επίλυση τριγωνικού συστήματος<br />

εξισώσεων (3/3)<br />

Αρχική τοποθέτηση δεδομένων για την επίλυση 4x4 κάτω τριγωνικού<br />

συστήματος εξισώσεων.<br />

Παρατήρηση: Οι τιμές των t i<br />

αρχικά ορίζονται ίσες με b i<br />

.


Αντιστροφή Τριγωνικών Πινάκων<br />

(1/2)<br />

Για την αντιστροφή πίνακα επιλύουμε το σύστημα<br />

των εξισώσεων AX = I.<br />

Ειδικότερα θεωρώντας τα Ν συστήματα εξισώσεων<br />

Αx j = e j , όπου e j = (0, …,, 0, 1, 0, …,, 0) T και Χ = (x(<br />

1 ,<br />

…, x N ) μπορούμε να τα επιλύσουμε ταυτόχρονα σε ένα<br />

NxN array σε 3Ν – 2 βήματα, οπότε να βρεθεί και η λύση<br />

του AX = I.


Αντιστροφή Τριγωνικού Πίνακα<br />

(2/2)<br />

Αρχική τοποθέτηση των δεδομένων για την αντιστροφή ενός 4x4 κάτω<br />

τριγωνικού πίνακα Α.<br />

t ij =0 αν i ≠ j και 1 αν i = j<br />

Προσοχή: Τα διαφορετικά σχήματα κάνουν διαφορετικές διεργασίες!


Τριδιαγώνιοι Πίνακες<br />

Α = (a(<br />

ij ) τριδιαγώνιος αν a ij = 0 για κάθε i,<br />

j τέτοια ώστε |i - j| > 1<br />

Παράδειγμα:<br />

A<br />

⎛7 −2 0 0 0⎞<br />

⎜<br />

⎟<br />

⎜<br />

5 4 1 0 0<br />

⎟<br />

= ⎜0 −3 −3 −1 0⎟<br />

⎜<br />

⎟<br />

0 0 2 6 4<br />

⎜0 0 0 0 1⎟<br />

⎝<br />


Επίλυση τριδιαγώνιου συστήματος εξισώσεων με<br />

τη μέθοδο odd – even reduction (1/4)<br />

Γενική ιδέα:<br />

Αντικαθιστούμε κάθε odd – index x i με μια γραμμική<br />

συνάρτηση των x i - 1 , x i + 1 . Το σύστημα που απομένει<br />

είναι τριδιαγώνιο, οπότε συνεχίζοντας αναδρομικά<br />

καταλήγουμε στην εύρεση του x N (όταν<br />

το Ν είναι<br />

δύναμη του 2) και με αντικατάσταση προκύπτει όλο το<br />

x.


Επίλυση τριδιαγώνιου συστήματος εξισώσεων με<br />

τη μέθοδο odd – even reduction (2/4)<br />

Μαθηματική διατύπωση:<br />

Έστω τριδιαγώνιο σύστημα εξισώσεων Ax = b, όπου<br />

A<br />

⎛<br />

⎜<br />

⎜<br />

⎜<br />

d1 u1<br />

l d u<br />

l<br />

...<br />

... 0<br />

d ...<br />

... ... ...<br />

0 ...<br />

...<br />

2 2 2<br />

3 3<br />

= ⎜ ⎟<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

l d u<br />

l N d<br />

N−1 N−1 N−1<br />

κάνουμε πρώτα την αντικατάσταση για κάθε odd – index<br />

x i (θεωρούμε<br />

οτι x 0 =0):<br />

1<br />

= − −<br />

x ( b l x ux )<br />

i<br />

d<br />

i i i− 1 i i+<br />

1<br />

i<br />

N<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />


Επίλυση τριδιαγώνιου συστήματος εξισώσεων με<br />

τη μέθοδο odd – even reduction (3/4)<br />

Θεωρώντας οτι d i ≠ 0 για κάθε περιττό i, προκύπτει ένα<br />

νέο σύστημα εξισώσεων με μόνο even – index x i .<br />

Ειδικότερα:<br />

(1) (1) (1) (1)<br />

για 1 ≤ i ≤ N/2:<br />

όπου: (1)<br />

l =−<br />

2i<br />

2i<br />

2i−1<br />

2i−1<br />

l x + d x + u x = b<br />

d<br />

u<br />

b<br />

2i 2i− 1 2i 2i 2i 2i+<br />

2 2i<br />

ll<br />

,<br />

d<br />

u l u l<br />

d<br />

d d<br />

uu<br />

,<br />

d<br />

lb ub<br />

b<br />

d d<br />

(1) 2i− 1 2i =− + −<br />

2i<br />

2i<br />

2i 2i+<br />

1<br />

2i− 1 2i+<br />

1<br />

(1)<br />

=−<br />

2i<br />

2i<br />

2i+<br />

1<br />

2i+<br />

1<br />

(1)<br />

= −<br />

2i<br />

2i<br />

2i 2i− 1<br />

−<br />

2i 2i+<br />

1<br />

2i− 1 2i+<br />

1<br />

,<br />

,


Επίλυση τριδιαγώνιου συστήματος εξισώσεων με<br />

τη μέθοδο odd – even reduction (4/4)(<br />

Μετά από logN επαναλήψεις απομένει 1<br />

εξίσωση με έναν άγνωστο, οπότε λύνουμε<br />

ως προς αυτόν, στη συνέχεια<br />

υπολογίζουμε το x N/2 , μετά το x N/4 και το<br />

x 3N/4 κ.ο.κ. μέχρι να υπολογιστούν όλα τα<br />

x i .


Παρατηρήσεις<br />

• Δε δουλεύει όταν κάποιο διαγώνιο στοιχείο είναι<br />

ή προκύψει 0.<br />

• Είναι πολύ χρήσιμη για μεγάλες κλάσεις πινάκων,<br />

όπως οι συμμετρικοί θετικά ορισμένοι πίνακες και<br />

οι πίνακες με αυστηρή διαγώνια υπεροχή.<br />

Ιδιαίτερα για αυτές τις κλάσεις ο αλγόριθμος<br />

είναι αριθμητικά ευσταθής.


Multigrids


Parallel Prefix <strong>Algorithms</strong> (1/2)<br />

α) Μετατρέπουμε την i-οστή<br />

εξίσωση του συστήματος<br />

σαν γινόμενο πίνακα – διανύσματος<br />

+ + =<br />

− 1 + 1<br />

⎛ d i l i b ⎞<br />

i<br />

⎜ − − − ⎟<br />

⎛x<br />

⎞<br />

i+<br />

1 ⎜ u i u i u i ⎟⎛ x ⎞<br />

i<br />

⎜ ⎟ ⎜<br />

x 1 0 0 ⎟⎜ ⎟<br />

⎜ i ⎟ =<br />

⎜x<br />

i−1<br />

⎟<br />

β) Με επαναλαμβανόμενες αντικαταστάσεις προκύπτει<br />

όπου<br />

H<br />

⎜<br />

⎟<br />

⎜ 1 ⎟ ⎜ 0 0 1 ⎟⎜ 1 ⎟<br />

⎝ ⎠ ⎝ ⎠<br />

⎜<br />

⎟<br />

⎝<br />

⎠<br />

x<br />

i i i−1 1<br />

x<br />

⎛ ⎞ ⎛ ⎞<br />

i+<br />

1 1<br />

⎜ ⎟ ⎜ ⎟<br />

⎜ x 0<br />

i ⎟=<br />

H i ⎜ ⎟<br />

⎜ 1 ⎟ ⎜ 1 ⎟<br />

⎝ ⎠ ⎝ ⎠<br />

(1)<br />

lx dx ux b<br />

i i i i i i i<br />

d l b<br />

⎛<br />

⎞<br />

i i i<br />

⎜− − − ⎟<br />

⎜ ui ui ui⎟<br />

= GG ... G<br />

και<br />

1 0 0<br />

G = ⎜<br />

⎟<br />

i ⎜ ⎟<br />

⎜ 0 0 1 ⎟<br />

⎜<br />

⎟<br />

⎝<br />


Parallel Prefix <strong>Algorithms</strong> (2/2)<br />

γ) Λύνουμε το 3Χ3 σύστημα εξισώσεων<br />

x<br />

⎛ ⎞ ⎛ ⎞<br />

N<br />

1<br />

⎜ ⎟ ⎜ ⎟<br />

⎜x<br />

0 ,<br />

N −1⎟=<br />

H N −1⎜ ⎟<br />

⎜ 1 ⎟ ⎜ 1 ⎟<br />

⎝ ⎠ ⎝ ⎠<br />

lx +<br />

N N 1 dx =<br />

− N N bN<br />

δ)Διαδοχικά<br />

αντικαθιστούμε στην (1) για την<br />

εύρεση των υπολοίπων x i .<br />

x


Παρατηρήσεις<br />

• Ο συνολικός χρόνος που απαιτείται είναι<br />

O(logN) βήματα σε ένα Ν-leaf<br />

πλήρες<br />

δυαδικό δέντρο.<br />

• Ο αλγόριθμος δουλεύει καλά για κάθε<br />

τριδιαγώνιο πίνακα.<br />

• Είναι αριθμητικά ασταθής όταν το<br />

u i


LU- Παραγοντοποίηση(1/2)<br />

A<br />

⎛<br />

⎜<br />

⎜<br />

⎜<br />

⎜<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

d 1 u1<br />

l2 d 2 u2<br />

l d u<br />

...<br />

... 0<br />

...<br />

3 3 3<br />

= =<br />

... ... ...<br />

0 ...<br />

...<br />

l d u<br />

l N d<br />

q<br />

N−1 N−1 N−1<br />

⎛ 1<br />

⎞⎛<br />

...<br />

⎞<br />

1 1<br />

⎜ ⎟ ⎜ ⎟<br />

⎜p 1 0 ⎟ ⎜<br />

2 q ... 0<br />

2 u<br />

⎟<br />

2<br />

⎜ ⎟ ⎜ ⎟<br />

⎜ p 1 ⎟ ⎜<br />

3 q ...<br />

3 u<br />

⎟<br />

3<br />

= ⎜ ⎟ ⎜ ⎟<br />

⎜ ... ⎟ ⎜ ... ... ... ⎟<br />

⎜ ⎜ ⎟<br />

⎜ ⎟<br />

0 p 1<br />

N −1 ⎜ 0 ... q<br />

N −1<br />

u N −1<br />

⎟<br />

⎟ ⎟<br />

p<br />

⎜ ⎟<br />

⎜ 1<br />

⎝<br />

⎟⎜<br />

N ⎠ ... q ⎟<br />

⎝ N ⎠<br />

N<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

u<br />

όπου τα q i είναι μη-μηδενικά<br />

μηδενικά


LU-Παραγοντοποίηση<br />

Παραγοντοποίηση(2/2)<br />

Για να λύσω το σύστημα Ax=y λύνω τα<br />

συστήματα Ly=b και Ux=y<br />

(όπου<br />

A = LU)<br />

Και το δύο λύνονται σε χρόνο O(logN)<br />

χρησιμοποιώντας πρός τα πίσω και πρός<br />

τα μπρός αντικαταστάσεις αντίστοιχα.


Παρατηρήσεις<br />

Η μέθοδος μπορεί να εφαρμοστεί μόνο σε<br />

ορισμένες κλάσεις πινάκων (σ’ αυτές που<br />

μπορούσε να εφαρμοστεί και η odd-even<br />

reduction).<br />

Ο υπολογισμός πινάκων L, U τέτοιων ώστε<br />

A = LU είναι μια διαδικασία που μπορεί<br />

επίσης να λυθεί με έναν parallel-prefix<br />

prefix<br />

αλγόριθμο.


Gaussian Elimination(1/<br />

(1/5)<br />

Χρησιμοποιείται στην επίλυση γενικού<br />

γραμμικού συστήματος εξισώσεων<br />

Ax = B.<br />

Γενική ιδέα:<br />

Προσπαθούμε να φέρουμε τον<br />

επαυξημένο πίνακα [A|b] στη μορφή<br />

[Ι|b’] εφαρμόζοντας γραμμοπράξεις.


Gaussian Elimination(2/5)<br />

Μέθοδος:<br />

• Για την πρώτη σειρά<br />

1. Βρίσκουμε την ψηλότερη γραμμή στην οποία το<br />

αριστερότερο στοιχείο είναι ≠0 και την τοποθετούμε<br />

πρώτη.<br />

2. Πολλαπλασιάζουμε την πρώτη γραμμή με τον<br />

αντίστροφο του στοιχείου a 1,1 έτσι ώστε το a 1,1 να<br />

γίνει ίσο με 1.<br />

3. Αφαιρούμε τα κατάλληλα πολλαπλάσια της πρώτης<br />

γραμμής από τις υπόλοιπες γραμμές ώστε σε κάθε<br />

γραμμή i, το στοιχείο a i,1 να προκύψει 0.


Gaussian Elimination(3/5)<br />

• Για τη δεύτερη σειρά<br />

Επαναλαμβάνουμε κατάλληλα τα βήματα 1<br />

έως 3. Έπειτα αφαιρούμε το κατάλληλο<br />

πολλαπλάσιο της δεύτερης γραμμής από<br />

την πρώτη έτσι ώστε το στοιχείο a 1,2 =0.<br />

• Για τις υπόλοιπες σειρές<br />

Επαναλαμβάνουμε τα τρία βήματα που<br />

περιγράφηκαν για τη δεύτερη σειρά μέχρι να<br />

σχηματιστεί ο μοναδιαίος πίνακας στις<br />

πρώτες Ν στήλες.<br />

Τελικά η λύση του συστήματος είναι η τελευταία<br />

στήλη.


Gaussian Elimination(4/5)<br />

Η διαδικασία που<br />

περιγράφεται<br />

παραπάνω<br />

μοντελοποιείται από<br />

mesh of arrays και<br />

ολοκληρώνεται σε<br />

4N – 1 βήματα:


Gaussian Elimination(5/5)<br />

Η ίδια διαδικασία<br />

μπορεί να<br />

μοντελοποιηθεί για<br />

να βρεθεί ο<br />

αντίστροφος ενός<br />

πίνακα Α, αν στη<br />

θέση του<br />

διανύσματος b<br />

τοποθετήσουμε το<br />

μοναδιαίο πίνακα Ι.<br />

Η διαδικασία<br />

ολοκληρώνεται σε<br />

5Ν – 2 βήματα.


Επαναληπτικές μέθοδοι<br />

• Jacobi Relaxation<br />

• Gauss – Seidel Relaxation<br />

Όταν το σύστημα που έχουμε να λύσουμε<br />

συγκλίνει (M t -> ∞, , M t = D -1 (D - A)),<br />

),<br />

μπορούμε να χρησιμοποιήσουμε<br />

επαναληπτικές μεθόδους.


Jacobi Relaxation (1/2)<br />

Ax = b σύστημα εξισώσεων<br />

Α αντιστρέψιμος (μοναδική<br />

λύση)<br />

aii ≠ 0<br />

Η i – οστή γραμμή γράφεται ως:<br />

1 ⎛<br />

x + = − ⎜<br />

∑ x<br />

i<br />

( t 1) aij<br />

( t)<br />

j<br />

Οπότε ένας τρόπος να γραφτεί η λύση είναι:<br />

a<br />

ii<br />

⎝<br />

j≠i<br />

−<br />

b<br />

i<br />

⎞<br />

⎟<br />

⎠<br />

x<br />

i<br />

1 ⎛<br />

= − ⎜<br />

∑ a<br />

ii ⎝ j≠i<br />

a<br />

ij<br />

x<br />

j<br />

− b<br />

i<br />

⎞<br />

⎟<br />


Jacobi Relaxation (2/2)<br />

Ο ζητούμενος υπολογισμός μπορεί να εκφραστεί<br />

σαν γινόμενο πίνακα – διάνυσμα ως εξής:<br />

⎛ x<br />

⎜<br />

⎜ x<br />

⎜<br />

⎜<br />

⎜ x<br />

⎜<br />

⎝<br />

1<br />

2<br />

N<br />

⎛<br />

⎜ 0<br />

( t + 1) ⎞<br />

⎟<br />

⎜<br />

( t + 1) ⎜ a<br />

⎟<br />

⎜ −<br />

... ⎟ =<br />

a<br />

⎜<br />

⎟<br />

( t + 1)<br />

⎜<br />

⎟<br />

⎟<br />

⎜ a<br />

1 ⎜<br />

−<br />

⎠ a<br />

⎜<br />

⎝ 0<br />

21<br />

22<br />

N1<br />

NN<br />

−<br />

−<br />

a<br />

a<br />

0<br />

a<br />

a<br />

0<br />

12<br />

11<br />

N 2<br />

NN<br />

⎞<br />

⎟<br />

⎟⎛<br />

x1(<br />

t)<br />

⎞<br />

⎟<br />

⎜ ⎟<br />

⎜ x2(<br />

t)<br />

⎟<br />

⎟<br />

⎟<br />

⎜ ... ⎟<br />

⎟<br />

⎜ ⎟<br />

⎟<br />

⎜ xN<br />

( t)<br />

⎟<br />

⎟<br />

⎜ ⎟<br />

⎝ 1 ⎠<br />

⎟<br />

⎠<br />

Οπότε μπορεί να πραγματοποιηθεί από N – cell<br />

linear array σε Ο(Ν) βήματα.<br />

...<br />

...<br />

...<br />

...<br />

...<br />

a<br />

−<br />

a<br />

a<br />

−<br />

a<br />

0<br />

0<br />

1N<br />

11<br />

2N<br />

22<br />

b<br />

a<br />

b<br />

a<br />

1<br />

11<br />

2<br />

22<br />

bN<br />

a<br />

1<br />

NN


Gauss – Seidel Relaxation (1/2)<br />

Πλέον ο τύπος ανανέωσης του x i (t+1) είναι:<br />

⎛ 1 ⎞⎛<br />

⎞<br />

x + = − ⎜<br />

⎟<br />

⎜<br />

⎟<br />

∑ + + ∑<br />

i<br />

( t 1)<br />

aij<br />

x<br />

j<br />

( t 1) aij<br />

x<br />

j<br />

( t)<br />

⎝ aii<br />

⎠⎝<br />

j< i<br />

j><br />

i ⎠<br />

Η μέθοδος αυτή συγκλίνει πιο γρήγορα από την Jacobi,<br />

αλλά το βασικό της μειονέκτημα είναι οτι είναι πιο<br />

σειριακή.<br />

Οπότε, κάθε επανάληψη της μεθόδου χρειάζεται ένα N –<br />

cell linear array.


Gauss – Seidel Relaxation (1/2)<br />

a i,i-1<br />

…<br />

a i,1<br />

0<br />

…<br />

0<br />

a i,i<br />

…<br />

a i,N<br />

0<br />

…<br />

ιnput 0 output<br />

x i-1<br />

(t+1)…x 1<br />

(t+1) x 1<br />

(t)…x N<br />

(t) 0…0<br />

x i<br />

(t+1)…x 1<br />

(t+1) x 1<br />

(t)…x N<br />

(t)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!