Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

Σχετικά έγγραφα
Παράλληλη Επεξεργασία Κεφάλαιο 1 Γιατί Παράλληλος Προγραμματισμός;

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονική Υπολογιστών

Δομή Ηλεκτρονικού υπολογιστή

EM 361: Παράλληλοι Υπολογισμοί

Μετρικές & Επιδόσεις. Κεφάλαιο V

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45

Το υλικό του υπολογιστή

Αρχιτεκτονική Υπολογιστών

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

Συστήματα σε Ολοκληρωμένα Κυκλώματα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Αρχιτεκτονική Υπολογιστών

ΚΕΦΑΛΑΙΟ 2: Χειρισµός εδοµένων

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Κατανεμημένα Συστήματα

Μάθημα 4: Κεντρική Μονάδα Επεξεργασίας

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

ΑΕΠΠ Ερωτήσεις θεωρίας

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

Για τις λύσεις των προβλημάτων υπάρχει τρόπος εκτίμησης της επίδοσης (performance) και της αποδοτικότητας (efficiency). Ερωτήματα για την επίδοση

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Κεφάλαιο 3. Διδακτικοί Στόχοι

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

Μάθημα 8: Διαχείριση Μνήμης

Ψευδοκώδικας. November 7, 2011

Παράλληλος προγραμματισμός: παράλληλες λ υπολογιστικές πλατφόρμες και ανάλυση προγραμμάτων

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

i Throughput: Ο ρυθμός ολοκλήρωσης έργου σε συγκεκριμένο χρόνο

Πληροφορική Ι. Μάθημα 6 ο Εκτέλεση πράξεων, Αρχιτεκτονική Η/Υ. Τμήμα Χρηματοοικονομικής & Ελεγκτικής ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

Μετρικές και Επιδόσεις 6

Προγραμματισμός Ι (HY120)

Μάριος Αγγελίδης

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

Δομές Δεδομένων & Αλγόριθμοι

Περιεχόμενα. Δομές δεδομένων. Τεχνικές σχεδίασης αλγορίθμων. Εισαγωγή στον προγραμματισμό. Υποπρογράμματα. Επαναληπτικά κριτήρια αξιολόγησης

5.1. Προσδοκώμενα αποτελέσματα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

ΠΕΡΙΕΧΟΜΕΝΑ. Μονοδιάστατοι πίνακες Πότε πρέπει να χρησιμοποιούνται πίνακες Πολυδιάστατοι πίνακες Τυπικές επεξεργασίες πινάκων

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

Αρχιτεκτονική Μνήμης

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

5 ΕΙΣΑΓΩΓΗ ΣΤΗ ΘΕΩΡΙΑ ΑΛΓΟΡΙΘΜΩΝ

Ενδεικτικές Ερωτήσεις Θεωρίας

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

Αρχιτεκτονική Μνήµης

ΠΛΗ10 Κεφάλαιο 2. ΠΛΗ10 Εισαγωγή στην Πληροφορική: Τόμος Α Κεφάλαιο: 2 2.1: Bασική Δομή του Υπολογιστή

Η ΤΑΞΙΝΟΜΗΣΗ ΤΟΥ FLYNN!!! 1 ο ΕΠΑΛ ΡΟΔΟΥ ΤΟΜΕΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ!!!! Χατζηνικόλας Κώστας

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής

Ερώτηση 1 η μεταγωγής κυκλώματος? : Ποια είναι τα κύρια χαρακτηριστικά της. Ερώτηση 2 η : Ποια είναι τα κύρια χαρακτηριστικά της μεταγωγής μηνύματος?

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Κεφάλαιο 4: Λογισμικό Συστήματος

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Πολυπύρηνοι επεξεργαστές Multicore processors

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Προγραμματισμός Υπολογιστών

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

ΚΕΦΑΛΑΙΟ 1.7. Πρωτόκολλα και Αρχιτεκτονική Δικτύου

Λιβανός Γιώργος Εξάμηνο 2017Β

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Πρόβλημα 37 / σελίδα 207

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

ΣΥΓΚΡΙΤΙΚΗ ΜΕΛΕΤΗ ΤΕΧΝΟΛΟΓΙΩΝ ΔΙΑΔΙΚΤΥΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΑΞΙΟΛΟΓΗΣΗ ΤΗΣ ΤΕΧΝΟΛΟΓΙΑΣ REST ΠΛΑΣΤΑΡΑΣ ΕΥΡΙΠΙΔΗΣ

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Λειτουργικά Συστήματα (Λ/Σ)

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

Κεφάλαιο 1ο Πολυπρογραμματισμός Πολυδιεργασία Κατηγορίες Λειτουργικών Συστημάτων

Παράλληλος προγραμματισμός περιστροφικών αλγορίθμων εξωτερικών σημείων τύπου simplex ΠΛΟΣΚΑΣ ΝΙΚΟΛΑΟΣ

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α ΤΑΞΗ

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ: ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών Κωνσταντινίδη Νικόλαου του Γεωργίου Αριθμός Μητρώου: 6295 Θέμα «ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ GRID» Επιβλέπων Καθηγητής Ευθύμιος Χούσος Αριθμός Διπλωματικής Εργασίας: Πάτρα, Οκτώβριος 213

ΠΙΣΤΟΠΟΙΗΣΗ Πιστοποιείται ότι η Διπλωματική Εργασία με θέμα «ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ GRID» Του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Κωνσταντινίδης Νικόλαος του Γεωργίου Αριθμός Μητρώου: 6295 Παρουσιάστηκε δημόσια και εξετάστηκε στο Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών στις.../../ Ο Επιβλέπων Ο Διευθυντής του Τομέα Καθηγητής Ευθύμιος Χούσος Καθηγητής Ευθύμιος Χούσος

Αριθμός Διπλωματικής Εργασίας: Θέμα: «ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ GRID» Φοιτητής:Κωνσταντινίδης Νικόλαος Επιβλέπων: Καθηγητής Χούσος Ευθύμιος

Περίληψη Η ανάγκη για την επίλυση μεγάλων προβλημάτων και η εξέλιξη της τεχνολογίας του διαδικτύου, είχε ως αποτέλεσμα την διαρκή ανάγκη για την εύρεση όλο και περισσότερων πόρων. Η ανάγκη αυτή οδήγησε στην δημιουργία δομών συνεργαζόμενων υπολογιστικών συστημάτων, με απώτερο σκοπό την επίλυση προβλημάτων που απαιτούν μεγάλη υπολογιστική ισχύ ή την αποθήκευση μεγάλου όγκου δεδομένων. Η ύπαρξη τέτοιων δομών αλλά και κεντρικών μονάδων επεξεργασίας με περισσότερους από έναν επεξεργαστές, δημιούργησε πρωτόκολλα για την δημιουργία εφαρμογών που θα εκτελούνται και θα επιλύουν ένα πρόβλημα σε περισσότερους από έναν επεξεργαστές, ώστε να επιτευχθεί η μείωση του χρόνου εκτέλεσης. Ένα παράδειγμα τέτοιου πρωτοκόλλου είναι αυτό της ανταλλαγής μηνυμάτων (MPI). Σκοπός της παρούσας διπλωματικής εργασίας είναι η τροποποίηση μιας υπάρχουσας εφαρμογή, που απαιτεί σημαντική υπολογιστική ισχύ, με σκοπό την εκμετάλλευση συστημάτων όπως αυτά που περιγράφηκαν προηγούμενα. Μέσα από αυτή την διαδικασία θα γίνει ανάλυση των πλεονεκτημάτων και των μειονεκτημάτων του παράλληλου προγραμματισμού. Abstract The need to solve large problems and the development of internet technology, has resulted in the need to find more and more resources. This need led to the creation of structures collaborating systems, with a view to solving problems that require large computing power or storage of large amounts of data. The existence of such structures and central processing units with more than one processor, created protocols for the develop applications that will run and will solve a problem in more than one processor in order to achieve the reduction in execution time. An example of such a protocol is that of messaging (MPI). The purpose of this diploma thesis is to modify an existing application that requires significant computing power to exploit systems such as those described above. Through this process will analyze the advantages and disadvantages of parallel programming.

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 1 : ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ...1 ΣΚΟΠΟΣ... 1 ΤΙ ΕΙΝΑΙ Ο ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ...3 ΤΟ ΣΕΙΡΙΑΚΟ ΜΟΝΤΕΛΟ ΜΟΝΤΕΛΟ Von Neumann...4 ΚΑΤΗΓΟΡΙΕΣ ΥΠΟΛΟΓΙΣΤΩΝ ΜΕ ΠΟΛΛΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ...6 ΑΡΧΙΤΕΚΤΟΝΙΚΕΣ ΜΝΗΜΗΣ ΠΑΡΑΛΛΗΛΩΝ ΥΠΟΛΟΓΙΣΤΩΝ...1 ΠΑΡΑΛΛΗΛΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΜΟΝΤΕΛΑ...12 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΠΑΡΑΛΛΗΛΩΝ ΕΠΕΞΕΡΓΑΣΤΩΝ...13 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΑΡΑΛΛΗΛΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ...14 ΠΛΕΓΜΑ ΥΠΟΛΟΓΙΣΤΩΝ... 17 ΚΕΦΑΛΑΙΟ 2 : ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ...23 ΣΚΟΠΟΣ... 23 ΑΝΑΛΥΣΗ ΣΕΙΡΙΑΚΩΝ ΑΛΓΟΡΙΘΜΩΝ...25 ΣΥΓΚΡΙΣΗ ΣΕΙΡΙΑΚΟΥ ΚΑΙ ΠΑΡΑΛΛΗΛΟΥ ΑΛΓΟΡΙΘΜΟΥ...26 ΑΠΟΔΟΤΙΚΟΤΗΤΑ ΚΑΙ ΚΟΣΤΟΣ... 27 ΝΟΜΟΣ ΤΟΥ AMDAHL... 28 Ο ΝΟΜΟΣ ΤΟΥ GUSTAFSON... 31 ΚΕΦΑΛΑΙΟ 3 : ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY...33 ΣΚΟΠΟΣ... 33 ΕΦΑΡΜΟΓΗ ΡΕΥΣΤΟΜΗΧΑΝΙΚΗΣ... 35 ΘΕΩΡΙΑ ΓΡΑΦΗΜΑΤΩΝ... 37 ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY (CHOLESKY FACTORIZATION)...38 ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY ΣΕ ΠΟΛΛΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ...49 ΚΕΦΑΛΑΙΟ 4 : ΥΛΟΠΟΙΗΣΗ... 59 ΣΚΟΠΟΣ... 59 ΕΙΣΑΓΩΓΗ... 61 ΠΡΩΤΗ ΥΛΟΠΟΙΗΣΗ... 62 ΔΕΥΤΕΡΗ ΥΛΟΠΟΙΗΣΗ... 81 ΚΕΦΑΛΑΙΟ 5 : ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ...83 ΣΚΟΠΟΣ... 83 ΕΙΣΑΓΩΓΗ... 85 ΣΕΙΡΙΑΚΗ ΕΦΑΡΜΟΓΗ... 85 ΠΑΡΑΛΛΗΛΗ ΕΦΑΡΜΟΓΗ... 87

ΣΥΓΚΡΙΣΗ ΕΚΔΟΣΕΩΝ ΣΕΙΡΙΑΚΗΣ ΚΑΙ ΠΑΡΑΛΛΗΛΗΣ ΥΛΟΠΟΙΗΣΗΣ...9 ΣΥΓΚΡΙΣΗ ΕΦΑΡΜΟΓΗΣ ΡΕΥΣΤΟΜΗΧΑΝΙΚΗΣ ΓΙΑ ΠΑΡΑΛΛΗΛΗ ΚΑΙ ΣΕΙΡΙΑΚΗ ΕΚΤΕΛΕΣΗ... 91 ΣΥΜΠΕΡΑΣΜΑΤΑ... 92 ΠΑΡΑΡΤΗΜΑ Α... 95 ΠΑΡΑΡΤΗΜΑ Β... 15 ΠΑΡΑΡΤΗΜΑ Γ... 17 ΠΑΡΑΡΤΗΜΑ Δ... 19 ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ... 144

ΕΥΧΑΡΙΣΤΙΕΣ Η παρούσα Διπλωματική Εργασία πραγματοποιήθηκε στο Εργαστήριο Συστημάτων Υπολογιστών του τομέα Ηλεκτρονικής και Υπολογιστών του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Πάτρας, υπό την επίβλεψη του καθηγητή Χούσου Ευθύμιου, τον οποίο οφείλω να ευχαριστήσω θερμά, για την ανάθεση του θέματος και την συμβολή του κατά την διάρκεια της πραγματοποίησής της. Επίσης θα ήθελα να ευχαριστήσω τον υποψήφιο Διδάκτορα Κολώνια Βασίλειο, για την βοήθειά του και τις συμβουλές του στην υλοποίηση της εργασίας. Τέλος, ευχαριστώ θερμά την οικογένεια μου και τους φίλους μου, για την ακατάπαυστη συμπαράσταση και ηθική υποστήριξη τους, όλα αυτά τα χρόνια.

ΚΕΦΑΛΑΙΟ 1 : ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ ΣΚΟΠΟΣ Σε αυτό το κεφάλαιο θα γίνει μια εισαγωγή στην έννοια του παράλληλου προγραμματισμού, τι είναι και για ποιον λόγο τον χρησιμοποιούμε. Θα παρουσιαστούν οι αρχιτεκτονικές των παράλληλων συστημάτων, τα μοντέλα προγραμματισμού για μηχανήματα με παράλληλη αρχιτεκτονική καθώς επίσης και τον τρόπο με τον οποίο σχεδιάζουμε ένα πρόγραμμα για αυτά τα συστήματα.

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ ΤΙ ΕΙΝΑΙ Ο ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Στον σειριακό προγραμματισμό γράφουμε ένα πρόγραμμα προκειμένου να εκτελεστεί σε σειριακούς υπολογιστές. Με τον όρο αυτό εννοούμε οτι η εκτέλεση θα γίνει σε έναν επεξεργαστή, ο οποίος θα εκτελέσει την μια εντολή μετά την άλλη και θα εκτελείται μόνο μια εντολή την φόρα μέχρι να φτάσουμε στο τέλος του προγράμματος. Αντιθέτως, στον παράλληλο προγραμματισμό δεν συμβαίνει αυτό. Τα συστήματα που χρησιμοποιούμε σε αυτή την περίπτωση διαθέτουν περισσότερους επεξεργαστές, και ορισμένα τμήματα του προγράμματος εκτελούνται ταυτόχρονα, εφόσον βέβαια κάτι τέτοιο είναι εφικτό. Γι αυτό, το πρόγραμμα αρχικά χωρίζεται σε τμήματα τα οποία μπορούν να εκτελεστούν ταυτόχρονα και ο κάθε επεξεργαστής αναλαμβάνει την εκτέλεση ενός τμήματος από αυτά με τον κλασσικό σειριακό τρόπο. Είναι λοιπόν φανερό οτι κάτι τέτοιο δίνει την δυνατότητα να εκτελεστεί ένα πρόγραμμα σε λιγότερο χρόνο αφού κάποια κομμάτια του μπορούν να εκτελεστούν ταυτόχρονα. Στην εικόνα 1.1 φαίνεται ο τρόπο εκτέλεσης ενός προγράμματος σε σειριακές και παράλληλες αρχιτεκτονικές. Εικόνα 1.1 Σειριακή και παράλληλη εκτέλεση προγραμμάτων [1] Επομένως, ως ορισμό, θα μπορούσαμε να πούμε οτι ο παράλληλος προγραμματισμός είναι ο προγραμματισμός σε μία γλώσσα που επιτρέπει διαφορετικά τμήματα της υπολογιστικής διαδικασίας να εκτελούνται ταυτόχρονα σε διαφορετικούς υπολογιστές. Γιατί όμως παράλληλος προγραμματισμός; Μια απάντηση στο ερώτημα αυτό δίνεται στο [7]. Ένας λόγος λοιπόν, για τον οποίο ο παράλληλος προγραμματισμός είναι [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm 3

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ σημαντικός, αναφέρθηκε ήδη και αφορά την ταχύτητα εκτέλεσης ενός προγράμματος. Επίσης θα πρέπει να σημειωθεί οτι οι ταχύτητες των επεξεργαστών δεν αυξάνονται με τον ίδιο ρυθμό που αυξάνονταν τα προηγούμενα χρόνια και γι αυτό, προκειμένου να πετύχουμε γρηγορότερες ταχύτητες, δεν στοχεύουμε στην αύξηση της ταχύτητας του επεξεργαστή αλλά στην δημιουργία αρχιτεκτονικών με περισσότερους επεξεργαστές, Τελικώς, με τον τρόπο αυτό, πετυχαίνουμε γρηγορότερες ταχύτητες αν χρησιμοποιούμε τους επεξεργαστές αυτούς ταυτόχρονα. Με τον τρόπο αυτό λοιπόν μπορούμε να κάνουμε χρήση επεξεργαστών ή μηχανημάτων που έχουμε ήδη και να δημιουργήσουμε παράλληλα συστήματα τα οποία να είναι αρκετά γρήγορα κερδίζοντας σε κόστος αφού δεν θα είναι αναγκαία η αγορά νέου, γρηγορότερου, επεξεργαστή. Αυτό είναι και το πλέγμα υπολογιστών (grid computing)[1], ένας σύνδεσμος υπολογιστικών πόρων από διάφορες τοποθεσίες στην γη, με σκοπό την επίτευξη ενός κοινού στόχου και μπορεί να θεωρηθεί ως κατανεμημένο σύστημα. Επίσης υπάρχουν αρκετά μεγάλα προβλήματα, τα οποία χρειάζονται πολλούς πόρους, ειδικά σε μνήμη και είναι αδύνατον να λυθούν σε έναν υπολογιστή και γι αυτό γίνεται αναγκαία η χρήση περισσοτέρων. Οι υπολογιστές που θα χρησιμοποιηθούν δεν είναι απαραίτητο να βρίσκονται στον ίδιο χώρο αλλά οπουδήποτε αλλού. Επομένως αν τοπικά διαθέτουμε ένα υπολογιστικό σύστημα με περιορισμένες δυνατότητες, μπορούμε να χρησιμοποιήσουμε άλλους που βρίσκονται κάπου αλλού και μας παρέχουν περισσότερους υπολογιστικούς πόρους. ΤΟ ΣΕΙΡΙΑΚΟ ΜΟΝΤΕΛΟ ΜΟΝΤΕΛΟ Von Neumann Τα παράλληλα συστήματα και προγράμματα έχουν στηριχθεί και αναπτυχθεί πάνω σε σειριακά μοντέλα. Γι αυτό πριν κάνουμε αναφορά σε αυτά τα συστήματα θα δούμε πως δομείται ένα σειριακό σύστημα. Οι υπολογιστές βασίζονται παραδοσιακά σε ένα μοντέλο προγραμματισμού αρχιτεκτονικής το οποίο είναι γνωστό ως μοντέλο von Neumann ή απλώς ως σειριακό μοντέλο. Το μοντέλο αυτό[1] εμφανίστηκε το 1945 και περιγράφει έναν ψηφιακό υπολογιστή ο οποίος αποτελείται χονδρικά από τρία βασικά μέρη, την κύρια μνήμη, την κεντρική μονάδα επεξεργασίας και μια διασύνδεση μεταξύ τους. [1] http://en.wikipedia.org/wiki/grid_computing 4

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Εικόνα 1.2 - Το μοντέλο von Neumann ή σειριακό μοντέλο [1] Η κύρια μνήμη χρησιμοποιείται για την αποθήκευση δεδομένων και εντολών. Αποτελείται από θέσεις οι οποίες είναι κατάλληλες τόσο για την αποθήκευση δεδομένων όσο και για την αποθήκευση εντολών. Κάθε θέση έχει μια διεύθυνση, με βάση την οποία μπορούμε να προσπελάσουμε το περιεχόμενό της. Το δεύτερο βασικό στοιχείο της αρχιτεκτονικής, η κεντρική μονάδα επεξεργασίας (CPU), αποτελείται από δυο βασικά κομμάτια, την μονάδα ελέγχου (Control Unit), και την αριθμητική και λογική μονάδα (Arithmetic and Logic Unit). Η πρώτη είναι υπεύθυνη για να αποφασίσει ποια θα είναι η επόμενη εντολή που θα εκτελεστεί ενώ η εκτέλεση της γίνεται στην αριθμητική και λογική μονάδα. Τα δεδομένα εντός της κεντρικής μονάδας και οι πληροφορίες σχετικά με την κατάσταση του προγράμματος αποθηκεύονται σε ειδικά και γρήγορα αποθηκευτικά μέσα που καλούνται registers, ενώ υπάρχει και ένας ειδικός register που καλείται program counter και αποθηκεύει την θέση της επόμενης εντολής που θα εκτελεστεί. Η μεταφορά δεδομένων και εντολών μεταξύ της κεντρικής μονάδας επεξεργασίας και της κύριας μνήμης γίνεται με τους διαύλους επικοινωνίας (bus), που είναι ένα σύνολο από παράλληλα καλώδια και κάποιο κύκλωμα που ελέγχει την πρόσβαση σε αυτά. Όταν τα δεδομένα μετακινούνται από την μνήμη στην κεντρική μονάδα επεξεργασίας έχουμε ανάγνωση δεδομένων ενώ στην αντίθετη περίπτωση, όταν δηλαδή μετακινούνται δεδομένα από την κεντρική μονάδα επεξεργασίας προς την κύρια μνήμη έχουμε αποθήκευση δεδομένων. Μια μηχανή von Neumann εκτελεί μια μεμονωμένη εντολή την φορά, όπως έχει καθοριστεί από το πρόγραμμα, και αυτή επιδρά μόνο σε ορισμένα από τα δεδομένα. Η διαδικασία που γίνεται προκειμένου να εκτελεστεί η εντολή σε αυτή την μηχανή είναι [1] http://en.wikipedia.org/wiki/von_neumann_architecture 5

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ αρχικά η λήψη της επόμενης εντολής από την κύρια μνήμη, η θέση της οποίας είναι αποθηκευμένη στον program counter, η εκτέλεσή της ανάλογα με τις ενέργειες που καθορίζει προκαλώντας πιθανόν κάποια τροποποίηση δεδομένων στην μνήμη. Ο κύκλος αυτός επαναλαμβάνεται συνεχώς. Ένα από τα βασικά προβλήματα αυτού του μοντέλου είναι το λεγόμενο von Neumann bottleneck, λόγω του διαχωρισμού της κεντρικής μονάδας επεξεργασίας και της μνήμης. Ουσιαστικά αυτό το οποίο καθορίζει το μέγεθος των δεδομένων που μπορούν να προσπελαστούν είναι ο δίαυλος επικοινωνίας, με αποτέλεσμα την αύξηση του χρόνου εκτέλεση. ΚΑΤΗΓΟΡΙΕΣ ΥΠΟΛΟΓΙΣΤΩΝ ΜΕ ΠΟΛΛΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ Ο Michael J. Flynn το 1966 ταξινόμησε τις αρχιτεκτονικές των υπολογιστών με βάση τον αριθμό των εντολών που μπορεί να εκτελέσει ταυτόχρονα και των δεδομένων που είναι διαθέσιμα στην αρχιτεκτονική. Με βάση τα προηγούμενα κριτήρια έχουμε τέσσερις κατηγορίες αρχιτεκτονικών [1][2] [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm [2] http://en.wikipedia.org/wiki/flynn's_taxonomy 6

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ 1. SISD Single Instruction, Single Data stream 7

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Σε αυτή την αρχιτεκτονική έχουμε έναν επεξεργαστή, οποίος εκτελεί μία εντολή πάνω στα δεδομένα που είναι αποθηκευμένα σε μια μνήμη. Αυτή η αρχιτεκτονική αντιστοιχίζεται στην αρχιτεκτονική von Neumann. Εικόνα 1.3 Εκτέλεση αρχιτεκτονική SISD εντολών με την 2. SIMD - Single Instruction, Multiple Data streams Σε αυτή την αρχιτεκτονική έχουμε την εκτέλεση μιας εντολής σε διαφορετικά δεδομένα ταυτόχρονα. αρχιτεκτονική παράλληλου Αυτή η είναι ένας τύπος υπολογιστή και παρέχει παραλληλισμό σε επίπεδο δεδομένων (data level parallelism). Αυτού του είδους ο παραλληλισμός Εικόνα 1.4 Εκτέλεση αρχιτεκτονική SIMD εντολών με την χρησιμοποιείται στα πολυμέσα. 3. MISD - Multiple Instruction, Single Data stream Αυτός είναι ένας τύπος παράλληλης αρχιτεκτονικής στην οποία εφαρμόζουμε διαφορετικές εντολές δεδομένα. Εικόνα 1.5 Εκτέλεση αρχιτεκτονική MISD εντολών με την 4. MIMD - Multiple Instruction, Multiple Data streams 8 πάνω στα ίδια

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Οι μηχανές με αυτή την αρχιτεκτονική έχουν έναν αριθμό από επεξεργαστές οι οποίοι λειτουργούν ανεξάρτητα και ταυτόχρονα. Κάθε στιγμή διαφορετικοί επεξεργαστές μπορούν να εκτελέσουν διαφορετικές εντολές πάνω σε διαφορετικά δεδομένα. Ανάλογα με τον τρόπο επικοινωνίας τους χωρίζονται σε κοινής μνήμης (shared memory) και Εικόνα 1.6 Εκτέλεση αρχιτεκτονική MIMD εντολών με την κατανεμημένης μνήμης (distributed memory). Στις επόμενες εικόνες δείχνουμε σχηματικά τους παραπάνω τύπους αρχιτεκτονικής υπολογιστών [1] http://en.wikipedia.org/wiki/flynn's_taxonomy 9

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Εικόνα 1.7 - Κατηγοριοποίηση υπολογιστών κατά Flynn [1] Στην αρχιτεκτονική κοινής μνήμης οι επεξεργαστές δεν συνδέονται μεταξύ τους, αλλά μόνο με την κοινή μνήμη μέσω ενός δικτύου διασύνδεσης. Σε τέτοιου είδους αρχιτεκτονικές, ο προγραμματιστής θα πρέπει να προσέχει το πότε ένα πρόγραμμα ή επεξεργαστής διαβάζει ένα δεδομένο. Ο κάθε επεξεργαστής κρατάει ένα δικό του αντίγραφο, στην cache του, από κάποιο δεδομένο που υπάρχει στην κύρια μνήμη. Αν όμως κάποιος άλλος το αλλάξει τότε αυτό θα έχει λάθος τιμή. Το πρόβλημα αυτό είναι γνωστό ως Cache Coherency Problem. Αντίθετα, στην αρχιτεκτονική κατανεμημένης μνήμης, ο κάθε επεξεργαστής έχει την δική του μνήμη και επικοινωνεί με τους υπόλοιπους με χρήση μηνυμάτων. Κάθε επεξεργαστής λαμβάνει ένα αντίγραφο του προγράμματος και το εκτελεί χωρίς να έχει τίποτα κοινό με κάποιον άλλον επεξεργαστή. Επομένως αν θέλουμε κάποιο συγχρονισμό μεταξύ των επεξεργαστών, τότε θα πρέπει είτε να λάβουμε κάποιο δεδομένο κατόπιν αιτήσεως, είτε οι τοπικές μνήμες των επεξεργαστών να έχουν κοινά δεδομένα. Ένα πρόβλημα όμως που έχουμε εδώ είναι η καθυστέρηση που εισάγεται από το δίκτυο διασύνδεσης κατά την ανταλλαγή μηνυμάτων μεταξύ των επεξεργαστών. [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm 1

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ ΑΡΧΙΤΕΚΤΟΝΙΚΕΣ ΜΝΗΜΗΣ ΠΑΡΑΛΛΗΛΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Με βάση τον τρόπο με τον οποίο οργανώνεται η μνήμη καθώς επίσης και η πρόσβαση των επεξεργαστών σε αυτή, οι παράλληλοι υπολογιστές χωρίζονται στις ακόλουθες κατηγορίες: κοινής μνήμης (shared memory) κατανεμημένης μνήμης (distributed memory) υβριδικό κατανεμημένης-κοινής μνήμης (hybrid distributed-shared memory) Σε γενικές γραμμές οι υπολογιστές κοινής μνήμης έχουν διαφορές μεταξύ τους, όμως η γενική ιδέα είναι η ίδια, οτι δηλαδή όλοι οι επεξεργαστές έχουν πρόσβαση σε όλη την μνήμη. Οι επεξεργαστές μπορούν να λειτουργούν ανεξάρτητα ο ένας από τον άλλον, αλλά μοιράζονται την ίδια μνήμη μεταξύ τους και οι αλλαγές που κάνει ένας επεξεργαστής μπορούν να γίνουν ορατές από όλους τους επεξεργαστές. Σε τέτοιου είδους αρχιτεκτονικές λοιπόν, ο κάθε επεξεργαστής κρατάει ένα δικό του αντίγραφο, στην cache του, από κάποιο δεδομένο που υπάρχει στην κύρια μνήμη. Αν όμως κάποιος άλλος το αλλάξει τότε αυτό θα έχει λάθος τιμή. Το πρόβλημα αυτό είναι γνωστό ως Cache Coherency Problem. Είναι λοιπόν ευθύνη του προγραμματιστή να ορίσει πότε και ποιος επεξεργαστής διαβάζει ή αλλάζει κάποια θέση μνήμης. Οι επεξεργαστές δεν συνδέονται μεταξύ τους, αλλά μόνο με την κοινή μνήμη μέσω ενός δικτύου διασύνδεσης. Οι υπολογιστές σε αυτή την κατηγορία μπορούν να χωριστούν σε δύο ομάδες, τις μηχανές UMA (Uniform Memory Access) και τις μηχανές NUMA (Non-Uniform Memory Access)[1]. Εικόνα 1.8 Αρχιτεκτονική κοινής μνήμης UMA[1] Εικόνα 1.9 Αρχιτεκτονική κοινής μνήμης NUMA[1] [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm 11

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Λόγο της κοινής μνήμης που μοιράζονται όλοι οι επεξεργαστές, η ανταλλαγή δεδομένων μεταξύ των νημάτων που εκτελούνται σε διαφορετικούς επεξεργαστές γίνεται πολύ γρήγορα. Όμως τόσο ο σωστός συγχρονισμός για την πρόσβαση στην κοινή μνήμη όσο και η τιμή των συγκεκριμένων μηχανών αποτελούν μειονεκτήματα αυτής της αρχιτεκτονικής. Τέλος θα πρέπει να σημειωθεί οτι στην αρχιτεκτονική κοινής μνήμης δεν υπάρχει μεγάλη δυνατότητα για επεκτασιμότητα καθώς η αύξηση των επεξεργαστών οδηγεί σε αύξηση της κίνησης στο κανάλι διασύνδεσης μνήμης και επεξεργαστών. Όπως και στις αρχιτεκτονικές κοινής μνήμης, έτσι και στις αρχιτεκτονικές κατανεμημένης μνήμης, παρατηρούμε αρκετές διαφοροποιήσεις στις μηχανές που υλοποιούν αυτή την αρχιτεκτονική, αλλά η γενική ιδέα είναι οτι ο κάθε επεξεργαστής έχει την δική του τοπική μνήμη και δεν υπάρχει η έννοια της γενικής μνήμης. Ο κάθε επεξεργαστής επηρεάζει μόνο την δική του μνήμη και δεν μπορεί να διαβάσει ή να γράψει σε μνήμη κάποιου άλλου επεξεργαστή. Σε περίπτωση που κάποιος θέλει δεδομένα από άλλον επεξεργαστή θα πρέπει να σταλούν μέσω του δικτύου. Και εδώ ο προγραμματιστής είναι υπεύθυνος για τον συγχρονισμό των επεξεργαστών, δηλαδή πότε θα στείλει ένας επεξεργαστής δεδομένα και ποια θα είναι αυτά. Κάθε επεξεργαστής λαμβάνει ένα αντίγραφο του προγράμματος και το εκτελεί χωρίς να έχει τίποτα κοινό με κάποιον άλλον επεξεργαστή. Ένα πρόβλημα όμως που έχουμε εδώ είναι η καθυστέρηση που εισάγεται από το δίκτυο διασύνδεσης κατά την ανταλλαγή μηνυμάτων μεταξύ των επεξεργαστών. Εικόνα 1.1 Αρχιτεκτονική κατανεμημένης μνήμης[1] Στην αρχιτεκτονική αυτή δεν θα συναντήσουμε το πρόβλημα Cache Coherency, καθώς κάθε επεξεργαστής βλέπει μόνο την δική του μνήμη την οποία δεν επηρεάζει κανείς 12

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ άλλος, όμως δεν είναι εύκολο να υλοποιηθούν γενικές δομές δεδομένων που θα τις βλέπουν όλοι οι επεξεργαστές. Υπάρχει η δυνατότητα της επεκτασιμότητας, προσθέτοντας καινούργιους επεξεργαστές χωρίς να δημιουργηθεί κάποιο πρόβλημα ενώ μπορεί να υλοποιηθεί με κοινούς υπολογιστές γεγονός που σημαίνει οτι δεν έχουμε μεγάλο κόστος. Τέλος ένα μειονέκτημα και εδώ παραμένει ο συγχρονισμός των διεργασιών που εκτελούνται σε διαφορετικούς επεξεργαστές καθώς ο προγραμματιστής είναι υπεύθυνος για αυτόν. ΠΑΡΑΛΛΗΛΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΜΟΝΤΕΛΑ Ένα προγραμματιστικό μοντέλο είναι ο τρόπος με τον οποίο ένας προγραμματιστής αντιλαμβάνεται την αρχιτεκτονική του υπολογιστή, προκειμένου να δημιουργήσει κάποιο πρόγραμμα σε αυτόν. Όπως σημειώνεται στο [12], με βάση και τις προηγούμενες κατηγοριοποιήσεις των αρχιτεκτονικών των επεξεργαστών τα προγραμματιστικά μοντέλα χωρίζονται σε παραλληλισμός δεδομένων : Υπάρχουν Ν επεξεργαστές οι οποίοι εκτελούν την ίδια εντολή πάνω σε διαφορετικά δεδομένα. Σε αυτή την περίπτωση είναι αναγκαία η χρήση δομών που διαμοιράζουν τα δεδομένα στους επεξεργαστές. Αυτό το προγραμματιστικό μοντέλο ταιριάζει με την αρχιτεκτονική τύπου SIMD. παραλληλισμός ελέγχου : έχουμε Ν επεξεργαστές καθένας από τους οποίους εκτελεί διαφορετικές εντολές με διαφορετικά δεδομένα. Το μοντέλο αυτό ταιριάζει με τη αρχιτεκτονική τύπου MIMD Η αρχιτεκτονική τύπου MIMD, όπως είδαμε και παραπάνω χωρίζεται σε δύο κατηγορίες αυτή της κοινής μνήμης και αυτή της κατανεμημένης μνήμης. Έτσι λοιπόν αντίστοιχα έχουμε δυο προγραμματιστικά μοντέλα για τους δυο αυτούς τύπους μοντέλο κοινού χώρου διευθύνσεων : ο προγραμματιστής βλέπει το πρόγραμμα σαν μια συλλογή νημάτων τα οποία προσπελαύνουν μια συλλογή από κοινές (καθολικές) μεταβλητές. Ο προγραμματιστής είναι υποχρεωμένος να προσέξει τις αλλαγές των τιμών των μεταβλητών και γι αυτό πρέπει να δημιουργηθούν δομές 13

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ οι οποίες να αποτρέπουν την ταυτόχρονη προσπέλαση κοινών μεταβλητών. Ένας τρόπος είναι η χρήση σηματοφόρους (semaphores). μοντέλο μεταβίβασης μηνυμάτων : το πρόγραμμα είναι μια συλλογή από αυτόνομες διεργασίες οι οποίες δεν έχουν καμία κοινή μεταβλητή και έχουν την δυνατότητα να επικοινωνούν μεταξύ τους ανταλλάσσοντας μηνύματα. Με αυτό το προγραμματιστικό μοντέλο θα ασχοληθούμε και στην υλοποίηση της διπλωματικής, οπότε στο επόμενο κεφάλαιο θα αναφερθούμε ξανά σε αυτό. Πέραν όμως από το μοντέλο προγραμματισμού, ο προγραμματιστής θα πρέπει να δώσει μεγάλη προσοχή τόσο στην διαμοίραση των εργασιών, με σκοπό να πετύχει λίγες επικοινωνίες και μοιρασμένο φόρτο εργασίας ανάμεσα στους επεξεργαστές, όσο και στον συντονισμό και την συνεργασία, ώστε να υπάρχουν τα σωστά δεδομένα την κατάλληλη στιγμή σε όλους τους επεξεργαστές. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΠΑΡΑΛΛΗΛΩΝ ΕΠΕΞΕΡΓΑΣΤΩΝ Υπάρχουν διάφοροι τρόποι με τους οποίους μπορεί κάποιος να δουλέψει έτσι ώστε να δημιουργήσει μια εφαρμογή, η οποία θα εκτελείται παράλληλα σε περισσότερους από έναν επεξεργαστές. Αυτό μπορεί να μην απαιτεί καν την γνώση κάποιου τρόπου παράλληλου προγραμματισμού. Έτσι αν θέλουμε να δημιουργήσουμε εφαρμογές που θα εκτελούνται παράλληλα έχουμε τους εξής τρόπους Έμμεσος παράλληλος προγραμματισμός Εδώ γίνεται χρήση κατάλληλου compiler, ο οποίος αναλαμβάνει να βρει τα κομμάτια του προγράμματος που δεν έχουν κάποια εξάρτηση μεταξύ τους και μπορούν να εκτελεστούν ταυτόχρονα. Ο προγραμματιστής γράφει την εφαρμογή του σε μια οικεία σειριακή γλώσσα και τα υπόλοιπα γίνονται από τον compiler. Όμως αυτός ο τρόπος παράλληλου προγραμματισμού δεν είναι αποδοτικός, τουλάχιστον προς το παρόν. Παραλληλοποίηση βρόχων επανάληψης Είναι γνωστό οτι ένας από τους παράγοντες που κάνουν μια εφαρμογή να 14

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ καθυστερεί είναι αυτός των βρόχων επανάληψης, ειδικά στην περίπτωση που έχουμε πολλούς βρόχους τον έναν μέσα στον άλλον. Σε αυτή την περίπτωση η ταχύτητα του προγράμματος εξαρτάται από την είσοδό μας ενώ κάθε βρόχος που βρίσκεται μέσα σε έναν άλλο κάνει την καθυστέρηση πολλαπλάσια (θα δούμε περισσότερα σε λίγο). Έτσι λοιπόν θα ήταν χρήσιμο, αν προσπαθούσαμε να μειώσουμε τις επαναλήψεις του βρόχου επανάληψης, μοιράζοντας αυτές σε δυο ή περισσότερους επεξεργαστές. Φυσικά κάτι τέτοιο δεν είναι απλό καθώς απαιτεί την ανάλυση των πράξεων που γίνονται εντός του βρόχου και αν υπάρχουν εξαρτήσεις από προηγούμενα βήματα. Αν κάτι τέτοιο επιτευχθεί όμως θα βελτιώσει την απόδοση της εφαρμογής αισθητά. Άμεσος παράλληλος προγραμματισμός Εδώ ο προγραμματιστής τα κάνει όλα από την αρχή. Αναλύει το πρόβλημα βλέπει που υπάρχουν και που δεν υπάρχουν εξαρτήσεις, και ανάλογα με το σύστημα που θα φιλοξενήσει την εφαρμογή, γίνεται η ανάπτυξη της εφαρμογής. Θα πρέπει να τονιστεί εδώ οτι υπάρχει μεγάλη εξάρτηση από την αρχιτεκτονική του συστήματος που θα φιλοξενήσει την εφαρμογή και δεν είναι εύκολη η μεταφορά του παράλληλου προγράμματος σε άλλη μηχανή. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΑΡΑΛΛΗΛΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ Η βασική μεθοδολογία για να δημιουργήσουμε μια εφαρμογή η οποία θα εκτελείται παράλληλα σε μια μηχανή με πολλούς επεξεργαστές περιλαμβάνει δύο βασικά βήματα: 1. διαχωρισμός του προγράμματος σε διεργασίες 1.1. διάσπαση σε εργασίες 1.2. ανάθεση εργασιών σε διεργασίες 2. τοποθέτηση των διεργασιών στους επεξεργαστές Σε αυτό το σημείο είναι χρήσιμο να ορίσουμε τις έννοιες διεργασία και εργασία όπως αυτές ορίζονται στο [12]. Εργασία είναι γενικά κάποια τμήματα του υπολογισμού τα οποία μπορούν να εκτελεστούν παράλληλα ταυτόχρονα. Μια εργασία εκτελείται εξ' ολοκλήρου από έναν επεξεργαστής. Διεργασία είναι μια συλλογή από εργασίες και 15

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ εκτελείται από έναν και μόνο επεξεργαστή. Μια διεργασία μπορεί να είναι μια διαδικασία του σειριακού κώδικα ή, πιο συνηθισμένα, μια κατά περίπτωση επιλογή από σχετιζόμενες εργασίες (πχ εργάζονται πάνω στις ίδιες μεταβλητές). Το πρώτο βήμα είναι κατά μεγάλο ποσοστό ανεξάρτητο από την αρχιτεκτονική του συστήματος ενώ το δεύτερο εξαρτάται σε μεγάλο βαθμό από αυτήν. Για την διάσπαση του προβλήματος σε εργασίες κάνουμε χρήση του γράφου εξάρτησης δεδομένων (data dependency graph), με βάση τον οποίο μπορούμε να βρούμε τα κομμάτια του προβλήματος που μπορούν να εκτελεστούν ταυτόχρονα καθώς δεν έχουν εξαρτήσεις μεταξύ τους. Επίσης είναι χρήσιμο να κάνουμε και την διαδικασία του profiling προκειμένου να δούμε ποια κομμάτια του κώδικα, ποιες συναρτήσεις, απαιτούν περισσότερο χρόνο για να εκτελεστούν και αξίζει να ασχοληθούμε προκειμένου να μειώσουμε τον χρόνο εκτέλεσης της σειριακής εφαρμογής. Όμως και η διαδικασία της ανάθεσης σε επεξεργαστές δεν είναι απλή υπόθεση. Πρέπει να λάβουμε υπ' όψιν μας 1. οι επεξεργαστές να έχουν ίσο όγκο εργασίας προκειμένου να γίνει πλήρη εκμετάλλευση της παρουσίας των επεξεργαστών. Διαφορετικά, αν κάποιος επεξεργαστής έχει παραπάνω φόρτο εργασίας θα αυξήσει τον χρόνο εκτέλεσης (φυσικά αν αυτό είναι εφικτό). 2. οι επικοινωνίες μεταξύ των επεξεργαστών θα πρέπει να είναι όσο το δυνατόν λιγότερες καθώς είναι αυτές που προσθέτουν καθυστέρηση σε ένα τέτοιο μοντέλο. Λαμβάνοντας αυτά υπ' όψιν μπορούμε να κάνουμε την ανάθεση σε δυο βασικά βήματα, όπως αυτά παρουσιάζονται στο [12], αρχικά την ενορχήστρωση, δηλαδή τον τρόπο επικοινωνίας και συντονισμού των διεργασιών, και μετά την αντιστοίχιση, όπου καθορίζεται ποιος επεξεργαστής θα εκτελέσει ποια διεργασία. Το δεύτερο μπορεί να γίνει είτε με δυναμικό τρόπο, με το λειτουργικό να αναλαμβάνει την ανάθεση, είτε με στατικό τρόπο, με την αντιστοίχιση να γίνεται από τον προγραμματιστή και να μην αλλάζει κατά την εκτέλεση της εφαρμογής. [1]www.it.uom.gr/teaching/llnl-gr/Introduction to Parallel Computing.htm 16

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Στην συνέχεια παρουσιάζονται 6 βασικές τεχνικές λογικές που χρησιμοποιούνται στην ανάπτυξη παράλληλων αλγορίθμων εφαρμογών [1]. Οι τεχνικές που θα παρουσιαστούν δεν είναι πάντα ανεξάρτητες από την αρχιτεκτονική της μηχανής στην οποία θα εκτελεστεί η εφαρμογή που σχεδιάζουμε. 1. Παραλληλισμός Δεδομένων (Data Parallelism) Με αυτή την τεχνική ένας μεγάλος αριθμός δεδομένων υπόκεινται στην ίδια ή παρόμοια διαδικασία. Σε έναν απλό σειριακό υπολογιστή θα εκτελούσαμε την διαδικασία σε όλα τα δεδομένα σε έναν επεξεργαστή ενώ στην περίπτωση των παράλληλων υπολογιστών σπάμε τα δεδομένα σε περισσότερους επεξεργαστές και επομένως ο κάθε ένας εκτελεί λιγότερα βήματα υπολογισμών. 2. Κατάτμηση Δεδομένων (Data Partitioning) Αυτή η τεχνική είναι κατάλληλη για τα συστήματα κατανεμημένης μνήμης καθώς σε αυτή την τεχνική ο χώρος αποθήκευσης είναι φυσικά διαχωρισμένος σε παρακείμενες περιοχές. Κάθε μια από τις περιοχές αυτές υφίσταται επεξεργασία από διαφορετικό επεξεργαστή. 3. Ασύγχρονος Αλγόριθμος (Asynchronous Algorithm) Σε αυτή την περίπτωση έχουμε διεργασίες οι οποίες εκτελούνται ανεξάρτητα μεταξύ τους και δεν απαιτείται κάποιου είδους επικοινωνία ή συγχρονισμός. Είναι τεχνική που χρησιμοποιείται τόσο σε συστήματα κατανεμημένης μνήμης όσο και συστήματα διαμοιραζόμενης μνήμης και έχουν σαν αποτέλεσμα μεγάλες επιταχύνσεις. 4. Σύγχρονη Επανάληψη (Synchronous Iteration) Στη σύγχρονη επανάληψη έχουμε την χρήση του ίδιου επαναληπτικού αλγορίθμου σε διαφορετικό τμήμα δεδομένων ενώ στο τέλος κάθε επανάληψης απαιτείται ο συγχρονισμός μεταξύ των επεξεργαστών καθώς τα δεδομένα που επεξεργάζονται χρησιμοποιούνται στην επόμενη επανάληψη. Γι αυτό δεν είναι δυνατόν να ξεκινήσει μια επανάληψη σε κάποιον επεξεργαστή αν δεν έχουν 17

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ τελειώσει όλοι οι υπόλοιποι επεξεργαστές. 5. Πολλαπλοί Εργαζόμενοι (Multiple Workers) Σε αυτή την τεχνική υπάρχει μια κεντρική δεξαμενή παρόμοιων υπολογιστικών εργασιών, από όπου ένας μεγάλος αριθμός διεργασιών ανακτούν εργασίες. Οι διεργασίες αυτές μπορεί να προσθέσουν νέες εργασίες στην δεξαμενή. Η υπολογιστή διαδικασία τερματίζει όταν η δεξαμενή αδειάζει εντελώς. Η τεχνική αυτή είναι χρήσιμη σε προβλήματα εκθετικής πολλαπλότητας όπως η αναζήτηση σε δένδρο ή γράφημα, όπου ένας μεγάλος αριθμός από μικρές υπολογιστικές εργασίες παράγεται δυναμικά ως αποτέλεσμα της συνολικής υπολογιστικής διαδικασίας. 6. Υπολογιστική Διαδικασία Διασωλήνωσης (Pipeline Computation) Η συγκεκριμένη τεχνική ανάπτυξης εφαρμογών είναι κατάλληλη για συστήματα κατανεμημένης μνήμης καθώς εδώ έχουμε την οργάνωση των διεργασιών σε φυσικές δομές όπως αυτή του δακτυλίου ή του δισδιάστατου πλέγματος. Τα δεδομένα μετακινούνται μέσω αυτής της δομής. ΠΛΕΓΜΑ ΥΠΟΛΟΓΙΣΤΩΝ Με τον όρο πλέγμα υπολογιστών (grid computer) εννοούμε την συλλογή από υπολογιστικούς πόρους σε διάφορες τοποθεσίες (γεωγραφικά), ώστε να πετύχουν έναν συγκεκριμένο σκοπό. Οι υπολογιστές μπορεί να βρίσκονται σε διαφορετικές γεωγραφικές τοποθεσίες και συνδέονται μεταξύ τους μέσω κάποιου δικτύου. Με αυτό τον τρόπο είναι δυνατόν να διαμοιραστούν την υπολογιστική ισχύ, τις αποθηκευτικές συσκευές κ.α. Ο χρήστης δεν απαιτείται να γνωρίζει το που βρίσκονται οι πόροι που χρησιμοποιεί καθώς επίσης τις τεχνολογίες ή τα λειτουργικά συστήματα που χρησιμοποιούνται. Δεν τις αντιλαμβάνεται σαν ξεχωριστές μηχανές, αλλά τις βλέπει σαν μια ενιαία υπερμηχανή. Για να γίνει αντιληπτό το πλέγμα υπολογιστών μπορούμε να το θεωρήσουμε σαν το δίκτυο διανομής ηλεκτρική ενέργειας, στο οποίο ο κάθε χρήστης έχει πρόσβαση σε αυτό μέσω των πριζών χωρίς να τον απασχολεί το πως ή το που αυτό [1] http://charlilaurenracheljulianna.blogspot.gr/213/1/breast-cancer-and-grid-computing.html 18

ΚΕΦΑΛΑΙΟ 1 δημιουργείται. ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Συνήθως χρησιμοποιούνται προκειμένου να επιλυθούν μεγάλα προβλήματα. Τα πλέγματα υπολογιστών, ανάλογα με τον σκοπό που θέλουμε να επιτελέσουν, μπορούν να χωριστούν σε computational grid, όπου προστίθενται πόροι με σκοπό την μεγαλύτερη υπολογιστική ισχύ, και σε data grids, όπου εστιάζουν στην αποθήκευση δεδομένων[13]. Μια άλλη ταξινόμηση των πλεγμάτων υπολογιστών, με βάση την τοπολογία, είναι η ακόλουθη, [13] Cluster Grids (intragrid) είναι μια ομάδα υπολογιστών που συνεργάζονται και έχουν ένα ενιαίο σημείο πρόσβασης για τους χρήστες σε ένα έργο ή υπηρεσία. Είναι η πιο απλή μορφή. Campus Grids (extragrid) επιτρέπει τμήματα οργανισμών να μοιράζονται τους πόρους τους, ενώ μπορούν να χρησιμοποιηθούν για μια πληθώρα εργασιών. Global Grids (intergrid) είναι συλλογή Campus Grids, που δίνουν την δυνατότητα δημιουργίας μεγάλων εικονικών συστημάτων. Οι χρήστες μπορούν να έχουν πρόσβαση σε πόρους που υπερβαίνουν αυτούς που έχουν σε τοπικό επίπεδο. Στην επόμενη εικόνα βλέπουμε τις τρεις παραπάνω κατηγορίες του πλέγματος [1] http://docs.oracle.com/cd/e198-1/n1.grid.eng6/817-6117/chp1-2/ 19

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Εικόνα 1.11 Τοπολογική οργάνωση του πλέγματος υπολογιστών[1] Για να οργανωθούν όλοι αυτοί οι υπολογιστές απαιτείται η ύπαρξη ενός κεντρικού διακομιστή (server), ο οποίος ονομάζεται control node και οργανώνει την ανάθεση των εργασιών, καταγράφει την κίνηση στο δίκτυο ενώ γνωρίζει τους διαθέσιμους πόρους. Εδώ θα πρέπει να πούμε τον τρόπο με τον οποίο δομείται μια εφαρμογή. Όπως φαίνεται και στο επόμενο σχήμα, μία εφαρμογή αποτελείται από πολλές εργασίες (jobs), οι οποίες με την σειρά τους διασπώνται σε υποεργασίες (subjobs). [1] http://charlilaurenracheljulianna.blogspot.gr/213/1/breast-cancer-and-grid-computing.html 2

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ Εικόνα 1.12 Τρόπος διάσπασης εφαρμογών Όταν αναθέτουμε κάποια δουλεία στο πλέγμα, τότε ο διακομιστή, την χωρίζει σε υποεργασίες και τις αναθέτει σε διαθέσιμους υπολογιστικούς πόρους. Όταν όλες οι υποεργασίες ολοκληρωθούν, τότε ο διακομιστής συγκεντρώνει τα αποτελέσματα και περνάει στην επόμενη εργασία. Σε περίπτωση που κάποια από τις εργασίες αποτύχει, τότε την αναθέτει εκ νέου σε υπολογιστή. Η ανάθεση γίνεται με βάση τους διαθέσιμους πόρους και τον φόρτο εργασίας. Εικόνα 1.13 Η δομή του πλέγματος υπολογιστών[1] Σε επίπεδο λογισμικού, τα πλέγματα υπολογιστών έχουν μια σειρά από προγράμματα, τα οποία βοηθούν στην διαχείριση των πόρων. Τα βασικά στοιχεία είναι ένα λογισμικό το 21

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ οποίο διαχειρίζεται τους πόρους του συστήματος, γνωρίζοντας ποιοι κόμβοι είναι διαθέσιμοι και αν όχι πόσος είναι ο φόρτος εργασίας τους. Με αυτό τον τρόπο δίνεται η δυνατότητα να ανατίθενται εργασίες σε κόμβους που έχουν την λιγότερη δουλειά. Ένα δεύτερο λογισμικό που διαθέτουν είναι αυτό της διαχείρισης του πλέγματος. Το λογισμικό αυτό γνωρίζει την τοπολογία και την ιεραρχία του συστήματος και βοηθά στην ανάθεση των εργασιών. Τα λογισμικά αυτά βρίσκονται στον κεντρικό κόμβο που διαχειρίζεται το σύστημα. Σε κάθε μία μηχανή που προσφέρει πόρους, θα πρέπει επίσης να υπάρχει κατάλληλο λογισμικό για την αποδοχή εργασιών από τον κεντρικό κόμβο, καθώς επίσης και λογισμικό για την εισαγωγή της μηχανής στο σύστημα του πλέγματος. 22

ΚΕΦΑΛΑΙΟ 1 ΠΑΡΑΛΛΗΛΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΑΙ ΠΛΕΓΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ [1] http://en.wikipedia.org/wiki/flynn's_taxonomy 23

ΚΕΦΑΛΑΙΟ 2 : ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ ΣΚΟΠΟΣ Σκοπός του κεφαλαίου αυτού είναι να παρουσιαστούν μέτρα σύγκρισης των παράλληλων αλγορίθμων με τον αντίστοιχο σειριακό καθώς επίσης πως επηρεάζεται η ταχύτητα αυτών από την εισαγωγή περισσότερων επεξεργαστών. παρουσιαστούν οι νόμοι του Amdahl και του Gustafson. Τέλος θα

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ ΑΝΑΛΥΣΗ ΣΕΙΡΙΑΚΩΝ ΑΛΓΟΡΙΘΜΩΝ Σημαντικό ρόλο στην δημιουργία μιας παράλληλης εφαρμογής από μία σειριακή παίζει η ανάλυση των επιδόσεων της, προκειμένου να δούμε ποιο κομμάτι της σειριακής εφαρμογής απαιτεί χρόνο για την εκτέλεσή του και αξίζει την παραλληλοποιησή του καθώς κάτι τέτοιο θα είχε σημαντική επίδραση στον χρόνο εκτέλεσης της εφαρμογής. Είναι προφανές οτι αν ενεργούσαμε πάνω σε ένα κομμάτι το οποίο δεν καθυστερούσε σημαντικά την εκτέλεση της εφαρμογής, δεν θα βλέπαμε σημαντικές βελτιώσεις στον χρόνο εκτέλεσης της. Στην συνέχεια παρουσιάζονται οι τρόποι ανάλυσης ενός προγράμματος καθώς και τα αποτελέσματα από την ανάλυση της εφαρμογής που πρόκειται να υλοποιήσουμε παράλληλα. Ως ανάλυση προγράμματος[1] (Program Analysis) λοιπόν, ορίζεται μια αυτοματοποιημένη διαδικασία με την οποία αναλύουμε και μελετάμε την συμπεριφορά ενός προγράμματος προκειμένου να το βελτιώσουμε. Υπάρχουν δύο βασικές κατηγορίες ανάλυσης με βάση τον τρόπο με τον οποίο μελετάμε το πρόγραμμα, την στατική ανάλυση (Static Program Analysis) και την δυναμική ανάλυση (Dynamic Program Analysis). Στατική ανάλυση ενός προγράμματος [2] είναι η διαδικασία ανάλυσής του χωρίς να πραγματοποιήσουμε την εκτέλεσή του. Η ανάλυση συνήθως βασίζεται σε μαθηματικά μοντέλα και γι αυτό είναι αδύνατον να πει με σιγουριά οτι δεν θα υπάρξουν προβλήματα κατά τον χρόνο εκτέλεσης. Τεχνικές που χρησιμοποιούνται σε αυτό τον τρόπο ανάλυσης είναι το Program Comprehension, που περιλαμβάνει τρόπους συντήρησης ενός κώδικα, το Code Review, που είναι ο συστηματικός έλεγχος ενός πηγαίου κώδικα με σκοπό την διόρθωσή του και το Control Flow Analysis, όπου γίνεται ανάλυση όλων των πιθανών διαδρομών του κώδικα ενός προγράμματος κατά την εκτέλεσή του. Σε αντίθεση με την στατική ανάλυση, η δυναμική ανάλυση [3] ενός προγράμματος είναι η ανάλυση του κατά την εκτέλεσή. Για να είναι αποδοτική η μέθοδος αυτή θα πρέπει να εφαρμοστούν αρκετές διαφορετικές είσοδοι και να παρατηρηθούν ενδιαφέρουσες συμπεριφορές. Μια βασική τεχνική της μεθόδου αυτής είναι το profiling ή αλλιώς [1] http://en.wikipedia.org/wiki/program_analysis [2] http://en.wikipedia.org/wiki/static_program_analysis [3] http://en.wikipedia.org/wiki/dynamic_program_analysis 26

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ performance analysis. Με την χρήση της συγκεκριμένης μεθόδου ανάλυσης είναι δυνατόν να μετρηθούν[1]: μνήμη χρονική πολυπλοκότητα του προγράμματος συχνότητα κλήσης συναρτήσεων διάρκεια κλήσης συναρτήσεων Το πρόγραμμα που υλοποιεί την τεχνική αυτή ονομάζεται profiler και μπορεί να είναι ενσωματωμένος σε έναν compiler. Ανάλογα με τα αποτελέσματα του profiler έχουμε δύο τύπους Flat Profiler O Flat profiler, εξάγει ως αποτέλεσμα της ανάλυσης του, το συνολικό χρόνο που χρειάστηκε το λογισμικό για να εκτελέσει την κάθε συνάρτηση του κώδικα του προγράμματος. Call-graph Profiler Ο Call-graph Profiler μας δείχνει, στα αποτελέσματά του, το χρόνο που δαπανήθηκε στην εκτέλεση του κάθε προγράμματος, από ποια συνάρτηση κλήθηκε και πόσες φορές καθώς επίσης και τον χρόνο εκτέλεσης της κάθε συνάρτησης που κλήθηκε από την συνάρτηση που εξετάζουμε. Στο δεύτερο παράρτημα βλέπουμε τα αποτελέσματα της ανάλυσης της εφαρμογής που θέλουμε να παραλληλοποιήσουμε και το λόγο για τον οποίο θέτουμε σαν βασικό μας στόχο την μείωση του χρόνου της συνάρτησης που υλοποιεί την συνάρτηση Cholesky. ΣΥΓΚΡΙΣΗ ΣΕΙΡΙΑΚΟΥ ΚΑΙ ΠΑΡΑΛΛΗΛΟΥ ΑΛΓΟΡΙΘΜΟΥ Ένα χρήσιμο μέτρο για την αξιολόγηση ενός παράλληλου αλγορίθμου είναι η σύγκρισή του με τον αντίστοιχο σειριακό αλγόριθμο. Το μέτρο αυτό είναι η επιτάχυνση (speedup) [1] http://en.wikipedia.org/wiki/performance_analysis 27

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ Επιτάχυνση, σύμφωνα με τα [7], [12] και [1], ορίζεται ως ο λόγος του χρόνου εκτέλεσης του καλύτερου σειριακού αλγορίθμου προς τον χρόνο εκτέλεσης του αντίστοιχου παράλληλου αλγορίθμου και εκφράζεται μαθηματικά με τον ακόλουθο τύπο όπου S n= T1 (2.1) Tn T1 είναι ο χρόνος εκτέλεσης του σειριακού αλγορίθμου και Tn ο χρόνος εκτέλεσης του παράλληλου αλγορίθμου. Ο χρόνος εκτέλεσης ενός παράλληλου αλγορίθμου προσδιορίζεται από τη στιγμή που ένας επεξεργαστής αρχίζει να κάνει υπολογισμούς έως ότου ο τελευταίος επεξεργαστής ολοκληρώσει την εργασία του. Με τον συγκεκριμένο μέτρο μπορούμε να συγκρίνουμε διάφορους τρόπους παράλληλης υλοποίησης με τον ίδιο σειριακό αλγόριθμο και να δούμε ποιος είναι ο καλύτερος. ΑΠΟΔΟΤΙΚΟΤΗΤΑ ΚΑΙ ΚΟΣΤΟΣ Η αποδοτικότητα, όπως ορίζεται στο [12], σχετίζει το όφελος στην ταχύτητα και τον αριθμό των επεξεργαστών που χρειάζονται για να το επιτύχουμε. Ορίζεται από τον τύπο : e n= Sn T1 (2.2) = n n T n όπου T 1 και T n οι χρόνοι που παρουσιάστηκαν στην προηγούμενη παράγραφο. Είναι προφανές από την παραπάνω σχέση οτι αν S n n τότε προκύπτει οτι e n 1. Στην ιδανική περίπτωση, όπου η απόδοση είναι στο 1%, τότε όλοι οι επεξεργαστές είναι όντως απαραίτητοι προκειμένου να επιτευχθεί η επιτάχυνση S n. Το κόστος, που παρουσιάζεται στο [12], είναι ένα άλλο μέγεθος το οποίο μας δείχνει κατά πόσο οι επεξεργαστές χρησιμοποιήθηκαν αποδοτικά και ορίζεται από την σχέση : c n=n T n (2.3) και το μέγεθος αυτό μας δείχνει πόση ώρα χρησιμοποιήθηκαν οι επεξεργαστές [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm 28

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ αθροιστικά. Αν ένας αλγόριθμος εκτελέστηκε παράλληλα σε συνολικό χρόνο T n, τότε ο κάθε επεξεργαστής ήταν δεσμευμένος για το διάστημα αυτό ανεξάρτητα από το αν εργαζόταν σε όλο αυτό το διάστημα. Από την παραπάνω σχέση προκύπτει εύκολα οτι το σειριακό κόστος θα είναι ίσο με T 1 θέτοντας όπου n το 1 και σαν χρόνο εκτέλεσης τον χρόνο του σειριακού αλγορίθμου T 1. Σε αυτό το σημείο θα πρέπει να τονιστεί οτι η μείωση του αριθμού των επεξεργαστών δεν είναι απαραίτητο να μειώνει την αποδοτικότητα και δεν είναι απαραίτητο να αυξάνει το κόστος του αλγορίθμου. ΝΟΜΟΣ ΤΟΥ AMDAHL O νόμος του Amdahl, βασιζόμενοι στα [7], [12], [1] και [2], χρησιμοποιείται προκειμένου να υπολογιστεί το μέγιστο αναμενόμενο κέρδος όταν κάποιο κομμάτι του αλγορίθμου βελτιωθεί και χρησιμοποιείται στον παράλληλο προγραμματισμό προκειμένου να υπολογιστεί η θεωρητικά μεγαλύτερη επιτάχυνση. Έστω οτι έχουμε στην διάθεσή μας n επεξεργαστές και το πρόγραμμά μας έχει τα εξής χαρακτηριστικά ένα ποσοστό των εντολών, f, μπορεί να εκτελεστεί μόνο σειριακά το υπόλοιπο ποσοστό, 1-f, είναι εντελώς παραλληλοποιήσιμο Με βάση τα προηγούμενα δύο χαρακτηριστικά, ο χρόνος που απαιτείται για την εκτέλεση των σειριακών εντολών είναι f T 1, ενώ για τις υπόλοιπες εντολές με τους n διαθέσιμους επεξεργαστές θα χρειαστεί χρόνος (1 f ) T 1. Επομένως, με βάση τους n προηγούμενους δυο χρόνους, ο συνολικός χρόνος που θα χρειαστούμε για την εκτέλεση του αλγορίθμου θα είναι T n= f T 1+ (1 f ) T 1 (2.4) n [1] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm [2] http://en.wikipedia.org/wiki/amdahl's_law 29

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ Επομένως, χρησιμοποιώντας τους δύο τύπους που αναφέρθηκαν στις δυο προηγούμενες παραγράφους για την επιτάχυνση και την αποδοτικότητα έχουμε S n= T1 n 1 (2.5) = T n n f +(1 f ) f e n= 1 (2.5) n f +(1 f ) οι δυο αυτές σχέσεις αποτελούν τον νόμο του Amdahl. O νόμος του Amdahl αποτελεί τον πιο απογοητευτικό νόμο για την παράλληλη επεξεργασία και αυτό διότι, καθώς ο αριθμός των επεξεργαστών μεγαλώνει και δεδομένου οτι το πρόβλημα παραμένει το ίδιο, η αποδοτικότητα πέφτει κατά πολύ. Αν όμως προσπαθήσουμε να λύσουμε το πρόβλημα με μεγαλύτερο μέγεθος εισόδου, τότε η χρήση επιπλέον επεξεργαστών μπορεί να δικαιολογηθεί. Γενικά, το κομμάτι του σειριακού κώδικα είναι συνάρτηση της εισόδου N και αυτό μπορούμε να το γράψουμε ως f (N ). Με βάση αυτό οι δύο τύποι του νόμου του Amdahl γίνονται S n (N )= n (2.6) n f ( N )+(1 f (N )) e n (N )= 1 (2.7) n f ( N )+(1 f ( N )) Με την αύξηση του μεγέθους του προβλήματος, τα σειριακά βήματα δεν αυξάνονται πολύ και άρα το σειριακό κομμάτι του αλγορίθμου, Αυτό μεταφράζεται μαθηματικά ως καθώς το lim S n ( N )=n (2.8) N 3 f ( N ), μειώνεται σταθερά με το N. Ν τότε f ( N ) και άρα έχουμε

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ lim en ( N )=1 (2.9) N Από τις παραπάνω δύο σχέσεις προκύπτει το συμπέρασμα οτι για κάθε διαθέσιμο αριθμό επεξεργαστών που μπορούμε να χρησιμοποιήσουμε, μπορούμε να βρούμε ένα μέγεθος εισόδου το οποίο μπορεί να επιτύχει οποιαδήποτε επιτάχυνση και αποδοτικότητα θέλουμε. Επομένως οι επιπλέον επεξεργαστές που διαθέτουμε μπορούν να γίνουν εκμεταλλεύσιμοι αρκεί να βρούμε το κατάλληλο μέγεθος εισόδου για να εκτελέσουμε το πρόβλημά μας. Αυτό το συμπέρασμα ισχύει με βάση την αρχική υπόθεση που κάναμε οτι δηλαδή η αύξηση του μεγέθους της εισόδου δεν αυξάνει τα αμιγώς σειριακά βήματα. Εικόνα 2.1 - Οι επιδράσεις του νόμου του Amdahl [1] [1] http://www.it.uom.gr/project/parallel/kef2/2.7.htm 31

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ Εικόνα 2.2 - Επίδραση του σειριακού κομματιού του αλγορίθμου [1] Ο ΝΟΜΟΣ ΤΟΥ GUSTAFSON Ο νόμος του Amdahl φτάνει σε κάποια συμπεράσματα θεωρώντας όμως το μέγεθος του προβλήματος σταθερό. Τι γίνεται όμως όταν αυτό δεν μένει σταθερό αλλά αλλάζει. Στο τέλος της προηγούμενης παραγράφου κάναμε μια αναφορά σχετικά με το τι συμβαίνει όταν έχουμε αλλαγή στην είσοδο του προβλήματος. Εδώ θα αναφερθούμε στον νόμο του Gustafson, όπως παρουσιάζεται στα [7], [12], [1] και [2], δηλαδή στον τύπο της επιτάχυνσης έχοντας ως δεδομένο οτι η είσοδος του προβλήματος μπορεί να αλλάξει. Αν θεωρήσουμε λοιπόν οτι το κομμάτι του αλγορίθμου που εκτελείται αποκλειστικά σειριακά εξαρτάται από το μέγεθος της εισόδου, τότε το ποσοστό των εντολών που εκτελείται μόνο σειριακά είναι f ( N ), ενώ το ποσοστό των εντολών που εκτελείται παράλληλα είναι 1 f ( N ). Ο αλγόριθμος αυτός σε σειριακό υπολογιστή θα χρειαστεί χρόνο T 1 (N )= f ( N ) T n ( N )+(1 f ( N )) n T n ( N ) (2.1) [1] http://en.wikipedia.org/wiki/amdahl's_law [2] www.it.uom.gr/teaching/llnl-gr/introduction to Parallel Computing.htm 32

ΚΕΦΑΛΑΙΟ 2 ΜΕΤΡΑ ΑΠΟΔΟΣΗΣ ΠΑΡΑΛΛΗΛΩΝ ΑΛΓΟΡΙΘΜΩΝ Από τον προηγούμενο τύπο παρατηρούμε οτι στον δεύτερο όρο του αθροίσματος μπαίνει ο παράγοντας n και επομένως η σειριακή υλοποίηση σε σχέση με την αντίστοιχη παράλληλη με n επεξεργαστές απαιτεί n περισσότερο χρόνο. Με βάση τον τύπο αυτό η επιτάχυνση προκύπτει S n (N )= f ( N )+(1 f ( N )) n=n (n 1) f ( N ) (2.11) Η σχέση αυτή αποκαλείται νόμος του Gustafson ή κλιμακώμενη επιτάχυνση (scaled speedup). Από την σχέση αυτή προκύπτει οτι αν ισχύει οτι καθώς το Ν τότε f ( N ), η επιτάχυνση τείνει στο ιδανικό, δηλαδή στο n. Επίσης μπορούμε να επιτύχουμε οποιαδήποτε επιτάχυνση και κατά συνέπεια οποιαδήποτε αποδοτικότητα ρυθμίζοντας κατάλληλα το f(n) μέσω του N. Επομένως αν αυξηθεί ο αριθμός των επεξεργαστών θα πρέπει να γίνει κλιμάκωση του μεγέθους της εισόδου N προκειμένου να επιτευχθεί η απαιτούμενη επιτάχυνση. 33

ΚΕΦΑΛΑΙΟ 3 : ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY ΣΚΟΠΟΣ Σκοπός του κεφαλαίου αυτού είναι να παρουσιαστεί το θεωρητικό υπόβαθρο της μεθόδου επίλυσης γραμμικών συστημάτων παραγοντοποίηση Cholesky, η οποία θα υλοποιηθεί στην διπλωματική εργασία, προκειμένου να γίνει κατανοητός ο τρόπος ανάπτυξής της. Επίσης θα περιγραφεί η σειριακή εφαρμογή που καλούμαστε να παραλληλοποιήσουμε.

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY ΕΦΑΡΜΟΓΗ ΡΕΥΣΤΟΜΗΧΑΝΙΚΗΣ Σε αυτό το σημείο θα παρουσιάσουμε την εφαρμογή που πρόκειται να παραλληλοποιήσουμε. Η ανάλυση που θα γίνει, δεν θα είναι σε θεωρητικό επίπεδο και επομένως δεν θα ασχοληθούμε με την φυσική πλευρά του ζητήματος. Ωστόσο σε αυτό το σημείο θα κάνουμε μια μικρή περιγραφή στην εφαρμογή και στο πρόβλημα που καλείται να επιλύσει. ΤΟ ΠΡΟΒΛΗΜΑ Όπως περιγράφεται στο [11], το πρόβλημα της συμπεριφοράς των γαγγλίων πετρελαίου κατά την κίνησή τους σε πορώδη πετρώματα, σχετίζεται με το τριτοβάθμιο στάδιο απόληψης πετρελαίου. Σε αυτό το στάδιο, σκοπός είναι η εκτόπιση του πετρελαίου που βρίσκεται στο κοίτασμα υπό μορφή μικρών παγιδευμένων γαγγλίων, τα οποία μπορεί να αποτελούν έως και τα δύο τρίτα του αρχικού πετρελαίου του κοιτάσματος. Η επιτυχία της διαδικασίας εξαρτάται από την κινητοποίηση και την επανασυγκόλληση των μικρών γαγγλίων, δημιουργώντας άλλα μεγαλύτερα, τα οποία θα αποτελέσουν την τράπεζα πετρελαίου. Η δημιουργία και η διατήρηση αυτής της τράπεζας πετρελαίου είναι αποτέλεσμα του ανταγωνισμού μεταξύ του μηχανισμού ομαδοποίησης και συνένωσης των γαγγλίων στο μέτωπο της πλημμύρας και του μηχανισμού διάσπασης και παγίδευσης των γαγγλίων. Για την θεωρητική μελέτη του προβλήματος, σύμφωνα με τα [11] και [14], αναπτύσσεται ένα τρισδιάστατο μοντέλων πορωδών μέσων, κατάλληλο για την εξομοίωση των πορωδών πετρωμάτων. Στο μοντέλο αυτό, το πορώδες μέσο θεωρείται ως ένα δίκτυο θαλάμων συνδεδεμένων με λαιμούς και προσεγγίζεται με ένα δίκτυο μοναδιαίων κελιών του τύπου σωλήνα με στένωση. 36

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.1 Αναπαράσταση μεμονωμένου κελιού [14] Το μοντέλο των πορωδών μέσων χρησιμοποιείται για την εξομοίωση της κίνησης μοναχικών γαγγλίων διαμέσου πορωδών πετρωμάτων και τον υπολογισμό χρήσιμων μεγεθών. Η ΕΦΑΡΜΟΓΗ Η εφαρμογή, το θεωρητικό υπόβαθρο της οποίας παρουσιάστηκε παραπάνω, προσομοιώνει την σταθερής κατάσταση ροής δύο φάσεων σε πορώδη μέσα, η οποία επιλύεται με την βασική ανάλυση δικτύων. Θεωρούμε μια αναλογία μεταξύ του πορώδους μέσου και ενός ηλεκτρικού κυκλώματος, όπου κάθε κελί παριστάνεται ως μια αντίσταση. Η επίλυση του προβλήματος γίνεται σταδιακά θεωρώντας σε κάθε βήμα μια ψευδοσταθερή κατάσταση. Το γραμμικό σύστημα που περιγράφει αυτή την ψευδοσταθερή κατάσταση, λύνεται με την μέθοδο της παραγοντοποίησης Cholesky (Cholesky Factorization), ενώ θα πρέπει να λάβουμε υπ' όψιν μας την μεγάλη αραιότητα του πίνακα. Οι τιμές της πιέσεως, με την σειρά τους χρησιμοποιούνται για τον υπολογισμό των στιγμιαίων ρυθμών ροής μέσω των κελιών και την αντίστοιχη ταχύτητα των μηνίσκων. Θεωρώντας οτι αυτές παραμένουν σταθερές για μικρό χρονικό διάστημα, μπορεί να γίνει ο υπολογισμός των νέων θέσεων των μηνίσκων. Η συγκεκριμένη διαδικασία επαναλαμβάνεται. 37

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Από την παραπάνω περιγραφή, γίνεται σαφές οτι η παραγοντοποίηση Cholesky, θα έχει κυρίαρχο ρόλο κατά την εκτέλεση των υπολογισμών. Κάνοντας δυναμική ανάλυση της εφαρμογής μέσω της διαδικασίας του profiling, τα αποτελέσματα της οποίας βλέπουμε στο παράρτημα B, βλέπουμε οτι η συνάρτηση που υλοποιεί την διαδικασία της παραγοντοποίησης Cholesky καταλαμβάνει περίπου το 4% του συνολικού χρόνου που απαιτεί η εφαρμογή και εκεί θα εστιάσουμε. Στην συνέχεια θα παρουσιάσουμε την διαδικασία της παραγοντοποίησης Cholesky, σε θεωρητικό επίπεδο, για έναν αλλά και περισσότερους επεξεργαστές. ΘΕΩΡΙΑ ΓΡΑΦΗΜΑΤΩΝ Πριν αναλύσουμε την μέθοδο παραγοντοποίησης Cholesky (Cholesky Factorization) θα πρέπει να κάνουμε μια μικρή εισαγωγή στην θεωρία των γραφημάτων, καθώς αυτά χρησιμοποιούνται στην διαδικασία επίλυσης ενός γραμμικού συστήματος με την μέθοδο αυτή. ΒΑΘΜΟΣ ΚΟΜΒΟΥ (DEGREE / VALENCY) Βαθμός ενός κόμβου του γραφήματος είναι ο αριθμός των δεσμών που φτάνουν σε αυτό. Εικόνα 3.2 - Γράφος στους κόμβους του οποίου σημειώνεται ο βαθμός τους[1] Στην προηγούμενη εικόνα ο κάθε κόμβος περιέχει τον βαθμό του. Στην περίπτωση όπου μια σύνδεση ξεκινάει από έναν κόμβο και καταλήγει στον ίδιο κόμβο τότε αυτό μετράει για δύο. Σε περίπτωση που έχουμε συγκεκριμένες τιμές στον βαθμό ενός κόμβου τότε έχουμε[1] : isolated vertex : κόμβος με βαθμό. [1] http://en.wikipedia.org/wiki/degree_(graph_theory) 38

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY leaf vertex : κόμβος με βαθμό 1. dominating vertex : ο βαθμός του κόμβου είναι n-1 σε γράφημα με n κόμβους. ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY (CHOLESKY FACTORIZATION) Έχουμε το ακόλουθο γραμμικό σύστημα Ax=b (3.1) Η επίλυση του παραπάνω συστήματος έχει κυρίαρχο ρόλο στα επιστημονικά προβλήματα και συναντάται συχνά σε αυτά. Γι αυτό έχουν αναπτυχθεί τρόποι επίλυσής τους που μετατρέπουν το παραπάνω πρόβλημα σε ένα ευκολότερο με την προϋπόθεση οτι πληρούνται κάποιες συνθήκες σχετικά με τον πίνακα Α. Η πιο γνωστή μέθοδος τέτοιου τύπου είναι η μέθοδος Gauss, η οποία ουσιαστικά μετατρέπει το παραπάνω πρόβλημα σε πρόβλημα τριγωνικών πινάκων που είναι πιο εύκολο να επιλυθούν. Οι μέθοδοι, όπως αυτή του Gauss λέγονται μέθοδοι LU παραγοντοποίησης (LU Factorization), και μία από αυτές είναι και η μέθοδος που εξετάζουμε. Προκειμένου να κάνουμε χρήση της μεθόδου της παραγοντοποίησης Cholesky, όπως αυτή παρουσιάζεται στα [8] και [1], θα πρέπει ο πίνακας Α να είναι ένας τετραγωνικός πίνακας n n, συμμετρικός και θετικά ορισμένος. Τα υπόλοιπα στοιχεία του συστήματος είναι τα γνωστά, δηλαδή το b είναι ένα γνωστό διάνυσμα μεγέθους n και x είναι το διάνυσμα το οποίο ψάχνουμε. Η μετατροπή του παραπάνω γραμμικού συστήματος σε ένα τριγωνικό σύστημα και η επίλυσή του περιλαμβάνει δύο βασικά βήματα. Αρχικά θα πρέπει να γίνει ο υπολογισμός του κάτω τριγωνικού πίνακα L, ο οποίος ονομάζεται παράγοντας Cholesky (Cholesky Factor), με βάση την σχέση A= L L T και στην συνέχεια έχουμε την τριγωνική επίλυση προκειμένου να υπολογίσουμε το διάνυσμα x με βάση τις επόμενες δύο σχέσεις Ly=b (3.2) και LT x= y (3.3) [1]http://en.wikipedia.org/wiki/Cholesky_decomposition 39

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Η επίλυση μπορεί να γίνει και με άνω τριγωνικούς πίνακες ωστόσο συνηθίζεται η χρήση των κάτω τριγωνικών πινάκων. Για τον υπολογισμό των στοιχείων του πίνακα L μπορούμε να δούμε το επόμενο παράδειγμα. Ας υποθέσουμε οτι ο πίνακας Α είναι ένας 3 3 πίνακας και πληρεί τις προϋποθέσεις που αναφέρθηκαν παραπάνω ( a11 a21 a31 A= a21 a 22 a 23 a31 a32 a33 ) (3.4) Επομένως με βάση την σχέση που συνδέει τον πίνακα A με τον πίνακα L έχουμε ( )( )( ) a11 a21 a31 l 11 l 11 l 21 l 31 T A= a21 a 22 a23 = l 21 l 22 l 22 l 23 =L L (3.5) a31 a32 a33 l 31 l 32 l 33 l 33 Άρα κάνοντας τον πολλαπλασιασμό έχουμε ( 2 l 11 l 21 l 11 l 21 l 11 2 2 l 21+ l 22 l 31 l 11 l 31 l 21+l 32 l 22 l 31 l 11 l 31 l 21+ l 32 l 22 2 31 2 32 l +l + l 2 33 ) (3.6) Επομένως, βάση των παραπάνω, για τον υπολογισμό των στοιχείων του διανύσματος Cholesky έχουμε τους επόμενους γενικούς τύπους[1] : για τα διαγώνια στοιχεία k 1 l kk = a kk l 2kj (3.7) j=1 για τα στοιχεία που βρίσκονται κάτω από την διαγώνιο ( l ik, οπου i> k ) k 1 l ik = 1 (a l l ) (3.8) l kk ik j =1 ij kj [1] http://en.wikipedia.org/wiki/cholesky_decomposition 4

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Επομένως με τους τύπους αυτούς γίνεται ο υπολογισμός των στοιχείων του διανύσματος Cholesky. Στην περίπτωση όπου ο πίνακας Α είναι μια αραιά μήτρα, δηλαδή πολλά από τα στοιχεία της είναι μηδενικά τότε έχουμε αρκετούς υπολογισμούς από αυτούς που παρουσιάστηκαν παραπάνω να ισούνται με μηδέν και άρα να είναι περιττοί. Αυτό όμως δεν σημαίνει οτι όποια στοιχεία στον πίνακα Α είναι μηδέν τα ίδια στοιχεία θα είναι μηδέν και στον πίνακα L. Τα στοιχεία αυτά, που είναι μηδενικά στον πίνακα Α και μη μηδενικά στον πίνακα L, ονομάζονται fill ή fill-in. Αυτά τα στοιχεία μας δημιουργούν κάποια προβλήματα στους υπολογισμούς. Όμως είναι δυνατόν να γίνει κάποια αναδιάταξη των στηλών του πίνακα Α με αποτέλεσμα την αλλαγή του πλήθους αυτών των στοιχείων. Μια τέτοια αλλαγή δεν θα επηρεάσει το τελικό αποτέλεσμα και αυτό διότι ο πίνακας μας είναι θετικά ορισμένος. Όμως η εύρεση μια τέτοιας αναδιάταξης είναι ένα πολύ δύσκολο και περίπλοκο πρόβλημα (NP - complete πρόβλημα). Υπάρχουν όμως συγκεκριμένοι αλγόριθμοι που έχουν αναπτυχθεί και προσφέρουν μια αποδοτική αναδιάταξη των στοιχείων του πίνακα Α. Με χρήση κάποιας αναδιάταξης των στηλών του πίνακα Α, δηλαδή κάποιου πίνακα μετάθεσης (permutation matrix), αλλάζουν κάπως τα βήματα της τριγωνικής επίλυσης ενώ πλέον η μέθοδος αναλύεται στα επόμενα βήματα, σύμφωνα με το [1]. Να σημειωθεί οτι ένας πίνακας μετάθεσης είναι ένας δυαδικός πίνακας με όλα τα στοιχεία της κάθε στήλης να είναι μηδέν πλην της γραμμής που είναι η νέα θέση της συγκεκριμένης στήλης. Περισσότερα θα αναφερθούν παρακάτω. 1. Ordering Εύρεση ενός πίνακα μετάθεσης P, με βασικό σκοπό ο πίνακας L του P A P T να έχει λιγότερα fill από αυτά του Α. 2. Symbolic Factorization Εύρεση της δομής του πίνακα L. Υπολογίζεται ποια στοιχεία του πίνακα είναι μη μηδενικά και ποια είναι μηδενικά. 3. Numeric Factorization Εδώ γίνεται ο αριθμητικός υπολογισμός των στοιχείων του πίνακα L για τον 41

ΚΕΦΑΛΑΙΟ 3 πίνακα ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY P A P T (3.9) 4. Triangular Solution Λύνουμε τις επόμενες γραμμικές εξισώσεις για την εύρεση του διανύσματος x που είναι και το ζητούμενο L y=p b (3.1) LT z = y (3.11) T x=p z (3.12) Στην συνέχεια θα παρουσιάσουμε συνοπτικά τα παραπάνω βήματα της διαδικασίας Cholesky. Ordering Όπως ήδη αναφέρθηκε παραπάνω, η συγκεκριμένη διαδικασία ακολουθείται προκειμένου να βρεθεί μια διαφορετική διάταξη των στοιχείων του πίνακα Α, με βασικό σκοπό την μείωση των στοιχείων fill, προκειμένου να μειώσουμε τους υπολογισμούς κατά την διαδικασία υπολογισμού του παράγοντα Cholesky L. Η διαδικασία αυτή είναι μια δύσκολη διαδικασία και χαρακτηρίζεται ως NP - complete πρόβλημα. Όμως υπάρχουν κάποιοι αλγόριθμοι που μπορούν να χρησιμοποιηθούν προκειμένου να βρεθεί μια ικανοποιητική νέα διάταξη, η οποία να μειώνει τον αριθμό των fill. Οι δύο πιο γνωστοί αλγόριθμοι που χρησιμοποιούνται, βασιζόμενοι στο [1], είναι αυτός του ελάχιστου βαθμού (minimum degree), ο οποίος χρησιμοποιείται σε συνεργασία με το γράφημα του πίνακα Α, και αυτός του ένθετου τεμαχισμού (nested dissection), ο οποίος χρησιμοποιεί επίσης το γράφημα, και έχει την λογική του διαίρει και βασίλευε. Στον αλγόριθμο του ελάχιστου βαθμού (minimum degree)[1] [2] αφαιρούμε σταδιακά όλους τους κόμβους του γραφήματος σε σειρά με βάση το ποιος έχει τον μικρότερο βαθμό (σχετικά με τον βαθμό ενός κόμβου έχουμε αναφερθεί παραπάνω). Όταν ένας κόμβος αφαιρείται από το γράφημα, οι κόμβοι που είναι γείτονες με τον κόμβο που αφαιρείται συνδέονται μεταξύ τους, αν δεν είναι ήδη συνδεδεμένοι. Σε περίπτωση που δύο κόμβοι ή περισσότεροι κόμβοι έχουν τον ίδιο βαθμό τότε υπάρχουν διάφοροι τρόποι για να διαλέξουμε ποιον κόμβο να αφαιρέσουμε και ένας από αυτούς είναι να διαλέξουμε στην τύχη ποιον θα αφαιρέσουμε. Η διαδικασία αυτή επαναλαμβάνεται [1] http://www.phy.ornl.gov/csep/la/node12.html [2] http://en.wikipedia.org/wiki/minimum_degree_algorithm 42

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY μέχρι την αφαίρεση όλων των κόμβων του γραφήματος. Η σειρά με την οποία αφαιρέθηκαν αποτελεί την νέα διάταξη του πίνακα Α. Το πρόβλημα με τον αλγόριθμο αυτό είναι οτι μπορεί να μην έχουμε νέα διάταξη, αλλά με τον τρόπο που θα γίνει η αφαίρεση των κόμβων, να έχουμε τελικά την ίδια διάταξη (ειδικά στην περίπτωση που γίνεται τυχαία η επιλογή του κόμβου που θα αφαιρεθεί όταν έχουμε δύο ή περισσότερους με τον ίδιο βαθμό). Να τονίσουμε επίσης οτι το γράφημα που θα δημιουργηθεί από τον πίνακα με την νέα διάταξη δεν θα αλλάξει την μορφή του γραφήματος, αλλά μόνο την σειρά των κόμβων σε αυτό. Στην πρώτη εικόνα που ακολουθεί βλέπουμε τα στοιχεία του πίνακα Α και L χωρίς να έχουμε εφαρμόσει κάποιον αλγόριθμο ενώ στην δεύτερη βλέπουμε τα στοιχεία των δύο πινάκων με χρήση του αλγορίθμου του ελάχιστου βαθμού. Εικόνα 3.3 Πίνακας Α και ο αντίστοιχος L χωρίς την εφαρμογή κάποιου αλγορίθμου για την αναδιάταξη των στοιχείων[1] [1] http://www.phy.ornl.gov/csep/la/node12.html 43

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.4 - Πίνακας Α και ο αντίστοιχος L με εφαρμογή του αλγορίθμου του ελάχιστου βαθμού [1] Από τις δύο παραπάνω εικόνες βλέπουμε οτι το γράφημα του πίνακα Α παραμένει ίδιο και αυτό που αλλάζει είναι η σειρά των κόμβων ενώ η δομή του πίνακα L είναι διαφορετική. Ο δεύτερος γνωστός αλγόριθμος που χρησιμοποιείται για αυτή την διαδικασία είναι αυτός του ένθετου τεμαχισμού (nested dissection). Σε αυτήν τη διαδικασία[1] [2], αρχικά γίνεται η επιλογή ενός συνόλου κάποιων κόμβων (ή κόμβου), το οποίο καλείται διαχωριστής (separator), και η αφαίρεση αυτών από το γράφημα το χωρίζει σε δύο ανεξάρτητα γραφήματα (ουσιαστικά κάνουμε επιλογή κάποιου διαχωριστή κόμβων, όπως αναφέρθηκε στην θεωρία των γραφημάτων). Στην συνέχεια οι κόμβους του γραφήματος αριθμούνται εκ νέου, ξεκινώντας από τα δύο υπογραφήματα και αφήνοντας για το τέλος τους κόμβους του διαχωριστή. Στην συνέχεια, η διαδικασία αυτή εφαρμόζεται στα δύο υπογραφήματα με τον ίδιο τρόπο μέχρι την στιγμή που αριθμηθούν όλοι οι κόμβοι. Όσο μικρότερο είναι το πλήθος των κόμβων στους διαχωριστές που επιλέγονται τόσο πιο αποτελεσματικός θα είναι ο αλγόριθμος ως προς τον αριθμό των fill, ενώ σε περίπτωση όπου τα υπογραφήματα είναι περίπου ίσα μεταξύ τους τότε το elimination tree που θα προκύψει θα είναι αρκετά ισορροπημένο (σχετικά με το elimination tree θα αναφερθούμε παρακάτω). [1] http://www.phy.ornl.gov/csep/la/node12.html [2] http://en.wikipedia.org/wiki/nested_dissection 44

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.5 - Πίνακας Α και ο αντίστοιχος L με εφαρμογή του αλγορίθμου του ένθετου τεμαχισμού[26] Τέλος πριν κλείσουμε αυτήν την ενότητα θα κάνουμε μια αναφορά στον αλγόριθμο μονά-ζυγά, (odd-even) βάση του οποίου οι κόμβοι με μονό αριθμό τοποθετούνται πριν από αυτούς με ζυγό αριθμό και η διαδικασία αυτή επαναλαμβάνεται σε κάθε υποσύνολο που δημιουργείται. Αυτός ο αλγόριθμος δεν προσφέρεται για την μείωση των fill σε μία αραιή μήτρα όμως δίνει την δυνατότητα για καλύτερο παραλληλισμό [1]. Εικόνα 3.6 - Πίνακας Α και ο αντίστοιχος L με εφαρμογή του αλγορίθμου μονά-ζυγά [1] Μετά από την εφαρμογή κάποιου από τους παραπάνω αλγορίθμους, προκύπτει μια νέα διάταξη του πίνακα Α. Τόσο για τον υπολογισμό του νέου πίνακα Α όσο και για την τριγωνική επίλυση μας είναι απαραίτητος ένας πίνακας ο οποίος ονομάζεται πίνακας μετάθεσης (permutation matrix). Ο πίνακας αυτός[2] είναι ένας δυαδικός πίνακας ο οποίος έχει μόνο ένα [1] http://www.phy.ornl.gov/csep/la/node12.html [2] http://en.wikipedia.org/wiki/permutation_matrix 45

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY 1 ανά στήλη και όλα τα υπόλοιπα στοιχεία του. Η θέση στην οποία μπαίνει η μονάδα είναι η νέα θέση της στήλης αυτής. Δηλαδή αν η στήλη 2 έχει το 1 στην γραμμή 4 αυτό σημαίνει οτι στον νέο πίνακα Α η στήλη 4 θα είναι στην στήλη 2. Ο πίνακας ο οποίος προκύπτει μετά από την αναδιάταξή θα είναι επίσης συμμετρικός και θετικά ορισμένος. Εικόνα 3.7 - Πίνακας μετάθεσης[1] Στην εικόνα 3.6, τα κόκκινα κουτάκια αναπαριστούν την θέση των μονάδων του πίνακα ενώ τα λευκά κουτάκια είναι τα μηδενικά στοιχεία του πίνακα αυτού. Αν το 1 είναι στην διαγώνιο του πίνακα τότε η στήλη δεν θα αλλάξει θέση όπως φαίνεται και στην εικόνα για την στήλη 3. Symbolic Factorization Σε αυτό το βήμα, με βάση το [1], βρίσκουμε την δομή του πίνακα L ενώ βάση αυτής της δομής δημιουργούμε το δένδρο εξάλειψης (elimination tree). Το δένδρο εξάλειψης δεν έχει σημαντικό ρόλο στον σειριακό αλγόριθμο, όμως έχει ουσιώδη σημασία στον υλοποίηση του παράλληλου αλγορίθμου αφού αποτελεί ένα είδος γραφήματος εξάρτησης δεδομένων (data dependency graph). Ουσιαστικά σε αυτό το βήμα θα βρούμε ποια θα είναι τα στοιχεία που δεν είναι μηδέν και θα πρέπει να ασχοληθούμε μαζί τους στο επόμενο βήμα που είναι η αριθμητικές τιμές των στοιχείων του πίνακα L. Ουσιαστικά το συγκεκριμένο βήμα παρουσιάζεται συνοπτικά σε μία μόνο μαθηματική σχέση, η οποία εμφανίζεται στο [3] : [1] http://en.wikipedia.org/wiki/permutation_matrix 46

ΚΕΦΑΛΑΙΟ 3 Ω (L i)=ω (A i ) ( ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY k <i {Ω ( L k ) mk =i}) {1,2,...,i 1} (3.13) Ω (.) τα μη μηδενικά στοιχεία A τα στοιχεία κάτω απο την διαγώνιο Στην ουσία η παραπάνω μαθηματική έκφραση μας λέει οτι η δομή της στήλης i του πίνακα L δίνεται από την δομή της στήλης i του πίνακα Α (χωρίς βέβαια να λαμβάνεται υπ' όψιν το κομμάτι της στήλης άνω της διαγωνίου) μαζί με την δομή των στηλών του πίνακα L για τις οποίες ισχύει οτι το πρώτο μη διαγώνιο στοιχείο που είναι μη μηδενικό είναι στην γραμμή i. Με τον τρόπο αυτό λοιπόν βρίσκουμε την δομή του πίνακα L. Με βάση τώρα την δομή του πίνακα L, μπορούμε να δημιουργήσουμε το δένδρο εξάλειψης. Για την δημιουργία του δένδρου αυτού, σαν πρώτο βήμα πρέπει να βρούμε τον γονέα της κάθε στήλης. Ο γονέας της κάθε στήλης είναι το πρώτο στοιχείο, κάτω από την διαγώνιο, που δεν είναι μηδέν, διαφορετικά μπαίνει η ίδια η στήλη. Αυτό συμβολίζεται ως parent[j], όπου j είναι η στήλη. Όπως ήδη αναφέραμε παραπάνω το συγκεκριμένο δένδρο αποτελεί βασικό κομμάτι του παράλληλου αλγορίθμου, όχι όμως για τον σειριακό αλγόριθμο και επομένως σχετικά με αυτό θα αναφερθούμε στην συνέχεια. Numeric Factorization Εδώ ουσιαστικά έχουμε τον υπολογισμό της αριθμητικής τιμής των στοιχείων που βρήκαμε πριν ως μη μηδενικά. Για το συγκεκριμένο βήμα έχουμε τρεις βασικούς αλγορίθμους που χρησιμοποιούνται και παρουσιάζονται στα [1], [2], [3] και [1]. Σε αυτή την διαδικασία οι αλγόριθμοι που χρησιμοποιούνται, χρησιμοποιούν τρεις δείκτες και ανάλογα με το ποιος είναι στο εξωτερικό βρόχο, έχουμε και τις διαφοροποιήσεις στους αλγορίθμους. Η διαφοροποίηση βρίσκεται στον τρόπο με τον οποίο θα προσπελαστούν τα στοιχεία του πίνακα Α. Submatrix Cholesky : Σε αυτή την περίπτωση στον εξωτερικό κόμβο μπαίνει ο δείκτης k Column Cholesky : Σε αυτή την περίπτωση στον εξωτερικό κόμβο μπαίνει ο δείκτης j Row Cholesky : Σε αυτή την περίπτωση στον εξωτερικό κόμβο μπαίνει ο δείκτης 47

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY i Στην εικόνα 3.7, βλέπουμε τον τρόπο με τον οποίο ο κάθε ένας από τους παραπάνω αλγορίθμους επεξεργάζεται τα στοιχεία στην μνήμη. Εικόνα 3.8 Προσπέλαση στοιχείων κατά την διαδικασία των υπολογισμών[1] Εικόνα 3.9 Ο αλγόριθμος Submatrix Cholesky[1] [1] http://www.phy.ornl.gov/csep/la/node12.html 48

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Σύμφωνα με τον αλγόριθμο Submatrix Cholesky, γίνεται σάρωση όλων των στηλών του πίνακα Α και αρχικά βρίσκουμε το διαγώνιο στοιχείο και στην συνέχεια βρίσκουμε όλα τα επόμενα στοιχεία του πίνακα με βάση τον τύπο (3.8). Στον τύπο αυτό υπάρχει η διαίρεση με το διαγώνιο στοιχείο, το οποίο υλοποιείται στον πρώτο βρόχο επανάληψης και στην συνέχεια, στον δεύτερο και τον τρίτο βρόχο επανάληψης, βρίσκουμε το γινόμενο των στοιχείων και τα αφαιρούμαι. Εικόνα 3.1 Ο αλγόριθμος Column Cholesky[1] Εδώ, σε αντίθεση με τον προηγούμενο αλγόριθμο, τα πράγματα συμβαίνουν με διαφορετική σειρά. Σαν πρώτο βήμα είναι ο υπολογισμός των γινομένων των στοιχείων του πίνακα L και στην συνέχεια γίνεται η εύρεση του διαγώνιου στοιχείου και η διαίρεση με αυτό. Παρατηρούμε και στους δύο αλγορίθμους οτι υπάρχουν κάποια κομμάτια κώδικα τα οποία είναι ίδια. Αυτά αποτελούν δύο βασικές συναρτήσεις στην υλοποίηση του numeric factorization της μεθόδου παραγοντοποίηση Cholesky. Οι δύο αυτές συναρτήσεις είναι η CDIV και CMOD και είναι οι επόμενες, όπως ορίζονται στα [1] και [3] 49

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.11 Ο αλγόριθμος της συνάρτησης Εικόνα 3.12 Ο αλγόριθμος της συνάρτησης CDIV[1] CMOD[1] Η πρώτη συνάρτηση (CDIV) διαιρεί το κάθε στοιχείο της στήλης j με την τετραγωνική ρίζα του διαγώνιου στοιχείου, ενώ η δεύτερη συνάρτηση (CMOD) αλλάζει τα στοιχεία της στήλης j πολλαπλασιάζοντας με αυτά της στήλης k. Τις δύο αυτές συναρτήσεις θα συναντήσουμε και στην υλοποίηση της διπλωματικής εργασίας. Triangular Solution Στο τέταρτο και τελευταίο βήμα της μεθόδου έχουμε την τριγωνική λύση με σκοπό την εύρεση του διανύσματος x. Αφού έχει υπολογιστεί ο πίνακας L και έχουμε τον πίνακα μετάθεσης, μπορούμε να προχωρήσουμε στους υπολογισμούς που απαιτούνται. Οι υπολογισμοί αυτοί είναι οι ακόλουθοι L y=p b (3.14) T L z = y (3.15) x=p T z (3.16) Αρχικά υπολογίζουμε ένα βοηθητικό διάνυσμα y σύμφωνα με την σχέση (3.14), το οποίο το χρησιμοποιούμε προκειμένου να βρεθεί ένα δεύτερο βοηθητικό διάνυσμα z, το οποίο με την σειρά του χρησιμοποιείται για την εύρεση του τελικού διανύσματος x το οποίο είναι και το ζητούμενο. ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY ΣΕ ΠΟΛΛΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ Για την επίλυση του γραμμικού συστήματος με την μέθοδο της παραγοντοποίησης Cholesky σε πολλούς επεξεργαστές ταυτόχρονα, τα πράγματα δεν αλλάζουν και πάρα πολύ. Τα βήματα που ακολουθούνται μέχρι την τελική επίλυση είναι σχεδόν ίδια με την διαφορά οτι προστίθεται ένα επιπλέον βήμα, αυτό της αντιστοίχησης των στηλών στους επεξεργαστές. Για το συγκεκριμένο βήμα είναι απαραίτητη η χρήση του δένδρου εξάλειψης που αναφέρθηκε παραπάνω και αυτό διότι δείχνει τις εξαρτήσεις μεταξύ των 5

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY στηλών του πίνακα. Συνοπτικά λοιπόν η επίλυση περιλαμβάνει τα ακόλουθα βήματα, σύμφωνα με το [1] : 1. Ordering 2. Mapping 3. Symbolic factorization 4. Numeric factorization 5. Triangular solution Στην γενική περίπτωση ισχύουν όλα όσα έχουμε ήδη αναφέρει παραπάνω, όμως κάποια πράγματα αλλάζουν με σκοπό να γίνει ο διαμοιρασμός των υπολογισμών στους επεξεργαστές. Ordering Η διαφορά με τον σειριακό αλγόριθμο είναι οτι πλέον σκοπός του βήματος αυτού δεν είναι η μείωση των fill, αλλά η δημιουργία όσον το δυνατόν περισσότερου παραλληλισμού. Αυτό μπορεί να εκτιμηθεί μέσω της δομής του δένδρου εξάλειψης, καθώς βάση αυτού γίνεται ο διαμοιρασμός στους επεξεργαστές. Παρά το γεγονός οτι ο σκοπός του βήματος αλλάζει, οι αλγόριθμοι δεν αλλάζουν και είναι οι ίδιοι που χρησιμοποιούνται και στην περίπτωση του σειριακού αλγορίθμου, καθώς προσφέρουν ικανοποιητικά αποτελέσματα. Στις επόμενες εικόνες βλέπουμε τους αλγορίθμους του ελάχιστου βαθμού και του ένθετου τεμαχισμού πως επιδρούν στην δομή του πίνακα L καθώς επίσης και στο αντίστοιχο δένδρο εξάλειψης 51

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.13 Αρχική δομή πίνακα Α και L καθώς και το δένδρο εξάλειψης που προκύπτει[1] Εικόνα 3.14 Δομή πίνακα Α και L καθώς και το δένδρο εξάλειψης που προκύπτει, μετά την εφαρμογή του αλγορίθμου του ελάχιστου βαθμού[1] 52

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.15 Δομή πίνακα Α και L καθώς και το δένδρο εξάλειψης που προκύπτει, μετά την εφαρμογή του αλγορίθμου του ένθετου τεμαχισμού[1] Mapping Σε αυτό το βήμα σκοπός είναι η ανάθεση υπολογισμών στους επεξεργαστές. Ο κάθε επεξεργαστής, μετά από αυτή την διαδικασία θα είναι υπεύθυνος για τους υπολογισμούς κάποιων στηλών του πίνακα Α. Η ανάθεση θα πρέπει να γίνει αφενός προσφέροντας μια εξισορρόπηση στους υπολογισμούς, δηλαδή οι επεξεργαστές να έχουν τον ίδιο φόρτο εργασία, αφετέρου να μην είναι αναγκαία η αποστολή πολλών μηνυμάτων μεταξύ των επεξεργαστών καθώς, όπως έχουμε αναφέρει σε προηγούμενο κεφάλαιο, είναι ένας σημαντικός παράγοντας καθυστέρησης. Οι αλγόριθμοι που χρησιμοποιούνται σε αυτό το βήμα είναι αυτός του subtree to subcube, όπου κάθε επεξεργαστής αναλαμβάνει ένα υποδένδρο του δένδρου εξάλειψης, και αυτός του wrap mapping, όπου ξεκινώντας από κάτω προς τα πάνω αναθέτουμε τις στήλες σε διαφορετικούς επεξεργαστές. Οι παραπάνω αλγόριθμοι φαίνονται σχηματικά στο επόμενο σχήμα 53

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.16 subtree to subcube[1] 54

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.17 wrap mapping[3] Symbolic factorization Σκοπός του βήματος αυτού είναι η δημιουργία της δομής του πίνακα L χωρίς να αλλάζει κάτι σε σχέση με αυτά που αναφέρθηκαν παραπάνω. Δεν παρουσιάζεται κάποιος συγκεκριμένος αλγόριθμος για την υλοποίηση αυτού του βήματος παράλληλα. Numeric factorization Σε αυτό το βήμα γίνεται ο υπολογισμός των τιμών των μη μηδενικών στοιχείων του πίνακα L. Προηγουμένως παρουσιάστηκαν κάποιοι αλγόριθμοι που υπολογίζουν τις τιμές των στοιχείων, οι οποίοι όμως δεν μπορούν να χρησιμοποιηθούν εδώ. Οι αλγόριθμοι που μπορούν να υλοποιήσουν την συγκεκριμένη διαδικασία παράλληλα είναι τρεις, ο fan - in αλγόριθμος, ο fan - out αλγόριθμος και ο multifrontal αλγόριθμος, σύμφωνα με το [1]. Ως βασικό συστατικό των δύο πρώτων αλγορίθμων είναι οι δύο συναρτήσεις που 55

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY παρουσιάστηκαν παραπάνω, δηλαδή η CDIV και η CMOD. Εικόνα 3.18 Fan out αλγόριθμος [2] Ο αλγόριθμος fan out, ο οποίος παρουσιάζεται στο [2], χωρίζεται σε δύο μέρη, το πρώτο στο οποίο γίνεται ένας έλεγχος για τον αριθμό των μη μηδενικών στοιχείων της στήλης και αν αυτός είναι μηδενικός τότε εφαρμόζεται η συνάρτηση CDIV ενώ στο δεύτερο κομμάτι του γίνονται όλοι οι υπόλοιποι υπολογισμοί κανονικά. Μετά από την εφαρμογή της συνάρτησης CDIV, γίνεται αποστολή της στήλης σε όσους επεξεργαστές χρειάζονται αυτή την στήλη. 56

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY Εικόνα 3.19 Fan in αλγόριθμος [1] Ο αλγόριθμος fan in, όπως παρουσιάζεται στο [1], με την σειρά του είναι βασισμένος στον αλγόριθμο column Cholesky και μοιάζει αρκετά με την διαδικασία του παράλληλου πολλαπλασιασμού, όπου κάθε επεξεργαστής κάνει τοπικά πράξεις μεταξύ των στηλών που έχει αναλάβει, μειώνοντας τα δεδομένα σε έναν αριθμό και αφού τελειώσει στέλνει τα στοιχεία που έχει υπολογίσει στους υπόλοιπους επεξεργαστή όπου γίνεται η ίδια διαδικασία. Triangular solution Πέμπτο και τελευταίο βήμα της διαδικασίας είναι η τριγωνική λύση με τις εξισώσεις που έχουν αναφερθεί παραπάνω. Εδώ δεν παρουσιάζεται κάποιος συγκεκριμένος αλγόριθμος, όμως υπάρχουν κάποιες προσεγγίσεις για την παράλληλη λύση του προβλήματος. Μια από αυτές υλοποιεί την τριγωνική λύση με μία διαδικασία που είναι ίδια με αυτή της μεθόδου της παραγοντοποίησης Cholesky, όπως δείχνεται στο [5]. Μια 57

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY διαφορετική προσέγγιση είναι αυτή του απλού παράλληλου πολλαπλασιασμού ενός πίνακα με ένα διάνυσμα. 58

ΚΕΦΑΛΑΙΟ 3 ΡΕΥΣΤΟΜΗΧΑΝΙΚΗ ΚΑΙ ΠΑΡΑΓΟΝΤΟΠΟΙΗΣΗ CHOLESKY 59

ΚΕΦΑΛΑΙΟ 4 : ΥΛΟΠΟΙΗΣΗ ΣΚΟΠΟΣ Στο κεφάλαιο αυτό θα γίνει αναλυτική παρουσίαση της υλοποίησης της μεθόδου παραγοντοποίησης Cholesky για συστήματα κατανεμημένης μνήμης με την χρήση του πρωτοκόλλου MPI. Η ανάλυση της υλοποίησης θα στηριχθεί στην θεωρία που παρουσιάστηκε στο κεφάλαιο 4, η οποία αποτέλεσε θεμέλιο στην διαδικασία δημιουργίας του παράλληλου αλγορίθμου.

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ ΕΙΣΑΓΩΓΗ Η διαδικασία της υλοποίησης του παράλληλου αλγορίθμου για την επίλυση γραμμικών συστημάτων με την μέθοδο της παραγοντοποίησης Cholesky παρουσιάστηκε θεωρητικά στο προηγούμενο κεφάλαιο. Εκεί είδαμε την ανάπτυξη της επίλυσης του συγκεκριμένου προβλήματος σε πέντε βήματα. Αρχικά θα γίνει προσπάθεια για την εφαρμογή της θεωρίας όπως παρουσιάστηκε εφαρμόζοντας τα τέσσερα από τα θεωρητικά βήματα και αυτά είναι 1. Δημιουργία νέας διάταξης των στηλών του πίνακα Α (Reorder) 2. Ανάθεση στηλών του πίνακα Α στους επεξεργαστές (Mapping) 3. Υπολογισμός του πίνακα L (Numeric Factorization) 4. Εύρεση του διανύσματος x (Triangular Solution) Αυτή θα είναι η πρώτη έκδοση. Για λόγους που θα δείξουμε στο επόμενο κεφάλαιο, αυτό της πειραματικής μελέτης, θα υλοποιήσουμε και μία δεύτερη υλοποίηση του παράλληλου αλγορίθμου χρησιμοποιώντας τα τρία από τα παραπάνω βήματα 1. Ανάθεση στηλών του πίνακα Α στους επεξεργαστές (Mapping) 2. Υπολογισμός του πίνακα L (Numeric Factorization) 3. Εύρεση του διανύσματος x (Triangular Solution) Η εφαρμογή θα πρέπει αφενός μεν να δίνει σωστά αποτελέσματα αφετέρου δε να τα δίνει σε ταχύτερο χρόνο ώστε να έχει νόημα η κατανεμημένη επεξεργασία. Γι αυτό τον λόγο γίνεται και η δεύτερη έκδοση του παράλληλου αλγορίθμου χωρίς να γίνεται πιστή μεταφορά της θεωρίας, αλλά ορισμένα τμήματα είτε παραλείπονται είτε ενσωματώνονται σε άλλες διαδικασίες. Από τις n διεργασίες που θα αναλάβουν την επίλυση του προβλήματος, μια εξ αυτών δεν θα συμμετέχει στην διαδικασία των υπολογισμών, αλλά θα είναι υπεύθυνη για την αποστολή των δεδομένων όποτε αυτό χρειάζεται, την συλλογή αυτών, το συντονισμό της όλης διαδικασίας και γενικότερα διαδικασιών που δεν μπορούν να εκτελεστούν παράλληλα ή είναι προαπαιτούμενες για τον καταμερισμό των εργασιών. Οι υπόλοιπες 62

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ διεργασίες αναλαμβάνουν να εκτελέσουν τα παραπάνω βήματα της διαδικασίας για τις στήλες του πίνακα Α που είναι υπεύθυνες και τους έχουν ανατεθεί από την κεντρική διεργασία. Αυτό θα ισχύει και στις δύο υλοποιήσεις. Τα δεδομένα αποθηκεύονται στην μνήμη σε μορφή αραιάς μήτρας, δηλαδή για το κάθε κελί του πίνακα που περιέχει μη μηδενικό στοιχείο, αποθηκεύεται η τιμή του, η γραμμή στην οποία βρίσκεται και η στήλη στην οποία βρίσκεται. Όμως, οι αλγόριθμοι που χρησιμοποιούνται στην μέθοδο Cholesky, προσθέτουν και αφαιρούν συνεχώς στοιχεία από τον πίνακα. Επίσης θα μπορούσαμε να οργανώσουμε κάπως τα δεδομένα, ώστε να κερδίσουμε λίγο χρόνο από κάποιες επαναλήψεις κατά την διάρκεια των αναζητήσεων στοιχείων. Γι αυτό τα δεδομένα οργανώνονται σε μορφή διασυνδεδεμένης λίστας, κάθε στοιχείο της οποίας περιέχει τα παραπάνω στοιχεία, ενώ ορίζουμε μία λίστα για κάθε στήλη του πίνακα Α. Με τον τρόπο αυτό πετυχαίνουμε εύκολη περιήγηση μεταξύ των στηλών του πίνακα Α. Στην συνέχεια παρουσιάζεται η λογική και ο τρόπος υλοποίησης της μεθόδου παραγοντοποίησης Cholesky με χρήση ψευδοκώδικα και διαγραμμάτων ροής για ευκολότερη κατανόηση. Αρχικά θα παρουσιαστεί η πρώτη υλοποίηση, ενώ στην συνέχεια επισημαίνονται οι διαφοροποιήσεις που έγιναν στην δεύτερη υλοποίηση. Στο ΠΑΡΑΡΤΗΜΑ Δ βρίσκεται όλος ο κώδικας της εφαρμογής ανεπτυγμένος σε FORTRAN και για τις δύο υλοποιήσεις. ΠΡΩΤΗ ΥΛΟΠΟΙΗΣΗ ΒΗΜΑ 1 : ΕΥΡΕΣΗ ΝΕΑΣ ΔΙΑΤΑΞΗΣ ΤΟΥ ΠΙΝΑΚΑ Α Αυτό είναι το σημαντικότερο βήμα, καθώς η διάταξη των μη μηδενικών στοιχείων του πίνακα Α καθορίζουν το επίπεδο της παράλληλης επεξεργασίας. Ανάλογα με την θέση τους δηλαδή, κάποιες στήλης μπορούν να υπολογίσουν τα στοιχεία τους χωρίς να περιμένουν να τελειώσουν οι υπολογισμοί σε όλες τις προηγούμενες, όπως συμβαίνει στον σειριακό αλγόριθμο, και με τον τρόπο αυτό μπορούμε να λύσουμε το πρόβλημα παράλληλα, με μικρές αναμονές. Έτσι λοιπόν, γίνεται σαφές, οτι η παράσταση των μη μηδενικών στοιχείων του πίνακα Α παίζει πολύ σημαντικό ρόλο στο επίπεδο παραλληλοποίησης και άρα στην ταχύτητα του αλγορίθμου. Για την εύρεση της νέας διάταξης του πίνακα Α, πρόβλημα που θεωρείται NP - complete, θα χρησιμοποιηθεί ο αλγόριθμος του ελάχιστου βαθμού που αναφέρθηκε και στο προηγούμενο κεφάλαιο. Το 63

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ βήμα αυτό θα χωριστεί σε δύο κομμάτια, το πρώτο θα ορίσει τις αναθέσεις των στηλών, ενώ το δεύτερο θα βρει την νέα διάταξη του πίνακα Α με την χρήση του αλγορίθμου του ελάχιστου βαθμού. ΒΗΜΑ 1.1 : ΔΙΑΜΟΙΡΑΣΜΟΣ ΤΩΝ ΣΤΗΛΩΝ ΤΟΥ ΠΙΝΑΚΑ Α Στο πρώτο κομμάτι του πρώτου βήματος, η κεντρική διεργασία, αναλαμβάνει τον διαμοιρασμό των στηλών του πίνακα Α στις υπόλοιπες διεργασίες προκειμένου να ξεκινήσει η διαδικασία για την εύρεση της νέας διάταξης. Σε αυτήν την πρώτη ανάθεση στηλών (θα ξαναγίνει ανάθεση στηλών μετά την εύρεση της νέας διάταξης), δεν χρειάζεται να γίνει η ανάθεση με συγκεκριμένο τρόπο, γι αυτό στέλνουμε τις στήλες με την σειρά. Το μόνο που πρέπει να προσέξουμε είναι στην περίπτωση που οι στήλες δεν διαμοιράζονται ακριβώς στις διεργασίες. Τότε, κάποιες από τις διεργασίες (συγκεκριμένα όσο είναι το υπόλοιπο της διαίρεσης των στηλών με τον αριθμό των διεργασιών) αναλαμβάνουν μία στήλη παραπάνω. Επομένως η κεντρική διεργσία στέλνει στις υπόλοιπες την αρχική και τη τελική στήλη από αυτές που θα αναλάβουν και έπειτα τους στέλνει τα στοιχεία αυτών των στηλών. Εικόνα 4.1 Διάγραμμα ροής για την διαδικασία ανάθεσης στηλών από την κεντρική διεργασία.!rank is id of processes!size is the total number of processes IF (rank == ) THEN 64

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ k=n/(size-1) l=mod(n,size-1) c= DO i=1,size-1 IF (l>) SEND first, is c, and last column, is c+k, to is c+k, to process i c_start=(c*n)+1 c_end=(k+1)*n SEND elements of columns to process i c=c+k+1 l=l-1 ELSE SEND first, is c, and last column, process i c_start=(c*n)+1 c_end=(k-1)*n SEND elements of columns to process i c=c+k ELSE RECEIVE first and last column from root RECEIVE columns elements Eικόνα 4.2 Ψευδοκώδικας του βήματος 1.1 65

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Αρχικά, λοιπόν, ελέγχουμε το υπόλοιπο της διαίρεσης του αριθμού των στηλών με τον αριθμό των διεργασιών που αναλάβουν τους υπολογισμούς προκειμένου να δούμε αν θα χρειαστεί κάποιες απο αυτές να πάρουν κάποια στήλη παραπάνω. Στην συνέχεια, γίνεται ο υπολογισμός της πρώτης και της τελευταίας στήλης που θα αναλάβει η κάθε διεργασία, με την βοήθεια των μεταβλητών c και k. Έπειτα γίνεται αποστολή στην κάθε διεργασία το αποτέλεσμα αυτών των υπολογισμών. Τέλος, η κεντρική διεργασία, που είναι και κάτοχος του πίνακα Α, βρίσκει τα στοιχεία που χρειάζεται να στήλη, βάση των προηγούμενων υπολογισμών και στέλνει όλες τις στήλες στις αντίστοιχες διεργασίες. Μετά το πέρας αυτής της διαδικασίας, η κάθε διεργασία έχει τα δεδομένα που χρειάζεται για να ξεκινήσει τον αλγόριθμο του ελάχιστου βαθμού. ΒΗΜΑ 1.2 : ΕΥΡΕΣΗ ΝΕΑΣ ΔΙΑΤΑΞΗΣ ΠΙΝΑΚΑ Α ΑΛΓΟΡΙΘΜΟΣ ΕΛΑΧΙΣΤΟΥ ΒΑΘΜΟΥ Μετά τον διαμοιρασμό των στηλών του πίνακα Α, ξεκινάει ο αλγόριθμος του ελάχιστου βαθμού για την αναδιοργάνωση του πίνακα Α. Το αποτέλεσμα αυτού του βήματος είναι ο λεγόμενος πίνακας μετάθεσης (permutation matrix), που δηλώνει την νέα οργάνωση του πίνακα Α. Λόγω του μεγάλου μεγέθους του πίνακα Α και του τρόπου που δουλεύει ο αλγόριθμος του ελάχιστου βαθμού, θα πρέπει να γίνει χρήση λιστών ως δομή δεδομένων αποθήκευσης των στοιχείων του πίνακα Α, προκειμένου να είναι εύκολη η αφαίρεση και η προσθήκη νέων στοιχείων στον πίνακα. Επομένως, μετά την λήψη των στοιχείων του πίνακα Α από την κεντρική διεργασία, δημιουργούμε την δομή της λίστας που αναπαριστά τις στήλες του πίνακα Α. Κάθε στοιχείο της λίστας, περιέχει την τιμή του κελιού και την θέση του στον πίνακα. Επομένως τα μη μηδενικά στοιχεία παραλείπονται προκειμένου να γίνει εξοικονόμηση χώρου στην μνήμη. Παράλληλα, κατά την δημιουργία της δομής δεδομένων, υπολογίζουμε και τον βαθμό της κάθε στήλης, δηλαδή τον αριθμό των μη μηδενικών στοιχείων της, που αποτελεί την βάση του αλγορίθμου μας. Ο αλγόριθμος του ελάχιστου βαθμού, επιλέγει τον κόμβο με τον μικρότερο βαθμό από το γράφημα του πίνακα Α, τον διαγράφει και έπειτα προσθέτει ακμές στους γείτονές του που δεν είναι συνδεδεμένοι μεταξύ τους. Προκειμένου να εφαρμοστεί αυτός ο αλγόριθμος παράλληλα, η κάθε διεργασία βρίσκει τον κόμβο με τον μικρότερο βαθμό, από αυτούς που έχει αναλάβει και στέλνει τον βαθμό του στην κεντρική διεργασία. Η 66

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ κεντρικής διεργασία συλλέγει αυτά τα δεδομένα από κάθε διεργασία και με την σειρά της βρίσκει την διεργασία που της έστειλε τον μικρότερο βαθμό, δηλαδή βρίσκει τον μικρότερο από τους μικρότερους βαθμούς. Αφού γίνει η επιλογή του μικρότερου βαθμού, η κεντρική διεργασία, ενημερώνει τις υπόλοιπες για την επιλογή της. Επίσης σημειώνει τον κόμβο που επιλέχθηκε προκειμένου να δημιουργήσει τον μετάθεσης. Στην συνέχεια, η διεργασία που έχει τον κόμβο με τον μικρότερο βαθμό, θα πρέπει να στείλει σε όλες τις άλλες τους γείτονές του προκειμένου να γίνουν οι απαραίτητες προσθήκες νέων γειτόνων για να συνεχίσει η διαδικασία. Πριν την αποστολή του κόμβου, δηλαδή της στήλης με τα λιγότερα μη μηδενικά στοιχεία, η λίστα μετατρέπεται σε πίνακα εφόσον το openmpi δεν παρέχει την δυνατότητα αποστολής λίστας. Η όλη διαδικασία στις διεργασίες κρατάει έως ότου επιλεγούν όλοι οι κόμβοι που έχει αναλάβει. 67

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Εικόνα 4.3 Διάγραμμα ροής για τον αλγόριθμο που εκτελείται στην κεντρική διεργασία!mda_fin(size) is a counter for how many vertices have been selected!from a process!permutation(n) and permutationt(n) are permutation matrix and its!inversion matrix mda_fin= permutation= permutationt= 68

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ DO j=1,n DO i=1,size-1 IF (process i has columns) THEN RECEIVE minimum degree from process i na put it to allminde(i) ELSE allminde(i)=n+1 Find the minimum degree from the received DO i=1,size-1 IF (process i has columns) THEN SEND process rank who has minimum degree mda_fin(process with minimum degree vertex)=mda_fin(minrank(1))+1 RECEIVE vertex number with minimum degree and put it to permutationt matrix permutation(permutationt(j))=j 69

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Eικόνα 4.4 Ψευδοκώδικας για το βήμα 1.2 που εκτελείται στην κεντρική διεργασία Εικόνα 4.5 Διάγραμμα ροής για τον αλγόριθμο που εκτελείται στις υπόλοιπες διεργασίες!deg(n) is an array where stored the degrees of process's vertices!minde(2) is an array where stored vertex number and its degree!mycoldel is a counter for deleted vertices mycoldel= DO WHILE(mycoldel /= total number of process's vertices) Find which vertex has the minimum degree 7

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ minde(1)=vertex number minde(2)=deg(minde(1)) SEND minde(2) to root process RECEIVE the process's rank who has the vertex with minimum degree IF (rank == the process's rank who has the vertex with minimum degree) THEN SEND vertex number to root process Convert list to array delete_column mycoldel=mycoldel+1 DO i=,size-1 IF (i /= rank) THEN SEND delete_column to process i IF (mycoldel /= total number of process's vertices) THEN RECEIVE delete_column vertex with minimum degree 71 from process who has the

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ DO i=,(total number of vertices)-mycoldel IF ( delete_column(column i of process) /= ) DO WHILE list has elements IF (delete_column(list element%row) == ) THEN temp_deg=temp_deg+1 delete_column(list element %row)=1 list element=>list element%next deg(i) = delete_column degree + temp_deg - 1 Remake list of column Eικόνα 4.6 Ψευδοκώδικας για το βήμα 1.2 που εκτελείται στις υπόλοιπες διεργασίες Το αποτέλεσμα της διαδικασίας αυτής, είναι ένα διάνυσμα μεγέθους όσο και το πλήθος των στηλών του πίνακα Α που σημειώνονται οι μετατοπίσεις των στηλών. Αυτό αρκεί καθώς ο πίνακας μετάθεσης, όπως αναφέρθηκε προηγούμενα, είναι ένας δυαδικός πίνακας. Επίσης, δημιουργείται και ο ανάστροφος πίνακας ( P T ) που μας είναι επίσης χρήσιμος. 72

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Το βήμα αυτό ολοκληρώνεται με την αποστολή του πίνακα μετάθεσης σε όλες τις διεργασίες. ΒΗΜΑ 2 : ΝΕΑ ΑΝΤΙΣΤΟΙΧΙΣΗ ΣΤΗΛΩΝ ΣΤΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ Με την εύρεση της νέας δομής του πίνακα Α, αρχικά θα πρέπει να ξαναφτιάξουμε τον πίνακα Α και στην συνέχεια να αντιστοιχίσουμε τις στήλες του πίνακα εκ νέου με βάση το δένδρο εξάλειψης (elimination tree), όπως περιγράφτηκε και στην θεωρία. Το πρόβλημα σε αυτό το σημείο είναι οτι η δημιουργία του δένδρου εξάλειψης βασίζεται στην δομή του πίνακα L και επομένως θα πρέπει να προηγηθεί το βήμα του Symbolic Factorization. Όπως αναφέρθηκε και στην εισαγωγή όμως, σκοπός μας είναι η παράληψη αυτού του βήματος. Σε θεωρητικό επίπεδο λοιπόν, αρχικά θα βρίσκαμε την δομή του πίνακα L, ουσιαστικά δηλαδή θα βρίσκαμε τα στοιχεία εκείνα που θα ήταν μη μηδενικά στον πίνακα L ενώ τα αντίστοιχα στον πίνακα A θα ήταν μηδενικά, έπειτα θα βρίσκαμε το δένδρο εξάλειψης, το οποίο αποτελεί ένα είδος διαγράμματος εξάρτησης δεδομένων (data dependency graph). Βασιζόμενοι σε αυτό, θα ακολουθούσαμε έναν αλγόριθμο, που αναθέτει σε κάθε γονέα του δένδρου μια διεργασία, ενώ οι απόγονοί του ανατίθενται στην ίδια διεργασία, γνωστός και ως subtree to subcube. Όμως, μη έχοντας την δομή του δένδρου, θα ακολουθήσουμε την λογική του αλγορίθμου wrap mapping. Εφαρμόζοντας τον αλγόριθμο, παρατηρούμε, όπως βλέπουμε και στην εικόνα 4.7, οτι κάθε κόμβος του δένδρου ανατίθεται σε διαφορετική διεργασία. 73

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Εικόνα 4.7 wrap mapping αλγόριθμος, πηγή [1] Η εύρεση των κόμβων που είναι φύλλα είναι σημαντική, καθώς από αυτές τις στήλες θα γίνει η εκκίνηση του αλγορίθμου για τον υπολογισμό των στοιχείων του πίνακα L, αφού δεν εξαρτώνται από τα στοιχεία κάποιας άλλης στήλης. Θα στηριχθούμε στο [4] όπου γίνεται η παρουσίαση ενός αλγορίθμου για την εύρεση του elimination tree από την δομή του πίνακα A. Στον αλγόριθμο αυτό δομείται αρχικά ένα δένδρο με βάση την δομή του πίνακα Α, το οποίο καλείται ψεύτικο, και στην συνέχεια με βάση αυτό γίνεται η εύρεση του σωστού δένδρου. Ο αλγόριθμος αυτός στηρίζεται σε ορισμένα λήμματα τα οποία χρησιμοποιούμε και εμείς στην υλοποίηση του παράλληλου αλγορίθμου. Αρχικά λοιπόν αποδεικνύεται οτι ένας κόμβος φύλλο του αληθινού δένδρου είναι φύλλο και του ψεύτικου ενώ το αντίθετο δεν ισχύει. Για να είναι ένα κόμβος φύλλο του ψεύτικου δένδρου κόμβος φύλλο και στο αληθινό θα πρέπει όλα τα στοιχεία της αντίστοιχης 74

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ γραμμής πριν το διαγώνιο στοιχείο να είναι μηδενικά. Τότε ο κόμβος είναι φύλλο και στο δένδρο εξάλειψης. Με βάση λοιπόν όσα αναφέρθηκαν παραπάνω, δεν είναι απαραίτητη η εύρεση της δομής του δένδρου εξάλειψης, αλλά μόνο των κόμβων που έχουν βαθμό ένα. Όλοι οι άλλοι κόμβοι μπορούν να αντιστοιχιστούν με την λογική που παρουσιάζεται στο [6] όπου η στήλη i αντιστοιχίζεται σε μια διεργασία βάση της ακόλουθης σχέσης {i mod n}th process όπου n ο αριθμός των διεργασιών. Επομένως, σε αυτό το βήμα η κεντρική διεργασία, με χρήση του παραπάνω τύπου στέλνει τις στήλες του Α στην διεργασία που έχουν αντιστοιχηθεί. Στην συνέχεια, ο κάθε διεργασία δημιουργεί την αντίστοιχη λίστα για κάθε μία στήλη, σημειώνοντας τις γραμμές στις οποίες έχει τοποθετήσει στοιχεία. Τέλος η κάθε διεργασία στέλνει στην κεντρική διεργασία πόσα στοιχεία έχει τοποθετήσει σε κάθε γραμμή, και αυτή υπολογίζει τα μη μηδενικά στοιχεία κάθε γραμμής μέχρι το διαγώνιο στοιχείο. Τα αποτελέσματα αυτά στέλνονται σε όλες τις διεργασίες και πλέον όλα είναι έτοιμα για να ξεκινήσει η επόμενη φάση, ο υπολογισμός των στοιχείων του πίνακα L. 75

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ Εικόνα 4.8 Διάγραμμα ροής του βήματος 2!nmod(n) is array with the number of non-zero at each row!ncols how many columns has the process nmod= ncols= IF (rank==) THEN DO i=,n-1 SEND column i of mod((i),size-1)+1 ELSE 76 A to process with rank

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ c= DO i=,n-1 IF (mod((i),size-1)+1==rank) THEN c=c+1 RECEIVE a column A from root ncols=ncols+1 Convert received column to list Calculate non-zero elements at each row and store to nmod Root collects nmod from each process and summarize them Root send total nmod to all processes Εικόνα 4.9 Ψευδοκώδικας του βήματος 2 ΒΗΜΑ 3 : ΥΠΟΛΟΓΙΣΜΟΣ ΤΩΝ ΣΤΟΙΧΕΙΩΝ ΤΟΥ ΠΙΝΑΚΑ L Για τον υπολογισμών των στοιχείων του πίνακα L θα χρησιμοποιήσουμε τον αλγόριθμο fan out όπως αυτός παρουσιάζεται στο [2]. Η ίδια λογική θα χρησιμοποιηθεί και για το τέταρτο βήμα όπου γίνεται η τριγωνική επίλυση. Όπως σε όλα τα βήματα, έτσι και εδώ, η κεντρική διεργασία δεν παίρνει ρόλο στους υπολογισμούς. Όταν μια διεργασία τελειώνει με τους υπολογισμούς κάποιας στήλης, την στέλνει στις υπόλοιπες προκειμένου να την χρησιμοποιήσουν. Όμως θα πρέπει να σταλεί και στον εαυτό της, καθώς ο αλγόριθμος ενεργοποιείται από τα εισερχόμενα μηνύματα. Αυτή η δυνατότητα όμως δεν παρέχεται από το openmpi, και γι αυτό η κεντρικής διεργασία αναλαμβάνει 77

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ αυτή την αποστολή. Εικόνα 4.1 Δομικό διάγραμμα του αλγορίθμου fan-out IF (rank /=) THEN leaves= DO i=1,ncols IF (nmod(column i of process) == ) THEN leaves=leaves+1 cdiv(j) SEND column to other processes ncols=ncols - leaves 78

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ DO WHILE (ncols > ) RECEIVE a column from an other process DO i=1,ncols IF (column i of process > incoming column ) THEN cmod(j, k) nmod(column i of process)=nmod(column i of process)-1 IF (nmod(column i of process) == ) THEN cdiv(j) SEND column to other processes ncols=ncols-1 ELSE DO i=,n-1 RECEIVE a column from a process Store to A Εικόνα 4.11 Ψευδοκώδικας του αλγορίθμου fan-out Όπως βλέπουμε στον αλγόριθμο, στο πρώτο κομμάτι του, η κάθε διεργασία βρίσκει τις στήλες που είναι φύλλα στο δένδρο εξάλειψης, δηλαδή οι αντίστοιχες γραμμές δεν έχουν μη μηδενικά στοιχεία μέχρι το διαγώνιο στοιχείο και επομένως ο υπολογισμός του 79

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ στοιχείου του πίνακα L με βάση τον τύπο 3.8, δεν εξαρτάται από άλλες στήλες, και υπολογίζει τα στοιχεία της στήλης. Όταν τελειώσει με τους υπολογισμούς, η στήλη στέλνεται σε όλες τις άλλες διεργασίες, στην κεντρική για την συλλογή των στοιχείων, και στις υπόλοιπες για να την χρησιμοποιήσουν για τους υπολογισμούς τους. Πάντα θα υπάρχει κάποια τέτοια στήλη και αυτή είναι σίγουρα η πρώτη, αν δεν προκύψει κάποια άλλη από την αναδιάταξή του πίνακα A. Όλα τα στοιχεία που χρειάζονται για το πρώτο τμήμα, έχουν υπολογιστεί από το προηγούμενο βήμα. Στην συνέχεια, με βάση τις στήλες που στάλθηκαν από το πρώτο κομμάτι του κώδικα ξεκινάει η διαδικασία για τις υπόλοιπες στήλες. Επειδή δεν έχει γίνει δόμηση του πίνακα L, προκειμένου να γνωρίζουμε τα μη μηδενικά στοιχεία θα κάνουμε μια μικρή αλλαγή στον αλγόριθμο με βάση αυτόν που χρησιμοποιείται για τις πυκνές μήτρες και παρουσιάζεται και στο [6]. Έτσι λοιπόν θα κάνουμε τους ελέγχους για την ύπαρξη μη μηδενικών στοιχείων εδώ παράλληλα με τους υπολογισμούς κερδίζοντας κάποιες επαναλήψεις από το να πραγματοποιούσαμε το Symbolic Factorization μεμονωμένα σαν ένα ξεχωριστό βήμα. Για κάθε στήλη i που έρχεται από κάποια άλλη διεργασία λοιπόν, ελέγχουμε αν τα μη μηδενικά στοιχεία, και συνεχίζουμε τον αλγόριθμο με τους υπολογισμούς. Οι επαναλήψεις είναι ίσες με τον ταξικό αριθμό της στήλης μείον ένα. Όταν ολοκληρωθούν οι επαναλήψεις, συνεχίζουμε στην συνάρτηση cdiv, όπως έχει παρουσιαστεί στο κεφάλαιο 3, και τέλος στέλνουμε την στήλη στις υπόλοιπους διεργασίες. Η διαδικασία αυτή επαναλαμβάνεται μέχρι να τελειώσουν όλες οι διεργασίες με τις στήλες που έχουν αναλάβει. Μετά το πέρας του βήματος αυτού, η κάθε διεργασία θα έχει κάποιες στήλες του πίνακα L. Οι στήλες αυτές θα χρησιμοποιηθούν στην επόμενη φάση της τριγωνικής λύσης, όπου θα ακολουθήσουμε μια παρόμοια λογική για την εύρεση του διανύσματος x που είναι και ο στόχος μας. ΒΗΜΑ 4 : ΤΡΙΓΩΝΙΚΗ ΛΥΣΗ Το τελευταίο βήμα για την εύρεση του διανύσματος x είναι η τριγωνική λύση. Γι αυτό το βήμα πρέπει να λυθούν τρεις γραμμικές εξισώσεις όπως περιγράφονται και στην αντίστοιχη θεωρία. Στην πράξη ωστόσο, χρειάζεται να λύσουμε τις δύο από αυτές, καθώς η τρίτη αποτελεί απλή μετακίνηση των στοιχείων ενός διανύσματος. Παρατηρώντας καλύτερα το σύστημα που έχουμε να λύσουμε βλέπουμε οτι: 8

ΚΕΦΑΛΑΙΟ 4 [ ΥΛΟΠΟΙΗΣΗ ][ ] [ ] a11 a21 a22 a31 a32 a33 a41 a 42 a 43 a 44 y1 b1 y2 b = 2 y3 b3 y4 b4 a 11 y1=b1 a 21 y1 + a22 y 2=b2 (4.2) a31 y 1+a32 y 2 + a33 y 3=b 3 a 41 y1 + a42 y 2 + a43 y 3 +a 44 y 4=b4 (4.1) Επομένως για την εύρεση κάποιου στοιχείου του διανύσματος y θα πρέπει να έχουμε πρώτα υπολογίσει όλα τα προηγούμενα, δηλαδή αν θέλουμε να υπολογίσουμε το θα πρέπει να έχουμε υπολογίσει πρώτα τα y1 και y3 y 2. Όμως στην περίπτωση που έχουμε μηδενικά στοιχεία, κάποια στοιχεία του διανύσματος y, μπορούν να υπολογιστούν χωρίς να πρέπει να υπολογιστούν όλα τα προηγούμενα στοιχεία. Σε αυτή την περίπτωση λοιπόν έχουμε κάποιο επίπεδο παραλληλοποίησης. Σύμφωνα με το [5] θα έπρεπε να βρίσκαμε και σε αυτή την περίπτωση κάποια καλή διάταξη των στοιχείων του πίνακα, προκειμένου να έχουμε όσο το δυνατόν καλύτερο επίπεδο παράλληλης επεξεργασίας, όμως εμείς θα χρησιμοποιήσουμε την διάταξη του που έχει προκύψει από το προηγούμενο βήμα. Επομένως γίνεται σαφές οτι ο αλγόριθμος που παρουσιάστηκε στο προηγούμενο βήμα μπορεί να χρησιμοποιηθεί και εδώ με την ίδια ακριβώς λογική. Πιο συγκεκριμένα, αρχικά θα βρούμε τις γραμμές εκείνες που έχουν όλα τα στοιχεία τους μηδέν εκτός από το στοιχείο της διαγωνίου, τα οποία δεν απαιτούν κάποιο προηγούμενο στοιχείο του διανύσματος. Αν για παράδειγμα τα στοιχεία τότε ο υπολογισμός του y3 δεν απαιτεί τα στοιχεία a 31 και a 32 ήταν μηδενικά y1 και y 2. Επομένως μπορούμε να το υπολογίσουμε αμέσως. Στην συνέχεια υπολογίζουμε όλα τα γινόμενα a i j y j και τα στοιχεία στέλνονται στις υπόλοιπες διεργασίες, προκειμένου να το χρησιμοποιήσουν για τους δικούς τους υπολογισμούς. Τα στοιχεία του διανύσματος y που μπορούν να υπολογιστούν μόνα τους και ανεξάρτητα συμπίπτουν με τις στήλες του πίνακα L που μπορούν να υπολογιστούν χωρίς να χρειάζονται κάποια προηγούμενη στήλη του, και επομένως είναι τα φύλλα του elimination tree που έχουν προκύψει από το δεύτερο βήμα. Για την επίλυση του δεύτερου γραμμικού συστήματος, τα πράγματα δεν αλλάζουν πολύ. Η διαφορά είναι στο γεγονός οτι δεν χρησιμοποιείται ο πίνακας L, αλλά ο ανάστροφός του και για να μην χάνουμε χρόνο στους υπολογισμούς χρησιμοποιούμε τα ίδια δεδομένα, δηλαδή αυτά του πίνακα L. Εδώ τα στοιχεία που μπορούν να ξεκινήσουν τον 81

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ αλγόριθμο, δηλαδή μπορούν να υπολογιστούν πρώτα και ανεξάρτητα από τα υπόλοιπα, βρίσκονται με βάση τα μη μηδενικά στοιχεία των στηλών του πίνακα L. Αν μια στήλη έχει όλα τα στοιχεία της μηδέν, εκτός από αυτό της διαγωνίου, μπορεί να ξεκινήσει. ΔΕΥΤΕΡΗ ΥΛΟΠΟΙΗΣΗ Στην δεύτερη αυτή υλοποίηση θα γίνει εφαρμογή των τριών τελευταίων βημάτων της προηγούμενης υλοποίησης. Δεν θα αναδιατάξουμε τον πίνακα Α και αυτό μας δίνει το πλεονέκτημα να γνωρίζουμε εκ των προτέρων την δομή των πινάκων Α και L, με αποτέλεσμα την μείωση αρκετών επαναλήψεων. Επομένως αφενός παραλείπεται ένα βήμα, το οποίο όπως θα φανεί στο επόμενο κεφάλαιο, είναι χρονοβόρο αφετέρου μειώνεται αισθητά ο χρόνος εκτέλεσης άλλων τμημάτων του προγράμματος. Η αντίστοιχη σειριακή υλοποίηση δέχεται ταινιωτούς πίνακες (band matrix) που έχουν μία συγκεκριμένη δομή και αποκτούμε το πλεονέκτημα της γνώσης τον απαιτούμενων επαναλήψεων. Δεν χρειάζεται να παρουσιάσουμε κάτι περισσότερο, καθώς σε επίπεδο λογικής και διαγραμμάτων ροής, η υλοποίηση δεν διαφοροποιείται. 82

ΚΕΦΑΛΑΙΟ 4 ΥΛΟΠΟΙΗΣΗ 83

ΚΕΦΑΛΑΙΟ 5 : ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΣΚΟΠΟΣ Στο κεφάλαιο αυτό θα παρουσιάσουμε τα αποτελέσματα των πειραματικών μετρήσεων. Θα δείξουμε την βελτίωση του χρόνου της συνάρτησης Cholesky, αλλά και της εφαρμογής συνολικά. Επίσης θα γίνει σαφής, ο λόγος, που μας οδήγησε σε δεύτερη υλοποίηση, προσαρμοσμένη περισσότερο στο σύστημα προς επίλυση.

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΕΙΣΑΓΩΓΗ Σε αυτό το κεφάλαιο θα γίνει η παρουσίαση των πειραματικών μετρήσεων. Σκοπός είναι να εφαρμόσουμε ορισμένα παραδείγματα γραμμικών εξισώσεων, με σκοπό την παρατήρηση των συμπεριφορών και των πλεονεκτημάτων ή μειονεκτημάτων των παράλληλων αλγορίθμων. Σε θεωρητικό επίπεδο, ασχοληθήκαμε με αυτά τα ζητήματα στο κεφάλαιο 2. Θα πραγματοποιήσουμε 5 διαφορετικά παραδείγματα. Όπως έχει αναφερθεί στο κεφάλαιο 3, οι συναρτήσεις επιλύουν συστήματα γραμμικών εξισώσεων, A x=b Για κάθε παράδειγμα θα ορίσουμε έναν πίνακα Α (ταινιωτός πίνακες) και ένα διάνυσμα b, με τα ακόλουθα χαρακτηριστικά: πίνακας Α 1 θέσεων με ταινία 5 (37575 στοιχεία) και διάνυσμα b 1 θέσεων πίνακας Α 2 θέσεων με ταινία 1 (1515 στοιχεία) και διάνυσμα b 2 θέσεων πίνακας Α 3 θέσεων με ταινία 15 (337725 στοιχεία) και διάνυσμα b 3 θέσεων πίνακας Α 4 θέσεων με ταινία 2 (63 στοιχεία) και διάνυσμα b 4 θέσεων πίνακας Α 5 θέσεων με ταινία 25 (937875 στοιχεία) και διάνυσμα b 5 θέσεων Για την παράλληλη εφαρμογή θα εφαρμόσουμε τα παραπάνω παραδείγματα χρησιμοποιώντας 3 εως 8 επεξεργαστές. Τέλος θα δούμε το κέρδος στο χρόνο εκτέλεσης ολόκληρης της εφαρμογής της ρευστομηχανικής. ΣΕΙΡΙΑΚΗ ΕΦΑΡΜΟΓΗ Αρχικά θα μετρήσουμε την επίδοση της σειριακής συνάρτησης για τα παραδείγματα που αναφέρθηκαν στην εισαγωγή. Ο στόχος μας είναι, η παράλληλη έκδοση της μεθόδου, να 86

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ είναι γρηγορότερη απο τους χρόνους που θα παρουσιαστούν εδώ. Εφαρμόζοντας λοιπόν τις παραπάνω εισόδους έχουμε τα επόμενα αποτελέσματα, Μέγεθος 1 2 3 4 5 1.28 sec 8.117 sec 23.848 sec 55.146 sec 15.176 sec εισόδου Χρόνος εκτέλεσης Τα παραπάνω αποτελέσματα είναι αναμενόμενα. Ο χρόνος εκτέλεσης και η είσοδος του προβλήματος, όπως φαίνεται και από το επόμενο διάγραμμα, έχουν εκθετική σχέση. 12 Χρόνος Εκτέλεσης (sec) 1 8 6 4 2 37575 1515 337725 63 937875 Στοιχεία Πίνακα Γράφημα 5.1 Χρόνος εκτέλεσης της σειριακής συνάρτησης σε σχέση με την είσοδο Αυτό είναι λογικό από την στιγμή που ο αλγόριθμος της συνάρτησης είναι Ο(n3). Στόχος μας είναι να βρεθούμε κάτω από αυτούς τους χρόνους. Δυστυχώς δεν μπορούμε να αποφύγουμε επαναλήψεις τύπου Ο(n 3), όμως μπορούμε να περιορίσουμε το μέγεθος του n, μέσω της κατανομής του προβλήματος σε περισσότερες από μια διεργασίες. Θα 87

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ πρέπει ωστόσο να προσέξουμε, τον χρόνο που θα κερδίσουμε από τους βρόχους επανάληψης, να μην καλυφθεί από τα μηνύματα και τον συγχρονισμό. ΠΑΡΑΛΛΗΛΗ ΕΦΑΡΜΟΓΗ ΠΡΩΤΗ ΥΛΟΠΟΙΗΣΗ Στην πρώτη έκδοση του παράλληλου αλγορίθμου, όπως παρουσιάστηκε στο προηγούμενο κεφάλαιο, έγινε προσπάθεια για εφαρμογή της θεωρίας του 3ου κεφαλαίου παραμετρικά, να είναι δηλαδή δυνατή η επίλυση του συστήματος σε οποιαδήποτε δομή του πίνακα Α και αν έχουμε ως είσοδο. Όμως υπάρχουν δύο βήματα τα οποία καταναλώνουν αρκετό χρόνο και τελικώς η προσπάθεια αυτή απέτυχε. Από την στιγμή που δεν πετύχαμε το επιθυμητό αποτέλεσμα αναλύουμε το πρόβλημα αυτό προκειμένου να βρούμε λύσεις που θα διορθώσουν το πρόβλημα και θα μειώσουν τον χρόνο εκτέλεσης. Οι παρατηρήσεις αυτές οδήγησαν στην δεύτερη υλοποίηση. Οι χρόνοι που μετρήθηκαν με αυτή την υλοποίηση ήταν αρκετά μεγαλύτεροι απο τους αντίστοιχους χρόνους της σειριακής εφαρμογής. Ενδεικτικά θα παρουσιάσουμε τους χρόνους εκτέλεσης για 8 διαθέσιμους επεξεργαστές-διεργασίες, Μέγεθος 1 2 3 4 5 2.585 sec 3.627 sec >12. sec >12. sec >12. sec εισόδου Χρόνος εκτέλεσης Με βάση τους χρόνους ανάμεσα στα βήματα του αλγορίθμου, αυτός χωρίζεται όπως φαίνεται στο επόμενο σχήμα. 88

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ % 2% 42% Βήμα 1 56% Βήμα 2 Βήμα 3 Βήμα 4 Γράφημα 5.2 Ανάλυση του χρόνου εκτέλεσης της πρώτης υλοποίησης Από το παραπάνω γράφημα, παρατηρούμε οτι τα βήματα 3 και 4 είναι αυτά που καταναλώνουν σχεδόν όλο τον χρόνο. Επομένως θα πρέπει να εστιάσουμε σε αυτά τα δύο βήματα για την βελτίωση του χρόνου εκτέλεσης. Πριν περάσουμε στις πειραματικές μετρήσεις της δεύτερης υλοποίησης, θα πρέπει να σχολιάσουμε τα παραπάνω αποτελέσματα. Ο λόγος για τον μεγάλο χρόνο εκτέλεσης (σε σχέση με τον αντίστοιχο σειριακό), είναι κυρίως η μη γνώση της δομής του πίνακα Α, όπως αναφέραμε και στο προηγούμενο κεφάλαιο. Επομένως, μπορούμε να βελτιώσουμε τα δύο μεγάλα τμήματα του αλγορίθμου, ενώ το βήμα 1, που πραγματοποιεί την αναδιάταξη του πίνακα Α, είναι περιττό. Βασιζόμενοι λοιπόν στα παραπάνω συμπεράσματα, οδηγηθήκαμε στην δεύτερη υλοποίηση του αλγορίθμου. ΔΕΥΤΕΡΗ ΥΛΟΠΟΙΗΣΗ Στην δεύτερη υλοποίηση του αλγόριθμου, έγινε προσπάθεια για επιτάχυνση του χρόνου εκτέλεσης του προβλήματος, σε σχέση με τα αποτελέσματα και τα συμπεράσματα της πρώτης έκδοσης. Η γνώση της δομής του πίνακα μας δίνει την ευχέρεια της μείωσης των επαναλήψεων αφού πολλές από αυτές, στην πρώτη έκδοση, γίνονται άνευ λόγου αφού αφορούν μηδενικά στοιχεία και δεν μπορούν να αγνοηθούν. Για την συγκεκριμένη έκδοση έγιναν οι επόμενες μετρήσεις: 89

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ Επεξεργαστές 3 4 5 6 7 8 1 1.77 sec 1.817 sec 1.569 sec 1.918 sec 2.146 sec 2.225 sec 2 6.261 sec 5.364 sec 5.91 sec 4.369 sec 4.298 sec 4.263 sec 3 13.929 sec 11.947 sec 1.572 sec 1.192 sec 11.179 sec 9.61 sec 4 3.337 sec 22.931 sec 2.196 sec 19.551 sec 17.968 sec 18.486 sec 5 5.769 sec 4.486 sec 34.836 sec 36.94 sec 3.53 sec 33.463 sec Σε αυτό το σημείο δεν θα κάνουμε σύγκριση με την σειριακή εφαρμογή. Αυτό θα γίνει στην συνέχεια. Εδώ θα δούμε την συμπεριφορά της παράλληλης υλοποίησης. Θα παρουσιάσουμε τα παραπάνω διαγράμματα σε δύο διαγράμματα 1 Χρόνος 2 3 4 5 3 4 5 6 7 8 Αριθμός Επεξεργαστών Γράφημα 5.3 Χρόνος εκτέλεσης κατά την αύξηση του αριθμού των επεξεργαστών 9

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ 6 Χρόνος Εκτέλεσης 5 4 3 5 7 3 2 1 37575 1515 337725 63 937875 Είσοδος Γράφημα 5.4 Χρόνος εκτέλεσης κατά την αύξηση της εισόδου Στο πρώτο γράφημα, βλέπουμε την συμπεριφορά του κάθε παραδείγματος καθώς αυξάνουμε τον αριθμό των επεξεργαστών-διεργασιών στους οποίους θα κατανείμουμε το πρόβλημα. Σε αυτό παρατηρούμε, οτι από κάποιο σημείο και μετά δεν έχουμε μεγάλο κέρδος ενώ σε ορισμένες περιπτώσεις έχουμε και καθυστέρηση. Στο δεύτερο γράφημα, βλέπουμε την αντίδραση του παράλληλου αλγορίθμου όταν αυξάνουμε την είσοδο ενώ έχουμε τον ίδιο αριθμό από διαθέσιμους επεξεργαστές. Εδώ βλέπουμε οτι το κέρδος στον χρόνο εκτέλεσης είναι μεγαλύτερο όταν καθώς αυξάνουμε το μέγεθος της εισόδου, αυξάνουμε αντίστοιχα και τον αριθμό των διαθέσιμων επεξεργαστών. Δηλαδή, στο πρόβλημα με τον πίνακα των 3 στηλών δεν παρατηρούμε μεγάλο κέρδος καθώς αυξάνουμε τους επεξεργαστές. Αντίθετα, στο προβλημάτων 5 στηλών βλέπουμε οτι υπάρχει μεγαλύτερο κέρδος όταν έχουμε 5 επεξεργαστές σε σχέση με τους 3. Τα παραπάνω συμπεράσματα ήταν αναμενόμενα καθώς η πρώτη παρατήρηση προκύπτει από τον νόμο του Amdahl ενώ η δεύτερη από τον νόμο του Gustafson. ΣΥΓΚΡΙΣΗ ΕΚΔΟΣΕΩΝ ΣΕΙΡΙΑΚΗΣ ΚΑΙ ΠΑΡΑΛΛΗΛΗΣ ΥΛΟΠΟΙΗΣΗΣ Σε αυτό το σημείο θα συγκρίνουμε την συμπεριφορά του σειριακού αλγορίθμου με τον παράλληλο της δεύτερης υλοποίησης και θα υπολογίσουμε το κέρδος που έχουμε όταν λύνουμε το πρόβλημα παράλληλα. Η σύγκριση με την πρώτη υλοποίηση δεν έχει κάποιο νόημα, αφού από τα ενδεικτικά αποτελέσματα που παρουσιάστηκαν, παρατηρούμε οτι δεν έχουμε κέρδος στον χρόνο εκτέλεσης. 91

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ Στον επόμενο πίνακα θα υπολογίσουμε την επιτάχυνση και την αποδοτικότητα, σύμφωνα με τους τύπους (2.1) και (2.5) που παρουσιάστηκαν στο 2ο κεφάλαιο. Για την επιτάχυνση έχουμε Επεξεργαστές 3 4 5 6 7 8 1.78.665.77.63.563.543 2 1.297 1.513 1.595 1.858 1.889 1.94 3 1.712 1.996 2.256 2.34 2.133 2.484 4 1.818 2.45 2.73 2.821 3.69 2.983 5 2.72 2.598 3.19 2.847 3.445 3.143 Ενώ για την αποδοτικότητα έχουμε Επεξεργαστές 3 4 5 6 7 8 1.236.166.154.15.8.68 2.432.378.319.31.27.238 3.571.499.451.39.35.31 4.66.61.546.47.438.373 5.691.649.64.475.492.393 Απο τους παραπάνω δύο πίνακες βλέπουμε, σαν πρώτη παρατήρηση, οτι δεν η παραλληλοποίηση του προβλήματος δεν επιφέρει ταχύτερο χρόνο για όλες τις εισόδους, αλλά από κάποιο μέγεθος εισόδου και μετά. Στα παραδείγματα που παρουσιάσαμε βλέπουμε οτι για 35375 στοιχεία δεν έχουμε επιτάχυνση ενώ για 1515 στοιχεία και περισσότερα έχουμε. Επίσης, παρατηρούμε την χρησιμότητα των επεξεργαστών σύμφωνα με τον πίνακα της αποδοτικότητας. Αν και έχουμε μείωση του χρόνου εκτέλεσης καθώς οι διαθέσιμοι επεξεργαστές αυξάνονται, βλέπουμε οτι έχουμε μεγαλύτερη απόδοση στους 3 επεξεργαστές. Επομένως, για τα προβλήματα τα οποία παρουσιάσαμε εδώ, αν και έχουμε μείωση του χρόνου εκτέλεσης, αυτή η μείωση δεν είναι αρκετά μεγάλη για να απαιτεί την αύξηση της υπολογιστικής ισχύς πέραν των 3 επεξεργαστών. ΣΥΓΚΡΙΣΗ ΕΦΑΡΜΟΓΗΣ ΡΕΥΣΤΟΜΗΧΑΝΙΚΗΣ ΓΙΑ ΠΑΡΑΛΛΗΛΗ ΚΑΙ 92

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ ΣΕΙΡΙΑΚΗ ΕΚΤΕΛΕΣΗ Εδώ θα δούμε τις επιδόσεις της εφαρμογής συνολικά. Το παράδειγμα που θα χρησιμοποιήσουμε είναι για έναν πίνακα 76 στήλες και συνολικά 76255 στοιχείων. Τα αποτελέσματα τα βλέπουμε στον επόμενο πίνακα Επεξεργαστές 1 3 4 5 6 7 8 Χρόνος Εκτέλεσης 11453.931 7846.138 9334.425 8766.97 6519.999 6583.7 6421.552 (sec) Επιτάχυνση 1. 1.46 1.227 1.36 1.757 1.74 1.784 Αποδοτικ- ότητα 1..486.37.261.292.249.222 Στο επόμενο γράφημα βλέπουμε τον χρόνο εκτέλεσης, σε συνάρτηση με το αριθμό των διαθέσιμων επεξεργαστών: 14 Χρόνος Εκτέλεσης (sec) 12 1 8 6 4 2 1 2 3 4 5 6 7 8 Αριθμός επεξεργαστών Γράφημα 5.5 Χρόνος εκτέλεσης σε συνάρτηση με τον αριθμό των επεξεργαστών Από τα παραπάνω αποτελέσματα βλέπουμε οτι έχουμε μεγαλύτερη αποδοτικότητα όταν κατανέμουμε την εφαρμογή σε 3 επεξεργαστές - διεργασίες, που ήταν αναμενόμενο. ΣΥΜΠΕΡΑΣΜΑΤΑ Η παρούσα διπλωματική εργασία, είχε ως σκοπό να αναλύσει τα πλεονεκτήματα και τα 93

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ μειονεκτήματα του παράλληλου προγραμματισμού. Για τον λόγο αυτό πήραμε ένα πρόγραμμα, το οποίο απαιτεί αρκετό χρόνο για την εκτέλεσή του και έχει νόημα η ανάλυση του και η προσπάθεια για την μείωσή του. Το συγκεκριμένο πρόγραμμα, ασχολείται με την ρευστομηχανική και λεπτομέρειες του παρουσιάστηκαν στο 3ο κεφάλαιο. Μέσα από μια ανάλυση, καθαρά λογισμικού, βρέθηκε το κομμάτι των υπολογισμών που απαιτεί ένα μεγάλο μέρος του προγράμματος, και ήταν αυτό που προσπαθήσαμε να παραλληλοποιήσουμε. Τα αποτελέσματα αυτού του εγχειρήματος παρουσιάστηκαν προηγούμενα. Στο πρώτο και στο δεύτερο κεφάλαιο, παρουσιάσαμε, σε θεωρητικό επίπεδο, τα πλεονεκτήματα και τα μειονεκτήματα που θα έχουμε από την επεξεργασία μιας εφαρμογής παράλληλα. Αυτά τα ζητήματα θα πρέπει να δούμε αν ισχύουν στην πράξη, και πόσο επηρεάζουν την τελική απόδοση μιας παράλληλης εφαρμογής. Όπως φάνηκε και από τα αποτελέσματα των πειραματικών μετρήσεων, υπάρχει πλήρη επαλήθευση των νόμων του Gustafson και του Amdahl. Είδαμε επίσης, οτι η παράλληλη επεξεργασία δεν οδηγεί πάντα σε γρηγορότερα προγράμματα. Το ερώτημα λοιπόν που τίθεται είναι αν η παράλληλη επεξεργασία μιας εφαρμογής οδηγεί σε γρηγορότερα αποτελέσματα ώστε να αξίζει τον κόπο κάποιος να ασχοληθεί με αυτήν. Μέσα από την εμπειρία που αποκτήθηκε κατά την εκπόνηση της διπλωματικής εργασίας αλλά και από τα αποτελέσματα που παρουσιάστηκαν βλέπουμε οτι αξίζει ανάλογα με πρόβλημα και το μέγεθός του. 94

ΚΕΦΑΛΑΙΟ 5 ΠΕΙΡΑΜΑΤΙΚΑ ΑΠΟΤΕΛΕΣΜΑΤΑ 95

ΠΑΡΑΡΤΗΜΑ Α MESSAGE PASSING INTERFACE (MPI) ΠΑΡΑΡΤΗΜΑ Α MESSAGE PASSING INTERFACE (MPI) Το MPI είναι ένα πρωτόκολλο για την ανταλλαγή μηνυμάτων μεταξύ διεργασιών. Δίνει την δυνατότητα για ανταλλαγή μηνυμάτων μεταξύ δυο συγκεκριμένων διεργασιών, αποστολή μηνυμάτων σε όλες τις διεργασίες και συγχρονισμού. Είναι κατάλληλο για συστήματα με αρχιτεκτονική κατανεμημένης μνήμης όμως μπορεί να χρησιμοποιηθεί και για συστήματα κοινής μνήμης καθώς επίσης και για υβριδικά συστήματα που συνδυάζουν τις δύο προηγούμενες αρχιτεκτονικές (υπολογιστές συνδεδεμένοι μεταξύ τους, ο καθένας εκ των οποίων έχει αρχιτεκτονική κοινής μνήμης). Το πρωτόκολλο παρέχεται για τις γλώσσες προγραμματισμού C/C++ και Fortran. ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ ΜΕ ΧΡΗΣΗ MPI Ένα πρόγραμμα με χρήση του MPI δεν διαφέρει πολύ από ένα κοινό πρόγραμμα για εκτέλεση σε σειριακό επεξεργαστή. Αυτό που αλλάζει είναι το γεγονός οτι θα πρέπει να καθοριστεί το τι θα εκτελέσει η κάθε διεργασία, δηλαδή αν κάποιο κομμάτι του προγράμματος θα το εκτελέσουν όλες οι διεργασίες, κάποιες από αυτές ή μια συγκεκριμένη. Η διαφοροποίηση αυτή μπορεί να γίνει με την χρήση του rank, που είναι ουσιαστικά η ταυτότητα μιας διεργασίας. Θα πρέπει να τονίσουμε οτι όλες οι διεργασίες εκτελούν τις ίδιες εντολές (Single Program Multiple Data). Αρχικά θα πρέπει να καλέσουμε την βιβλιοθήκη του MPI προκειμένου να μπορέσουμε να κάνουμε χρήση των συναρτήσεων του πρωτοκόλλου. Για να γίνει αυτό, ανάλογα με την γλώσσα προγραμματισμού που χρησιμοποιούμε έχουμε C include file #include "mpi.h" Fortran include file include 'mpif.h' Στην συνέχεια πρέπει να κάνουμε αρχικοποίηση του περιβάλλοντος. Στην ουσία εδώ ξεκινάει ο παράλληλος κώδικας. Πριν από αυτό το βήμα θα πρέπει να έχουμε ορίσει ορισμένες μεταβλητές χρήσιμες για το πρωτόκολλο, ειδικά στην περίπτωση που χρησιμοποιούμε Fortran καθώς έχει την ιδιαιτερότητα να γίνονται όλες οι δηλώσεις των μεταβλητών στην αρχή του προγράμματος. Μετά την αρχικοποίηση του περιβάλλοντος σειρά έχει ο κώδικας του προγράμματος. 96

ΠΑΡΑΡΤΗΜΑ Α MESSAGE PASSING INTERFACE (MPI) Εκεί γράφουμε τον κωδικά μας, όπως θα κάναμε και στην περίπτωση του σειριακού κώδικα, με την διαφορά οτι ανάλογα με το τι θέλουμε να κάνει η κάθε διεργασία έχουμε δομές ελέγχου με βάση το rank. Επίσης χρησιμοποιούμε τις συναρτήσεις του πρωτοκόλλου για την ανταλλαγή μηνυμάτων. Τέλος, πριν την λήξη του προγράμματος, θα πρέπει να τερματίσουμε το περιβάλλον. Αυτό είναι αρκετά σημαντικό καθώς μη τερματισμός του θα δημιουργήσει λανθασμένα και μη αναμενόμενα αποτελέσματα. Εικόνα Α1 - Η δομή ενος προγράμματος με την χρήση του πρωτοκόλλου MPI[1] COMMUNICATORS ΚΑΙ RANK Στο MPI, ένας communicator, είναι ένας τρόπος με τον οποίο μπορούμε να καθορίσουμε ομάδες διεργασιών, οι οποίες μπορούν να επικοινωνούν μεταξύ τους. Οι περισσότερες από τις συναρτήσεις του MPI χρησιμοποιούν ως όρισμά τους έναν communicator. Αρχικά ορίζεται ένας communicator που περιλαμβάνει όλες τις διεργασίες του συστήματος και [1] http://pdplab.it.uom.gr/teaching/llnl-gr/message_passing_interface_(mpi).htm 97

ΠΑΡΑΡΤΗΜΑ Α MESSAGE PASSING INTERFACE (MPI) αυτός είναι ο MPI_COMM_WORLD. Σε κάθε communicator, η κάθε διεργασία, διαθέτει έναν μοναδικό αριθμό ως ταυτότητα, ο οποίος καλείται rank. Τον συγκεκριμένο αριθμό τον χρησιμοποιεί ο προγραμματιστής προκειμένου να καθορίσει τις διεργασίες που στέλνουν ή λαμβάνουν κάποιο μήνυμα ή για να καθοριστούν κάποιες ενέργειες που θα εκτελεστούν από μια συγκεκριμένη διεργασία (συνήθως με συνθήκες ελέγχου if (rank == 1) do this / if (rank!= ) do that). ΕΠΙΚΟΙΝΩΝΙΕΣ ΣΤΟ MPI Ένα βασικό κομμάτι στο MPI είναι η ανταλλαγή μηνυμάτων μεταξύ των διεργασιών. Αυτό διότι με αυτόν τον τρόπο είναι δυνατή η ανταλλαγή δεδομένων ή ο συγχρονισμός των διεργασιών που τρέχουν στον κάθε επεξεργαστή. Το MPI προσφέρει δύο βασικούς τρόπους επικοινωνίας, τις επικοινωνίες point to point, όπου επικοινωνούν μόνο δυο διεργασίες μεταξύ τους, και τις συλλογικές επικοινωνίες (collective communications), όπου υπάρχει επικοινωνία όλων των διεργασιών μεταξύ τους. Σημαντικό ρόλο στις επικοινωνίες παίζει ο Buffer του συστήματος, ο οποίος έχει τα δεδομένα από την αποστολή ενός μηνύματος και θα πρέπει να προσπελαστεί πριν κάποια άλλη αποστολή δεσμεύσει τον buffer αυτόν (αυτό είναι ευθύνη του προγραμματιστή, δηλαδή να έχει φροντίσει πριν την αποστολή κάποιου μηνύματος να έχει γίνει η ανάγνωση του προηγούμενου). Στην εικόνα Α2, παρουσιάζεται η διαδικασία λήψης ενός μηνύματος. Εικόνα Α2 Διαδικασία λήψης μηνύματος[13] Όπως βλέπουμε στην προηγούμενη εικόνα, κατά την διαδικασία λήψης ενός μηνύματος, η διεργασία παίρνει τα δεδομένα από τον buffer του συστήματος. Αν πριν πάρει αυτά τα 98