8. Παράλληλη εκτέλεση βρόχων

Σχετικά έγγραφα
9. Συστολικές Συστοιχίες Επεξεργαστών

Θέματα Μεταγλωττιστών

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

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

2.0 ΔΙΑΝΥΣΜΑΤΙΚΟΙ ΧΩΡΟΙ ΚΑΙ ΓΡΑΜΜΙΚΑ ΣΥΣΤΗΜΑΤΑ

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

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

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

Μαθηματική Εισαγωγή Συναρτήσεις

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΣΗΜΕΙΩΣΕΙΣ ΓΡΑΜΜΙΚΗΣ ΑΛΓΕΒΡΑΣ. ρ Χρήστου Νικολαϊδη

Γραμμικός Προγραμματισμός Μέθοδος Simplex

Μαθηματική Εισαγωγή Συναρτήσεις

ΚΕΦΑΛΑΙΟ 4. Ακέραια Πολύεδρα

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

Τι είναι βαθμωτό μέγεθος? Ένα μέγεθος που περιγράφεται μόνο με έναν αριθμό (π.χ. πίεση)

= 7. Στο σημείο αυτό θα υπενθυμίσουμε κάποιες βασικές ιδιότητες του μετασχηματισμού Laplace, δηλαδή τις

ΚΕΦΑΛΑΙΟ 3 ο ΣΥΝΑΡΤΗΣΕΙΣ, ΤΡΙΓΩΝΟΜΕΤΡΙΑ( FUNCTIONS,TRIGONOMETRY)

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

Αναφορά (1/2) Μπορούμε να ορίσουμε μια άλλη, ισοδύναμη αλλά ίσως πιο σύντομη, ονομασία για ποσότητα (μεταβλητή, σταθερή, συνάρτηση, κλπ.

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

Κεφάλαιο 4 Διανυσματικοί Χώροι

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ (Εξ. Ιουνίου - 02/07/08) ΕΠΙΛΕΓΜΕΝΕΣ ΑΠΑΝΤΗΣΕΙΣ

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

Θέση και Προσανατολισμός

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 1. Σταύρος Παπαϊωάννου

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

Κεφάλαιο 2: Διανυσματικός λογισμός συστήματα αναφοράς

Εφαρμοσμένα Μαθηματικά ΙΙ

ΜΑΘΗΜΑΤΑ ΜΑΘΗΜΑΤΙΚΑ ΘΕΤΙΚΟΥ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ Β ΛΥΚΕΙΟΥ

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ (ΗΥ-119)

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

Ισότητα, Αλγεβρικές και Αναλυτικές Ιδιότητες Πραγματικών Ακολουθιών

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

ΚΕΦΑΛΑΙΟ 2: ΟΡΙΖΟΥΣΕΣ

Κεφάλαιο 4 Διανυσματικοί Χώροι

Kεφάλαιο 4. Συστήματα διαφορικών εξισώσεων. F : : F = F r, όπου r xy

Ε π ι μ έ λ ε ι α Κ Ο Λ Λ Α Σ Α Ν Τ Ω Ν Η Σ

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

(a + b) + c = a + (b + c), (ab)c = a(bc) a + b = b + a, ab = ba. a(b + c) = ab + ac

Εφαρμοσμένα Μαθηματικά ΙΙ

1 Επανάληψη εννοιών από τον Απειροστικό Λογισμό

5. (Λειτουργικά) Δομικά Διαγράμματα

ΜΕΓΙΣΤΙΚΟΣ ΤΕΛΕΣΤΗΣ 18 Σεπτεμβρίου 2014

Συνήθεις διαφορικές εξισώσεις προβλήματα οριακών τιμών

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

Παραδείγματα (2) Διανυσματικοί Χώροι

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

Διανύσµατα στο επίπεδο

Φυσικά μεγέθη. Φυσική α λυκείου ΕΙΣΑΓΩΓΗ. Όλα τα φυσικά μεγέθη τα χωρίζουμε σε δύο κατηγορίες : Α. τα μονόμετρα. Β.

Βρόχοι. Εντολή επανάληψης. Το άθροισμα των αριθμών 1 5 υπολογίζεται με την εντολή. Πρόβλημα. Πώς θα υπολογίσουμε το άθροισμα των ακέραιων ;

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

Κεφάλαιο 3: Εισαγωγή στους αλγορίθμους - διαγράμματα ροής

ΤΕΤΥ Εφαρμοσμένα Μαθηματικά 1. Τελεστές και πίνακες. 1. Τελεστές και πίνακες Γενικά. Τι είναι συνάρτηση? Απεικόνιση ενός αριθμού σε έναν άλλο.

d dx ΠΑΡΑΓΩΓΟΣ ΣΥΝΑΡΤΗΣΗΣ

ΦΥΣΙΚΗ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ

ισδιάστατοι μετασχηματισμοί ΚΕΦΑΛΑΙΟ 4: ισδιάστατοι γεωμετρικοί μετασχηματισμοί

[1] είναι ταυτοτικά ίση με το μηδέν. Στην περίπτωση που το στήριγμα μιας συνάρτησης ελέγχου φ ( x)

Παραδείγματα Διανυσματικοί Χώροι Ι. Λυχναρόπουλος

Αριθμητική Ανάλυση και Εφαρμογές

4. ΚΕΦΑΛΑΙΟ ΕΦΑΡΜΟΓΕΣ ΤΟΥ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΥ FOURIER

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Κεφάλαιο 2. Διανύσματα και Συστήματα Συντεταγμένων

4.3. Γραµµικοί ταξινοµητές

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

,..., v n. W πεπερασμένα παραγόμενοι και dimv. Τα ακόλουθα είναι ισοδύναμα f είναι ισομορφιμός. f είναι 1-1. f είναι επί.

Ταξινόμηση καμπυλών και επιφανειών με τη βοήθεια των τετραγωνικών μορφών.

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

ΚΕΦΑΛΑΙΟ 3 Ο 3.2 Η ΕΝΝΟΙΑ ΤΟΥ ΓΡΑΜΜΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ ΚΑΙ Η. (Σ) όπου α, β, α, β, είναι οι

Κεφάλαιο 1 Συστήματα γραμμικών εξισώσεων

Η ΚΙΝΗΣΗ ΣΩΜΑΤΙΟ Ή ΥΛΙΚΟ ΣΗΜΕΙΟ Ή ΣΗΜΕΙΑΚΟ ΑΝΤΙΚΕΙΜΕΝΟ

Συστήματα συντεταγμένων

ΕΠΑΝΑΛΗΨΗ Α ΓΥΜΝΑΣΙΟΥ

ΕΝΑΣ ΔΙΚΡΙΤΗΡΙΟΣ ΑΛΓΟΡΙΘΜΟΣ SIMPLEX

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

Αριθμητική Ανάλυση και Εφαρμογές

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΜΑΘΗΜΑΤΙΚΑ Ι (ΘΕ ΠΛΗ 12) ΕΡΓΑΣΙΑ 1 η Ημερομηνία Αποστολής στον Φοιτητή: 17 Οκτωβρίου 2011

Κεφάλαιο 4: Επιλογή σημείου παραγωγής

1. Τι είναι η Κινηματική; Ποια κίνηση ονομάζεται ευθύγραμμη;

Φίλη μαθήτρια, φίλε μαθητή,

Κίνηση ΚΕΦΑΛΑΙΟ 2 Β ΓΥΜΝΑΣΙΟΥ

Ε Μέχρι 18 Μαΐου 2015.

ΦΥΕ 14 Διανύσματα. 1 Περιγραφή διανυσμάτων στο χώρο Γεωμετρική περιγραφή: Τα διανύσματα περιγράφονται σαν προσανατολισμένα ευθύγραμμα

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΧΟΛΗ ΤΜΗΜΑ. Μαθηματικά 2. Σταύρος Παπαϊωάννου

Διαχείριση Εφοδιαστικής Αλυσίδας ΙΙ

D = / Επιλέξτε, π.χ, το ακόλουθο απλό παράδειγμα: =[IA 1 ].

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Παραδείγματα (1 ο σετ) Διανυσματικοί Χώροι

1 x m 2. degn = m 1 + m m n. a(m 1 m 2...m k )x m 1

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Κεφάλαιο 2. Διανύσματα και Συστήματα Συντεταγμένων

Ας δούμε λίγο την θεωρία με την οποία ασχοληθήκαμε μέχρι τώρα.

6 Συνεκτικοί τοπολογικοί χώροι

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

1.4 ΣΥΝΤΕΤΑΓΜΕΝΕΣ ΣΤΟ ΕΠΙΠΕΔΟ

Υπολογιστικά & Διακριτά Μαθηματικά

n, C n, διανύσματα στο χώρο Εισαγωγή

1 Η εναλλάσσουσα ομάδα

Αριθμητική Ανάλυση και Εφαρμογές

Transcript:

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 174 8. Παράλληλη εκτέλεση βρόχων 8.1 Εισαγωγή Στα περισσότερα υπολογιστικά προβλήματα η κύρια πηγή καθυστέρησης είναι οι εμφωλευμένοι βρόχοι (nested loops). Όπως είναι φυσικό, η παραλληλοποίηση τους έχει κερδίσει το ενδιαφέρον της ερευνητικής κοινότητας με αποτέλεσμα τη δημιουργία αρκετών μεθοδολογιών για το μετασχηματισμό ενός εμφωλευμένου βρόχου σε ισοδύναμο βρόχο, ο οποίος να μπορεί να εκτελεστεί παράλληλα. Στην περίπτωση του βρόχου η αντίστοιχη έννοια της εργασίας (task) είναι το στιγμιότυπο (instance) του βρόχου, η έννοια του οποίου περιγράφεται αναλυτικά παρακάτω. Ο τελικός στόχος είναι ο διαμερισμός του συνόλου των στιγμιότυπων του βρόχου σε όσο το δυνατό μεγαλύτερες ομάδες. Το χαρακτηριστικό κάθε ομάδας είναι ότι τα στιγμιότυπα που περιλαμβάνει είναι ανεξάρτητα μεταξύ τους και συνεπώς μπορούν να εκτελεστούν παράλληλα στους διαθέσιμους επεξεργαστές. Ο προσδιορισμός αυτών των ομάδων που ονομάζεται διαμερισμός (partition) των στιγμιότυπων του βρόχου, είναι γενικά δύσκολη διαδικασία και σε ορισμένες περιπτώσεις μη αποτελεσματική. Στη συνέχεια θα δούμε τις προϋποθέσεις υπό τις οποίες ένας τέτοιος διαμερισμός είναι εφικτός και κυρίως αποτελεσματικός. Επίσης, θα παρουσιαστούν ορισμένες βασικές μεθοδολογίες διαμερισμού, που θεωρούμε ώριμες και αντιπροσωπευτικές, χωρίς αυτό να σημαίνει ότι είναι οι μοναδικές. Στο κεφάλαιο αυτό θα μελετηθούν οι βρόχοι, η δομή τους, η κανονικοποίησή τους με ειδική έμφαση στους βρόχους που είναι εμφωλευμένοι (nested) ο ένας μέσα στον άλλο. Κατόπιν θα μελετηθούν οι εξαρτήσεις δεδομένων (Εξαρτήσεις ροής, Αντιεξαρτήσεις, και Εξαρτήσεις Εξόδου) όπως αυτές εμφανίζονται σε εμφωλευμένους βρόχους. Κάθε τύπος εξάρτησης θα μελετηθεί αρχικά σε απλούς βρόχους δηλαδή βρόχους βάθους n=1 για λόγους απλότητας και μεγαλύτερης ευκολίας στην κατανόηση των βασικών εννοιών. Στη συνέχεια θα μελετηθεί σε βρόχους βάθους n=2 όπου εκεί θα γίνει κατανοητή ή γενίκευση των εννοιών για βρόχους οποιουδήποτε βάθους n 2. 8.2 Η δομή του βρόχου 8.2.1 Απλοί βρόχοι Η δομή ενός μονοδιάστατου βρόχου (γνωστή από οποιαδήποτε γλώσσα προγραμματισμού) παρουσιάζεται στο παρακάτω παράδειγμα: for (i=p; i<=q; i=i+s) { H(i); } //end for i

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 175 Ένας βρόχος αποτελείται από ένα δείκτη i, που συνήθως (αλλά όχι πάντα) είναι μια ακέραια μεταβλητή η οποία λαμβάνει τιμές μεταξύ των ακραίων τιμών p και q, που ονομάζονται αρχικό όριο και τελικό όριο του βρόχου, αντίστοιχα. Η μη μηδενική μεταβλητή s 0 ονομάζεται βήμα (stride) του βρόχου. Αν το βήμα είναι θετικό (s > 0) τότε πρέπει το αρχικό όριο να είναι μικρότερο ή ίσο του τελικού ορίου (p q) διαφορετικά ο βρόχος δεν εκτελείται. Αντίστοιχα, αν το βήμα είναι αρνητικό (s<0) τότε πρέπει p q. Στην περίπτωση που p q, p=0 και s=1 ο βρόχος θα ονομάζεται κανονικοποιημένος (normalized). Στην παράγραφο 8.2.2 θα δούμε ότι, υπό συνθήκες, ένας βρόχος με μη μηδενικό βήμα s 1 μπορεί να μετατραπεί σε ισοδύναμο βρόχο με μοναδιαίο βήμα μέσω μιας διαδικασίας που ονομάζεται κανονικοποίηση (normalization). Σε κάθε επανάληψη, εκτελείται ένα σύνολο από εντολές H(i), οι οποίες εξαρτώνται συνήθως από την τιμή που έχει ο δείκτης κατά την επανάληψη αυτή. Οι εντολές αυτές ονομάζονται σώμα (body) ή πυρήνας (core) του βρόχου. Εκτός από την μεταβλητή δείκτη i είναι συχνά χρήσιμο να οριστεί και ο μετρητής επανάληψης i' που δεν είναι άμεσα ορατός και είναι ουσιαστικά ο αύξων αριθμός της επανάληψης αρχίζοντας να μετράμε από το μηδέν, δηλαδή ο μετρητής i' παίρνει τιμές 0,1,2,... κτλ. Κάθε επανάληψη αποτελεί ένα στιγμιότυπο (instance) του βρόχου. Αν ο βρόχος είναι κανονικοποιημένος, δηλαδή έχουμε βήμα s=1 και αρχικό όριο p=0, τότε η τιμή του δείκτη i του βρόχου ταυτίζεται με την τιμή του μετρητή επανάληψης i'. Ας θεωρήσουμε το βρόχο του παραδείγματος 2, ο οποίος υπολογίζει τους πρώτους δέκα όρους της ακολουθίας Fibonacci. Το σώμα H(i) του βρόχου αποτελείται από μια εντολή ανάθεσης: F[i]=F[i-1]+F[i-2]; η οποία εκτελείται για διάφορες τιμές του δείκτη i. Πρακτικά, για κάθε τιμή του δείκτη εκτελείται και μια διαφορετική εντολή ανάθεσης. Για παράδειγμα για i=5 εκτελείται η εντολή F[5]=F[4]+F[3]; ενώ για i=7 εκτελείται η εντολή F[7]=F[6]+F[5];. Παράδειγμα 2 int F[11]; F[0]=0; F[1]=1; for (i=2; i<=10; i=i+1) { F[i]=F[i-1]+F[i-2]; } //end for i Ο βρόχος του παραδείγματος αποτελείται από 9 επαναλήψεις ή στιγμιότυπα, τα οποία καθορίζονται από τις εννέα διαφορετικές τιμές που λαμβάνει ο δείκτης i= 2, 3,..., 10.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 176 Να σημειωθεί ότι η μεταβλητή αυτή λαμβάνει τις ακέραιες τιμές στο διάστημα [2,10] ενώ ο μετρητής επανάληψης i' λαμβάνει τις ακέραιες τιμές στο διάστημα [0,8]. Ο εννοιολογικός αυτός διαχωρισμός μεταξύ της μεταβλητής δείκτη και του μετρητή επανάληψης είναι πολύ σημαντικός για την ανάλυση εξαρτήσεων που θα δούμε σε επόμενες παραγράφους. Οι δύο έννοιες ταυτίζονται μόνο στην περίπτωση που ο βρόχος είναι κανονικοποιημένος. 8.2.2 Κανονικοποίηση βρόχων (Loop Normalization) Στην περίπτωση που ένας βρόχος έχει είτε μη μοναδιαίο βήμα s +1 είτε το αρχικό όριο p του βρόχου δεν είναι το 0, τότε ο δείκτης i δεν ταυτίζεται με τον μετρητή επανάληψης i'. Μπορεί όμως εύκολα να βρεθεί η σχέση μεταξύ των δύο και ο βρόχος να μετασχηματιστεί σε έναν ισοδύναμο βρόχο με βήμα αύξησης +1 και αρχικό όριο 0. Η διαδικασία αυτή ονομάζεται κανονικοποίηση (normalization) και περιγράφεται περιληπτικά στη συνέχεια μέσω του παραδείγματος 3. Παράδειγμα 3 for (i=p; i<=q; i=i+s) { S1(i); S2(i);... } Στο παράδειγμα αυτό ο βρόχος έχει βήμα s 0 ενώ το σώμα του βρόχου αποτελείται από ένα σύνολο εντολών S1(i), S2(i),..., που εξαρτώνται από την τιμή του δείκτη i. Αν θεωρήσουμε τον μετρητή επαναλήψεων i' ο οποίος εκκινεί από την τιμή 0 τότε κατά την επανάληψη i'=0 έχουμε i=p κατά την επανάληψη i'=1 έχουμε i=p+s κατά την επανάληψη i'=2 έχουμε i=p+2s κατά την επανάληψη i'=3 έχουμε i=p+3s... Γενικά i = p + i'*s υπό τον περιορισμό, φυσικά, ότι ο δείκτης i είναι εντός των παρακάτω ορίων p, q. Λύνοντας ως προς i παίρνουμε τον μετρητή επανάληψης σαν συνάρτηση του δείκτη i i = (i p)/s = 0. Προφανώς ο μετρητής επανάληψης έχει αρχική τιμή

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 177 i = (p p)/s = 0 και τελική τιμή i = (q p)/s = q, εφόσον το (q-p) διαιρείται ακριβώς με το s. Γενικά, αν το (q-p) δεν διαιρείται ακριβώς με το s, τότε i = (q p)/s = q όπου x συμβολίζει το ακέραιο μέρος του x. Η τιμή q' ονομάζεται κανονικοποιημένο άνω όριο του βρόχου και είναι πάντα θετικός ακέραιος αριθμός ή μηδέν. Ο αρχικός βρόχος μπορεί να μετασχηματιστεί στον παρακάτω ισοδύναμο βρόχο αντικαθιστώντας το i με i'. for (i'=0; i' <= q'; i'++) { S1(p+s*i'); S2(p+s*i');... } Μια πρακτική εφαρμογή δίνεται στο βρόχο του παραδείγματος 4. Παράδειγμα 4 for (i=100; i>=10; i=i-3) { A[i]=A[i+1]-1; } Στο παράδειγμα αυτό έχουμε s = 3, p = 100, q=10. Το άνω κανονικοποιημένο όριο του βρόχου είναι q = q p = 10 100 = 30. Η σχέση μεταξύ του δείκτη i και του μετρητή επαναλήψεων i' είναι s 3 i = 100 3 i' Με αντικατάσταση του i=100-3 i' η εντολή A[i]=A[i+1]-1 μετασχηματίζεται στην A[100-3*i']=A[101-3*i']-1. Κατά συνέπεια ο βρόχος μετασχηματίζεται στον παρακάτω ισοδύναμο βρόχο: for (i'=0; i'<=36; i'++) { A[100-3*i']=A[101-3*i']-1; } Η μεθοδολογία μπορεί να εφαρμοστεί και στην περίπτωση όπου το βήμα του βρόχου είναι s=1 αλλά το κάτω όριο του βρόχου είναι p 0. Στην περίπτωση αυτή ο

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 178 μετασχηματισμός θα δώσει βρόχο που ξεκινάει από το μηδέν μέχρι το κανονικοποιημένο άνω όριο: q = q p = q p. Για παράδειγμα, ας μελετήσουμε τον παρακάτω βρόχο: 1 Παράδειγμα 5 for (i=2; i<=10; i++) { A[i-2]=A[i]-A[i-1]; } Στο παράδειγμα αυτό έχουμε p=2, q=10, s=1. Το άνω κανονικοποιημένο όριο του βρόχου είναι: q = 10 2 = 8 και ο δείκτης i=p+s i' = 2+i'. Κατά 1 συνέπεια ο βρόχος μετασχηματίζεται στον παρακάτω βρόχο for (i'=0; i'<=8; i'++) { A[i']=A[i'+2]-A[i'+1]; } Παρόμοια είναι η διαδικασία και στην περίπτωση βρόχων μεγαλύτερης διάστασης, όπου εφαρμόζεται ανάλογα και ανεξάρτητα για κάθε εμφωλευμένο βρόχο. Η διαδικασία της κανονικοποίησης είναι περισσότερο σύνθετη στην περίπτωση βρόχων μεγαλύτερου βάθους και ειδικά αν τα όρια του βρόχου δεν είναι σταθεροί αριθμοί αλλά συναρτήσεις των δεικτών. Αν οι συναρτήσεις αυτές είναι γραμμικοί ή μετατοπισμένοι γραμμικοί συνδυασμοί των δεικτών τότε μπορεί να δοθεί μια μεθοδολογία κανονικοποίησης. Στη γενική περίπτωση όμως όπου μπορεί τα όρια του βρόχου να είναι μη γραμμικές συναρτήσεις των δεικτών ή ακόμα και το βήμα αύξησης να είναι συνάρτηση των δεικτών αντί σταθερός αριθμός, η κανονικοποίηση του βρόχου είναι δύσκολη διαδικασία και πολλές φορές αδύνατη. 8.2.3 Εμφωλευμένοι βρόχοι (Nested loops) Αν το σώμα του βρόχου είναι επίσης βρόχος τότε έχουμε έναν εμφωλευμένο βρόχο (nested loop). Οι εμφωλευμένοι βρόχοι είναι γνωστοί και ως πολλαπλά εμφωλευμένοι βρόχοι. Θα αποκαλούμε βάθος (depth) ή διάσταση ενός εμφωλευμένου βρόχου το πλήθος των βρόχων (for-loops) που είναι εμφωλευμένοι ο ένας μέσα στον άλλο. Ο βρόχος του παραδείγματος 2 έχει βάθος n=1, είναι δηλαδή ένας μονοδιάστατος βρόχος, ενώ ο βρόχος του παραδείγματος 6 έχει βάθος n. Αν μεταξύ των εντολών επανάληψης (for) ενός εμφωλευμένου βρόχου δεν παρεμβάλλονται άλλες εντολές, (όπως π.χ. η εντολή H_1(i1,i2) στο παράδειγμα 7

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 179 τότε έχουμε έναν τέλεια εμφωλευμένο βρόχο (perfectly nested loop), ο οποίος έχει τη γενική μορφή του βρόχου του παραδείγματος 6. Παράδειγμα 6. Τέλεια εμφωλευμένος βρόχος βάθους n for ( i1=p1; i1<=q1; i1++ ) { for ( i2=p2; i2<=q2; i2++ ) { for ( i3=p3; i3<=q3; i3++ ) {... for ( in=pn; in<=qn; in++ ) { H(i1,i2,...,in) } //end for in... } //end for i3 } //end for i2 } //end for i1 Αν μεταξύ των διαδοχικών εντολών for παρεμβάλλονται άλλες εντολές, όπως π.χ. η εντολή H_1(i1,i2) στο παράδειγμα 7, τότε ο βρόχος δεν είναι τέλεια εμφωλευμένος. Παράδειγμα 7. Όχι τέλεια εμφωλευμένος βρόχος βάθους 2 for (i1=p1; i1<=q1; i1++) { H1(i1,i2); for (i2=p2; i2<=q2; i2++) { H2(i1,i2) } //end for i2 } //end for i1 Κατά αντιστοιχία με το μονοδιάστατο βρόχο και με άξονα το βρόχο του παραδείγματος 6 μπορούμε να ορίσουμε τις αντίστοιχες έννοιες: Δείκτης (index) ή Στιγμιότυπο ενός πολλαπλά εμφωλευμένου βρόχου βάθους n είναι μια συγκεκριμένη τιμή του n-διάστατου διανύσματος στήλη i = [i1, i2,..., in] T, του οποίου τα στοιχεία είναι οι δείκτες των επιμέρους μονοδιάστατων βρόχων. Αν ο βρόχος είναι μονοδιάστατος (n=1) τότε ο δείκτης του βρόχου είναι τετριμμένο διάνυσμα που αποτελείται από ένα μόνο στοιχείο (i = [i1]). Χώρος των δεικτών (index space) ή Χώρος των στιγμιότυπων (instance space): Κάθε συνιστώσα ik, k=1,...,n του διανυσματικού δείκτη i λαμβάνει τιμές μεταξύ των αντίστοιχων ορίων Pk, Qk. Οι τιμές των επί μέρους δεικτών ik μπορεί να είναι ή μπορεί να μην είναι ακέραιοι αριθμοί. Για παράδειγμα, αν το βήμα αύξησης του δείκτη ik είναι 0.2 και τα αντίστοιχα αρχικά και τελικά όρια είναι Pk=0 και Qk=1, τότε ο δείκτης θα πάρει τις τιμές 0, 0.2, 0.4, 0.6, 0.8, 1.0. Χώρος δεικτών είναι το

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 180 σύνολο των τιμών που μπορεί να πάρει το διάνυσμα i. Στο σημείο αυτό θα πρέπει να αναφερθεί ότι θα ασχοληθούμε με βρόχους των οποίων οι τιμές των δεικτών είναι ακέραιοι αριθμοί. Χώρος των επαναλήψεων: Όπως και στη μονοδιάστατη περίπτωση, για κάθε βρόχο k ενός πολλαπλά εμφωλευμένου βρόχου μπορούμε να ορίσουμε ένα μετρητή επανάληψης ik' ο οποίος παίρνει ακέραιες τιμές ξεκινώντας από το 0. Χώρος επαναλήψεων είναι το σύνολο των τιμών που μπορεί να πάρει το διάνυσμα επαναλήψεων i' = [i1', i2',..., in'] T. Να σημειώσουμε ότι κατά αντιστοιχία με το μονοδιάστατο βρόχο, ο χώρος των επαναλήψεων ταυτίζεται με το χώρο των δεικτών αν το βήμα αύξησης κάθε βρόχου είναι +1, και όλα τα κάτω όρια είναι 0. Όρια (loop limits): Τα όρια ενός πολλαπλά εμφωλευμένου βρόχου βάθους n είναι δύο διανύσματα P (αρχικό όριο) και Q (τελικό όριο), των οποίων τα στοιχεία αποτελούνται αντίστοιχα, από τα αρχικά και τελικά όρια των επιμέρους βρόχων, δηλαδή P = [P1, P2,..., Pn] T και Q = [Q1, Q2,..., Qn] T. Γενικά, τα όρια των επιμέρους βρόχων μπορεί να είναι είτε σταθεροί προκαθορισμένοι αριθμοί, όπως στο παράδειγμα 8, όπου έχουμε P = [0, 5] T, Q = [10, 100] T, είτε συναρτήσεις των δεικτών, όπως στο βρόχο του παραδείγματος 9, όπου έχουμε P = [2, i1] T, Q = [N, N] T. Παράδειγμα 8. Εμφωλευμένος βρόχος με σταθερά όρια. P1 = 0; P2 = 5; Q1 = 10; Q2 = 100; for (i1=p1; i1<=q1; i1++ ) { for (i2=p2; i2<=q2; i2++) { A[i1,i2]=A[i1-1,i2-2]+2; };//end i1 };//end i2 Παράδειγμα 9. Εμφωλευμένος βρόχος όπου τα όρια είναι συναρτήσεις των δεικτών. for (i1=2; i1<=n; i1++ ) { for (i2=i1; i2<=n; i2++ ) { H(i1,i2); } } Σώμα (loop body) ή Πυρήνας (core) ενός εμφωλευμένου βρόχου: κατά αντιστοιχία με το μονοδιάστατο βρόχο, είναι το σύνολο των εντολών που εκτελούνται στο βρόχο

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 181 του οποίου το σώμα δεν περιλαμβάνει άλλους βρόχους, δηλαδή στον πιο εσωτερικό βρόχο. Ιδιαίτερη σημασία έχει η περίπτωση όπου το σώμα του βρόχου αποτελείται από μία η περισσότερες εντολές ανάθεσης που πραγματοποιούν αναφορές σε θέσεις πινάκων, όπως στο παράδειγμα 8 και στα περισσότερα παραδείγματα που θα μελετήσουμε στο κεφάλαιο αυτό. Γενικά, σε ένα εμφωλευμένο βρόχο βάθους n το διάνυσμα δεικτών, i, έχει διάσταση n, όπως και το διάνυσμα των κάτων ορίων P και των άνω ορίων Q. Γεωμετρικά, ένα στιγμιότυπο μπορεί να αναπαρασταθεί ως ένα σημείο στο n-διάστατο χώρο, του οποίου συντεταγμένες είναι οι συνιστώσες του διανύσματος i. Στη συνέχεια παραθέτουμε τρία παραδείγματα. Στο παράδειγμα 10 τα όρια των βρόχων είναι σταθεροί αριθμοί. Ο χώρος των δεικτών (J 2 ) στην περίπτωση αυτή περιγράφεται από ένα ορθογώνιο παραλληλόγραμμο όπως απεικονίζεται στο Σχήμα 46A. Παράδειγμα 10. for (i1=2; i1<=10; i1++) { for (i2=3; i2<=5; i2++) { A[i1,i2]=A[i1-1,i2-2]+2; } //end i1 } //end i2 Στο παράδειγμα 11 απεικονίζεται ένας διπλά εμφωλευμένος βρόχος, του οποίου το αρχικό όριο P2 είναι γραμμική συνάρτηση του δείκτη i1. Στο Σχήμα 46Β απεικονίζεται ο χώρος των στιγμιότυπων, ο οποίος δεν είναι πλέον παραλληλόγραμμο αλλά ένα κυρτό πολύγωνο (τρίγωνο). Παράδειγμα 11. for (i1=2; i1<=10 ;i1++) { for (i2=i1; i2<=5; i2++) { A[i1,i2]=A[i1-1,i2-2]+2; } //end i1 } //end i2

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 182 Σχήμα 46. (Α) Ο χώρος δεικτών του βρόχου του παραδείγματος 10. (Β) ο χώρος δεικτών του παραδείγματος 11. Φυσικά, υπάρχουν και βρόχοι των οποίων τα όρια δεν είναι γραμμικές συναρτήσεις των δεικτών και έχουν μη κυρτό περίγραμμα όπως ο βρόχος του παραδείγματος 12 του οποίου ο χώρος των δεικτών απεικονίζεται στο Σχήμα 47. Η μελέτη τέτοιου είδους βρόχων είναι πέρα από τους στόχους του βιβλίου. Παράδειγμα 12. for (i1=1; i1<=10; i1++) { for (i2=min(3,max(5-i1,1)); i2<=max(10-3i1, floor((i1 + 6)/2)); i2++) { S1; S2;... Sn; } //end i2 } //end i1

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 183 Σχήμα 47. O χώρος δεικτών του βρόχου του παραδείγματος 12, του οποίου το περίγραμμα είναι μη κυρτό. 8.3 Λεξικογραφική διάταξη των στιγμιότυπων Στο σύνολο των στιγμιότυπων είναι χρήσιμο να ορίσουμε δυο τελεστές: (α) prec που σημαίνει προηγείται και (β) succ που σημαίνει ακολουθεί. Το στιγμιότυπο i θα λέμε ότι προηγείται (έπεται) του στιγμιοτύπου j αν κατά τη σειριακή εκτέλεση του βρόχου εκτελείται πριν (μετά) από αυτό. Στην περίπτωση του μονοδιάστατου βρόχου οι τελεστές prec και succ ταυτίζονται με τους τελεστές μικρότερο ( < ) και μεγαλύτερο ( > ) αντίστοιχα. Επίσης, τα διανύσματα i και j είναι τετριμμένα διανύσματα μιας διάστασης και ταυτίζονται με τις ακέραιες μεταβλητές i, j αντίστοιχα. Στην περίπτωση όμως βρόχων μεγαλύτερου βάθους τα στιγμιότυπα είναι μη τετριμμένα διανύσματα, οι έννοιες μικρότερο και μεγαλύτερο δεν είναι προφανείς και πρέπει να οριστούν. Κατά την εκτέλεση των στιγμιότυπων του βρόχου αυτό που μας ενδιαφέρει είναι ο καθορισμός ενός τρόπου μέσω του οποίου να γνωρίζουμε ποιο στιγμιότυπο προηγείται στην εκτέλεση και ποιο ακολουθεί. Αν όλα τα στιγμιότυπα είναι ανεξάρτητα μεταξύ τους τότε δεν μας ενδιαφέρει η σειρά της εκτέλεσης τους. Στην περίπτωση όμως που επιβάλλεται συγκεκριμένη σειρά εκτέλεσης π.χ. λόγω ύπαρξης εξαρτήσεων που θα

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 184 δούμε στο επόμενο κεφάλαιο τότε θα πρέπει τα στιγμιότυπα να εκτελεστούν με συγκεκριμένη σειρά έτσι ώστε ο παράλληλος αλγόριθμος που θα σχεδιαστεί για τον παραλληλισμό του βρόχου να είναι ισοδύναμος με το σειριακό. Πώς όμως μπορούμε να βρούμε τον ακριβή καθορισμό της διάταξης μεταξύ δύο διανυσμάτων στιγμιότυπων, i και j δηλαδή ποιο στιγμιότυπο από τα δύο προηγείται και ποιο ακολουθεί; Ας παρατηρήσουμε τον παρακάτω διπλό βρόχο for (i1=0; i1<=10; i1++) { for (i2=0; i2<=10; i2++) {...... } } Βλέπουμε ότι για μια δεδομένη τιμή του δείκτη i1 π.χ. i1=2 κινείται ο δείκτης i2 εντός των ορίων του (Σχήμα 48) οπότε εκτελούνται όλα τα στιγμιότυπα (2,0), (2,1), (2,2),..., (2,10). Κατόπιν αλλάζει η τιμή του δείκτη i1 και γίνεται i1=3 και ακολουθούν τα στιγμιότυπα (3,0), (3,1), (3,2),...,(3,10). Συνεπώς: μεταξύ λοιπόν δυο στιγμιότυπων έπεται εκείνο που έχει μεγαλύτερη τιμή στον πρώτο δείκτη i1, π.χ μεταξύ του (2,5) και (3,2) αυτό που έπεται είναι το (3,2), ενώ μεταξύ δυο στιγμιότυπων που έχουν ίδια τιμή ως προς το δείκτη i1 έπεται αυτό που έχει μεγαλύτερη τιμή ως προς το δείκτη i2. Για παράδειγμα, το στιγμιότυπο (2,6) έπεται του στιγμιότυπου (2,3). Υπάρχει, δηλαδή, μια λεξικογραφική διάταξη μεταξύ των στιγμιότυπων, όπως ακριβώς και με τις λέξεις: Αν για παράδειγμα θέλουμε να ταξινομήσουμε τις λέξεις Αύριο και Σήμερα θα ελέγξουμε κατά αρχήν το πρώτο γράμμα και θα πάρουμε την κατάταξη Αύριο, Σήμερα. Αν θέλουμε να κατατάξουμε τις λέξεις Αυγό και Αυγή, τότε η κατάταξη θα γίνει με βάση το τέταρτο γράμμα, αφού τα προηγούμενα τρία ταυτίζονται και θα έχουμε την κατάταξη Αυγή, Αυγό. Αυτό συμβαίνει και με τα στιγμιότυπα.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 185 Σχήμα 48. Διάταξη της σειριακής εκτέλεσης των στιγμιότυπων ενός βρόχου βάθους n=2. Η διακεκομμένη γραμμή μπορεί να θεωρηθεί ως άξονας του χρόνου. Αν τεντώσουμε νοητά τη διακεκομμένη γραμμή ώστε να γίνει ευθεία μπορούμε να κατανοήσουμε γεωμετρικά τη λεξικογραφική διάταξη κατά την εκτέλεση μεταξύ των στιγμιότυπων. Αυτό που είναι λεξικογραφικά μικρότερο από το άλλο θα εκτελεστεί σε μικρότερη χρονική στιγμή. Γενικά, μπορούμε να ορίσουμε τη λεξικογραφική προήγηση μεταξύ δυο στιγμιότυπων i, j ενός n-διάστατου εμφωλευμένου βρόχου, δηλαδή τη σχέση i prec j, ως: i=[i1, i2,..., in] prec j=[j1, j2,, jn] i1<j1 ή i1=j1 και i2<j2 ή i1=j1 και i2=j2 και i{n-1}=j{n-1} και in<jn Εντελώς αντίστοιχα ορίζεται και το σχέη i succ j (το στιγμιότυπο i ακολουθεί το στιγμιότυπο j): i=[i1, i2,..., in] succ j=[j1, j2,, jn] i1>j1 ή i1=j1 και i2>j2 ή i1=j1 και i2=j2 και i{n-1}=j{n-1} και in>jn

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 186 8.4 Εξαρτήσεις ροής 8.4.1 Εξαρτήσεις ροής σε απλούς βρόχους Ας θεωρήσουμε το μονοδιάστατο βρόχο του παραδείγματος 13. Παράδειγμα 13. Βρόχος με εξαρτήσεις ροής. int A[11]; for (i=2; i<=10; i+=1) { A[i]=A[i-2]+1; }; Ξεδιπλώνοντας το βρόχο (Σχήμα 49) διαπιστώνουμε ότι αυτός εκφράζει την σειριακή εκτέλεση ενός συνόλου εντολών S(2),... S(10), κάθε μια από τις οποίες αντιστοιχεί και σε ένα στιγμιότυπο. Ας θεωρήσουμε δύο στιγμιότυπα του βρόχου με δείκτες i, j αντίστοιχα Κατά το στιγμιότυπο i εκτελείται η εντολή: A[i] = A[i-2] + 1 Ενώ κατά το στιγμιότυπο j εκτελείται η εντολή: A[j] = A[j-2] + 1 Κάθε θέση του πίνακα Α αντιστοιχεί σε μια θέση μνήμης. Το στιγμιότυπο i εγγράφει στην θέση A[i] ενώ το στιγμιότυπο j κάνει ανάγνωση από τη θέση A[j-2]. Αν ισχύει i = j 2 για κάποια i, j {2,3,...,10} τότε τα δύο στιγμιότυπα γράφουν και διαβάζουν την ίδια θέση μνήμης. Από την παραπάνω εξίσωση προκύπτει i < j δηλαδή, το στιγμιότυπο i προηγείται του j κατά τη σειριακή εκτέλεση του βρόχου. Υπάρχει συνεπώς κίνδυνος Ανάγνωσης μετά από Εγγραφή (Read After Write RAW). Η ορθή εκτέλεση του προγράμματος από ένα παράλληλο σύστημα απαιτεί το στιγμιότυπο i να εκτελεστεί πριν από το j αλλιώς θα υπάρξει σφάλμα. Λέμε ότι έχουμε μια εξάρτηση ροής μεταξύ των στιγμιότυπων i και j. Για παράδειγμα, στο στιγμιότυπο S(5) γίνεται ανάγνωση της θέσης Α[3] η οποία όμως εγγράφεται κατά το στιγμιότυπο S(3). Στιγμιότυπα, τα οποία δεν συνδέονται με εξαρτήσεις μπορούν να εκτελεστούν παράλληλα. Στο σχήμα Σχήμα 49Α, φαίνονται οι εντολές που εκτελούνται και στο σχήμα Σχήμα 49Β, οι αντίστοιχες εξαρτήσεις μεταξύ των στιγμιότυπων του. μεταξύ των στιγμιότυπων i, j

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 187 Σχήμα 49. Οι εντολές που εκτελούνται στο βρόχο του παραδείγματος 13. (Α) Το ξεδίπλωμα του βρόχου. (Β) Οι εξαρτήσεις ροής μεταξύ των στιγμιότυπων. (C) Ο γράφος των εξαρτήσεων μεταξύ των στιγμιότυπων και (D) O χώρος των στιγμιότυπων Αν ονομάσουμε i, j τα διανύσματα δεικτών δύο στιγμιοτύπων που έχουν εξάρτηση ροής μεταξύ τους (το j κάνει ανάγνωση και το i κάνει εγγραφή), τότε η διαφορά d = j i καλείται διάνυσμα εξάρτησης. Στη συγκεκριμένη περίπτωση έχουμε πολλά ζεύγη στιγμιοτύπων που εξαρτώνται μεταξύ τους: Στιγμιότυπο όπου γίνεται εγγραφή Στιγμιότυπο όπου γίνεται ανάγωνση Διάνυσμα εξάρτησης

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 188 i = 2 j = 4 d = j i = 2 i = 3 j = 5 d = j i = 2 i = 8 j = 10 d = j i = 2 Παρατηρούμε ότι σε όλες τις εξαρτήσεις το διάνυσμα εξάρτησης είναι πάντα ίδιο και ίσο με d = 2. Στην περίπτωση αυτή το διάνυσμα d είναι τετριμμένο (έχει διάσταση 1) καθώς ο βρόχος έχει βάθος 1 και τα διανύρματα δεικτών i, j, έχουν επίσης διάσταση 1. 8.4.2 Εξαρτήσεις ροής σε πολλαπλά εμφωλευμένους βρόχους Τα παραπάνω γενικεύονται ευθέως σε εμφωλευμένους βρόχους μεγαλύτερου βάθους. Ας θεωρήσουμε το βρόχο του ακόλουθου παραδείγματος: Παράδειγμα 14. Εμφωλευμένος βρόχος με εξαρτήσεις ροής. for (i1=2; i1<=10; i1++) { for (i2=2; i2<=10; i2++) { A[i1,i2]=A[i1-1,i2-2]+2; } //end for i1 } //end for i2 Οι εξαρτήσεις ενός πολλαπλά εμφωλευμένου βρόχου υπολογίζονται με την ίδια μεθοδολογία που εφαρμόσαμε και στην περίπτωση του μονοδιάστατου βρόχου. Έστω δύο στιγμιότυπα i = [i1, i2], j = [i1, i2] Κατά το i εκτελείται η εντολή: A[i1,i2] = A[i1-1,i2-2]+2; ενώ κατά το j εκτελείται η εντολή: A[j1,j2] = A[j1-1,j2-2]+2; Όπως φαίνεται στο Σχήμα 50, αν ισχύει [i1, i2] = [j1 1, j2 2] ή [i1, i2] = [j1, j2] [1, 2] ή i = j [1, 2] τότε το στιγμιότυπο j να κάνει ανάγνωση από την ίδια θέση μνήμης στην οποία εγγράφει το στιγμιότυπο i. Για να συμβεί αυτό πρέπει να υπάρχουν ακέραιοι i1, i2, j1, j2 εντός των ορίων του βρόχου, (δηλαδή 2 i1, i2 10 και 2 j1, j2 10) τέτοιοι ώστε

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 189 i1 = j1 1 και i2 = j2 2. Από την παραπάνω εξίσωση προκύπτει i < j δηλαδή το στιγμιότυπο i προηγείται λεξικογρφικά του j. Θυμίζουμε τον ορισμό της λεξικογραφικής προήγησης: i < j i1 < j1 ή Σχήμα 50. Εξίσωση εξάρτησης ροής σε διπλά εμφωλευμένο βρόχο. i1 = j1 και i2 < j2 Συνεπώς υπάρχει πάλι κίνδυνος Ανάγνωσης μετά από εγγραφή (RAW) αφού το στιγμιότυπο που διαβάζει (j) πρέπει να έπεται του στιγμιοτύπου που γράφει (i). Όπως και πριν, το διάνυσμα d = [1, 2] = j i καλείται διάνυσμα εξάρτησης. Στο Σχήμα 51 φαίνονται οι εξαρτήσεις μεταξύ των στιγμιοτύπων καθώς και το διάνυσμα εξάρτησης.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 190 Σχήμα 51. Ο χώρος των στιγμιότυπων του βρόχου του παραδείγματος 14 και το διάνυσμα εξάρτησης d=[1, 2]. 8.5 Αντιεξαρτήσεις 8.5.1 Αντιεξαρτήσεις σε απλούς βρόχους Ας θεωρήσουμε τον παρακάτω μονοδιάστατο βρόχο Παράδειγμα 15. Βρόχος με αντιεξαρτήσεις. int A[11]; for (i=0; i<=7; i++) { A[i]=A[i+3]+1; }; Ας πάρουμε, όπως και πριν, δύο στιγμιότυπα i, j: Κατά το στιγμιότυπο i εκτελείται η εντολή: A[i]=A[i+3]+1; Ενώ κατά το στιγμιότυπο j εκτελείται η εντολή A[j]=A[j+3]+1;. Το στιγμιότυπο i κάνει εγγραφή στη θέση μνήμης A[i] ενώ το στιγμιότυπο j κάνει ανάγνωση από τη θέση μνήμης A[j+3]. Υπάρχει αναταγωνισμός μεταξύ ανάγνωσης και εγγραφής αν ισχύει

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 191 i = j + 3 για κάποιο ζευγάρι τιμών i, j εντός των ορίων του βρόχου (δηλαδή 0 i 7 και 0 j 7). Από το παραπάνω είναι προφανές ότι i > j δηλαδή το στιγμιότυπο i έπεται του j στην σειριακή εκτέλεση του βρόχου. Επειδή στη σειριακή εκτέλεση το i κάνει εγγραφή μετά από το j που κάνει ανάγνωση μιλάμε για κίνδυνο Εγγραφής μετά από Ανάγνωση (Write After Read WAR). Η ορθή εκτέλεση επιβάλλει την εκτέλεση του i μετά από το j σε ένα παράλληλο σύστημα, αλλιώς θα υπάρξει σφάλμα. Συνεπώς υπάρχει εξάρτηση μεταξύ των στιγμιοτύπων i και j η οποία καλείται αντιεξάρτηση. Στο Σχήμα 52, φαίνεται η αντιεξάρτηση μεταξύ των στιγμιότυπων i, j αν η εξίσωση αντιεξάρτησης: i = j+3 έχει ακέραιες λύσεις εντός του χώρου των δεικτών. j=j:.. i=i: A[j]=A[j+3]+1; A[i]=A[i+3]+1; Το διάνυσμα d* = i j = 3 = d Σχήμα 52. Γενική περίπτωση Αντιεξάρτησης. καλείται διάνυσμα απόστασης της αντιεξάρτησης (στην περίπτωση αυτή είναι ένα τετριμμένο διάνυσμα 1 διάστασης καθώς ο βρόχος έχει βάθος 1). Στο Σχήμα 53 απεικονίζεται το διάνυσμα απόστασης εξάρτησης μεταξύ όλων των στιγμιότυπων του βρόχου του παραδείγματος 15.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 192 Σχήμα 53. Αντιεξάρτηση (παράδειγμα 15) (A) Το ξεδίπλωμα του βρόχου. (Β) Οι αντιεξαρτήσεις (διανύσματα απόστασης). (C) Ο Γράφος εξάρτησης των στιγμιότυπων και (D) Ο χώρος των στιγμιότυπων

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 193 8.5.2 Αντιεξαρτήσεις σε πολλαπλά εμφωλευμένους βρόχους Σε πολλαπλά εμφωλευμένους βρόχους γενικεύεται εύκολα η ανάλυση εξαρτήσεων που έχει ήδη παρουσιαστεί. Έστω ο παρακάτω βρόχος Παράδειγμα 16. Εμφωλευμένος βρόχος με αντιεξαρτήσεις. for (i1=2; i1<=10; i1++) { for (i2=2; i2<=10; i2++){ A[i1-1,i2] = A[i1,i2-2]+1; } //end for i1 } //end for i2 Θεωρούμε δύο στιγμιότυπα i = [i1, i2] και j = [j1, j2], που εκτελούν τις εντολές A[i1 1,i2] = A[i1,i2 2]+1; A[j1 1,j2] = A[j1,j2 2]+1; Κατά το i γίνεται εγγραφή στη θέση A[i1 1,i2] ενώ κατά το j γίνεται ανάγνωση από τη θέση A[j1,j2 2]. Τα δύο αυτά στιγμιότυπα προσπελαύνουν την ίδια θέση μνήμης αν [i1 1,i2] = [j1,j2 2] ή [i1, i2] + [ 1, 0] = [j1,j2] + [0, 2] ή i = j + [1, 2] Είναι εμφανές ότι το i είναι λεξικογραφικά μεγαλύτερο του j αφού i1 = j1+1 i1 > j1. Συνεπώς, κατά την σειριακή εκτέλεση του βρόχου το i έπεται του j. Έχουμε κίνδυνο εγγραφής μετά από ανάγνωση και συνεπώς αντιεξάρτηση μεταξύ των δύο στιγμιοτύπων. Το διάνυσμα απόστασης της αντιεξάρτησης είναι d* = i j = [1, 2] Για παράδειγμα, το στιγμιότυπο [i1, i2] = [3, 3] γράφει στη θέση A[2, 3] ενώ το στιγμιότυπο [j1, j2] = [2, 5] διαβάζει από τη θέση A[2, 3] Στη σειριακή εκτέλεση του βρόχου, το στιγμιότυπο [3,3] έπεται του στιγμιότυπου [2,5] (εγγραφή μετά από ανάγνωση) κι έτσι έχουμε μια αντιεξάρτηση μεταξύ των δύο στιγμιοτύπων. Στο Σχήμα 54 απεικονίζεται ο χώρος των στιγμιοτύπων και το διάνυσμα απόστασης της αντιεξάρτησης.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 194 Σχήμα 54. Ο χώρος των στιγμιότυπων του παραδείγματος 16 και το διάνυσμα απόστασης αντιεξάρτησης d=[1, -2].

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 195 8.6 Εξαρτήσεις εξόδου Όπως είδαμε παραπάνω, οι εξαρτήσεις ροής αντιστοιχούν στον κίνδυνο Read-After- Write (RAW) ενώ οι αντι-εξαρτήσεις αντιστοιχούν στον κίνδυνο Write-After-Read (WAR). Στην περίπτωση των εξαρτήσεων εξόδου έχουμε του κινδύνου της Εγγραφής μετά από Εγγραφή (Write After Write WAW). Εξαρτήσεις εξόδου μπορούν να εμφανιστούν όταν το σώμα του εμφωλευμένου βρόχου περιέχει περισσότερες από μια εντολές, όπως για παράδειγμα ο παρακάτω βρόχος. Παράδειγμα 17 for (i=2; i<=10; i++){ A[i+2] = B[i]+4*C[i]; A[i] = B[i]+1; } Για τις εξαρτήσεις εξόδου εφαρμόζουμε ανάλογη μεθοδολογία με τις εξαρτήσεις ροής και τις αντιεξαρτήσεις. Θεωρούμε δυο στιγμιότυπα i, j όπου i < j (βλ. (Σχήμα 55). Σχήμα 55. Γενική περίπτωση εξάρτησης εξόδου. Έχουμε εξάρτηση εξόδου αν και τα δύο στιγμιότυπα γράφουν στην ίδια θέση μνήμης. Σε αυτή την περίπτωση η ορθή εκτέλεση του προγράμματος από ένα παράλληλο σύστημα απαιτεί το j να εκτελεστεί μετά το i ώστε η τελευταία τιμή που γράφεται να είναι η σωστή. Για να έχουμε εξάρτηση εξόδου πρέπει να υπάρχουν ακέραιοι i, j, εντός των ορίων των δεικτών του βρόχου (δηλαδή 2 i 10 και 2 j 10) έτσι ώστε: είτε είτε i+2 = j i = j+2. Οι περιπτώσεις i+2 = j+2 και i=j αποκλείονται αφού i j. Η πρώη εξίσωση δίνει i < j ενώ η δεύτερη i > j Αφού όμως κάναμε την υπόθεση ότι το i προηγείται του j κατά την σειριακή εκτέλεση του βρόχου, τότε μόνο η πρώτη εξίσωση μπορεί να ισχύει και άρα υπάρχει εξάρτηση

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 196 μεταξύ των στιγμιοτύπων i, j όπου j = i+2. Με άλλα λόγια υπάρχει εξάρτηση εξόδου στα ζεύγη [i, i+2], δηλαδή στα ζεύγη [2,4], [3,5], [4,6],... Ο παρακάτω πίνακας δείχνει τα στιγμιότυπα 2 έως 10 με τις αντίστοιχες εξαρτήσεις εξόδου. (οι εξαρτήσεις εξόδου συμβολίζονται με ένα βέλος που περιέχει ένα μικρό κύκλο)

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 197 Η διαφορά d ο = j i = 2 Στιγμιότυπα: Εντολές i=2 A[4] = B[2]+4*C[2]; A[2] = B[2]+1; i=3 A[5] = B[3]+4*C[3]; A[3] = B[3]+1; i=4 A[6] = B[4]+4*C[4]; A[4] = B[4]+1; i=5 A[7] = B[5]+4*C[5]; A[5] = B[5]+1; i=6 A[8] = B[6]+4*C[6]; A[6] = B[6]+1; i=7 A[9] = B[7]+4*C[7]; A[7] = B[7]+1; i=8 A[10] = B[8]+4*C[8]; A[8] = B[8]+1; i=9 A[11] = B[9]+4*C[9]; A[9] = B[9]+1; i=10 A[12] = B[10]+4*C[10]; A[10] = B[10]+1; καλείται διάνυσμα εξάρτησης εξόδου. Στη συγκεκριμένη περίπτωση είναι μιας διάστασης (τετριμμένο διάνυσμα) καθώς ο βρόχος είναι μονοδιάστατος. Ωστόσο αντίστοιχη ανάλυση όπως πριν μπορεί να γίνει και σε βρόχους πολλών διαστάσεων. 8.7 Παράδειγμα βρόχου με περισσότερες από μία εξαρτήσεις Είναι προφανές ότι το σώμα του βρόχου είναι δυνατό να αποτελείται από περισσότερες από μία εντολές ανάθεσης και να υπάρχουν περισσότερες από μία εξαρτήσεις όπως θα φανεί στο παρακάτω Παράδειγμα 18. int A[N]; for (int i=3; i<=ν; i++) { A[i] = A[i+2]+2*A[i-2]; A[i+4] = 2*A[i+2]+B[i-1]; B[i] = A[i-2]*B[i-3]+1; }

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 198 Ας θεωρήσουμε δύο στιγμιότυπα i και j με τις αντίστοιχες εντολές τους όπως φαίνεται στον παρακάτω πίνακα: Στιγμιότυπο i A[i] = A[i+2]+2*A[i-2]; A[i+4] = 2*A[i+2]+B[i-1]; B[i] = A[i-2]*B[i-3]+1; Στιγμιότυπο j A[j] = A[j+2]+2*A[j-2]; A[j+4] = 2*A[j+2]+B[j-1]; B[j] = A[j-2]*B[j-3]+1; Για να εντοπίσουμε τις διάφορες εξαρτήσεις (εξαρτήσεις ροής, αντι-εξαρτήσεις και εξαρτήσεις εξόδου) ακολουθούμε τα εξής βήματα: Βήμα 1: Βρίσκουμε τις θέσεις μνήμης όπου κάνει εγγραφή το στιγμιότυπο i και τις θέσεις μνήμης απ όπου κάνει ανάγνωση το στιγμιότυπο j, όπως φαίνεται στον παρακάτω πίνακα: Θέσεις μνήμης όπου εγγράφει το i A[i] A[i+4] B[i] Θέσεις μνήμης απ όπου διαβάζει το j A[j+2] A[j-2] B[j-1] B[j-3] Βήμα 2: Βρίσκουμε όλες τις εξαρτήσεις ροής (RAW) και αντι-εξαρτήσεις (WAR) βρίσκοντας όλους τους δυνατούς συνδυασμούς με τους οποίους οι θέσεις μνήμης εγγραφής του στιγμιοτύπου i είναι ίδιες με τις θέσεις μνήμης ανάγνωσης του στιγμιοτύπου j. Στο συγκεκριμένο παράδειγμα όλες οι εξαρτήσεις τύπου RAW και WAR είναι οι παρακάτω: Συνθήκη ανταγωνισμού Σχέση Εξάρτησης Θέση A[i] είναι ίδια με A[j+2] i = j + 2 i = j + 2 Θέση A[i] είναι ίδια με A[j 2] i = j 2 i = j 2 Θέση A[i+4] είναι ίδια με A[j+2] i + 4 = j + 2 i = j 2 Θέση A[i+4] είναι ίδια με A[j 2] i + 4 = j 2 i = j 6 Θέση B[i] είναι ίδια με B[j 1] i = j 1 i = j 1 Θέση B[i] είναι ίδια με B[j 3] i = j 3 i = j 3 Παρατηρούμε ότι η σχέση εξάρτησης i = j 2 εμφανίζεται 2 φορές. Αυτό σημαίνει ότι ζεύγος στιγμιοτύπων [i, j] = [j 2, j] θα εμπεριέχει εξάρτηση για 2 διαφορετικούς λόγους: 1. επειδή η θέση A[i] είναι ίδια με A[j 2]

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 199 2. επειδή η θέση A[i+4] είναι ίδια με A[j+2] Προφανώς εμείς θα μετρήσουμε την εξάρτηση μεταξύ των i και j μόνο μια φορά, άσχετα από το πόσοι λόγοι συντρέχουν γι αυτό. Βήμα 3: Χρησιμοποιώντας τα αποτελέσματα από το Βήμα 2, βρίσκουμε τις μοναδικές σχέσεις εξαρτήσεων (αφαιρούμε όσες επαναλαμβάνονται). Υπολογίζουμε το διάνυσμα εξάρτησης d = j i. Αν το διάνυσμα είναι θετικό τότε έχουμε εξάρτηση ροής διαφορετικά έχουμε αντιεξάρτηση. Σε περίπτωση πολυδάστατων βρόχων ελέγχουμε αντίστοιχα αν το d είναι λεξικογραφικά μεγαλύτερο από το μηδέν (εξάρτηση ροής) ή όχι (αντιεξάρτηση). Εξαρτώμενα στιγμιότυπα Σχέση Εξάρτησης Διάνυσμα εξάρτησης d = j i Διάνυσμα Απόστασης Εξάρτησης d* = i j Εξάρτηση Ροής ή Αντιεξάρτηση i, j i = j 6 6 Εξάρτηση ροής i, j i = j 3 3 Εξάρτηση ροής i, j i = j 2 2 Εξάρτηση ροής i, j i = j 1 1 Εξάρτηση ροής i, j i = j + 2 2 +2 Αντιεξάρτηση Βήμα 4: Για τον υπολογισμό των εξαρτήσεων εξόδου υποθέτουμε ότι το στιγμιότυπο i προηγείται του στιγμιοτύπου j. Βρίσκουμε όλους τους δυνατούς συνδυασμούς όπου οι θέσεις μνήμης εγγραφής του i είναι ίδιες με τις θέσεις μνήμης εγγραφής του j, όπως στον παρακάτω πίνακα: Συνθήκη ανταγωνισμού 2 Θέση A[i] είναι ίδια με A[j+4] i = j + 4 i = j + 4 Θέση A[i+4] είναι ίδια με A[j] i + 4 = j i = j 4 Σχέση Εξάρτησης Επειδή υποθέσαμε ότι το στιγμιότυπο i προηγείται του στιγμιοτύπου j, δηλαδή i < j, ισχύει μόνο η δεύτερη σχέση εξάρτησης του παραπάνω πίνακα. Συνεπώς έχουμε μία μόνο σχέση εξάρτησης εξόδου i = j 4 και το διάνυσμα εξάστησης εξόδου είναι d ο = j i = 4. 2 Σημειώνουμε ότι δεν μας απασχολούν οι συνθήκες Θέση A[i] είναι ίδια με A[j], Θέση A[i+4] είναι ίδια με A[j+4], και Θέση B[i] είναι ίδια με B[j] γιατί υποθέσαμε i j.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 200 Στο Σχήμα 56 φαίνονται όλες οι εξαρτήσεις για το παράδειγμα 18 ( = εξαρτήσεις ροής, = αντιεξαρτήσεις και = εξαρτήσεις εξόδου). S(3) S(4) S(5) S(6) S(7) S(8) S(9) S(10) S(11) Σχήμα 56. Τα στιγμιότυπα i=3 (κόμβος S(3)), i=4 (κόμβος S(4)),, i=11 (κόμβος S(11)) του παραδείγματος 18 και οι εξαρτήσεις τους. Για λόγους πρακτικούς δεν εμφανίζονται όλες οι ακμές εξάρτησης παρά μόνο αυτές που ξεκινούν ή καταλήγουν στο στιγμιότυπο 5. 8.8 Απεικόνιση Η εξαγωγή των εξαρτήσεων είναι το πρώτο βήμα για τον παραλληλισμό του βρόχου. Όπως είδαμε και στο Κεφάλαιο 7, το επόμενο βήμα είναι η απεικόνιση, δηλαδή ο διαμερισμός (partition) των στιγμιοτύπων σε διεργασίες που εκτελούνται σε ένα μόνο επεξεργαστή. Στο Σχήμα 57 δίνονται δύο σενάρια απεικόνισης του ίδιου γράφου σε τρεις επεξεργαστές: E0, E1, E2. E 0 E 1 E 2 E 0 E 1 E 2 (α) (β) Σχήμα 57. Απεικόνιση γράφου σε 3 επεξεργαστές: E0, E1, E2. (α) Μη γραμμική απεικόνιση (β) Γραμμική απεικόνιση.

ΔΙΚΤΥΟ Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 201 Ε0 Ε 0,0 Ε 0,1.... Ε 0,Ν Ε1 Ε 1,0 Ε 1,1.... Ε 1,Ν Ε2 Ε 2,0 Ε 2,1.... Ε 2,Ν............ ΕΝ Ε Ν,0 Ε Ν,1.... Ε Ν,Ν (α) (β) Σχήμα 58. (α) Διάταξη επεξεργαστών σε γραμμή. (β) Διάταξη επεξεργαστών σε 2- διάστατο πλέγμα. Γραμμική διάταξη επεξεργαστών Στην περίπτωση που οι επεξεργαστές Ε 0, Ε 1,..., Ε K, αποτελούν μια γραμμική διάταξη όπως στο Σχήμα 58α, η απεικόνιση είναι ουσιαστικά μια συνάρτηση f() που απεικονίζει το διάνυσμα δεικτών του στιγμιοτύπου i σε έναν αύξοντα αριθμό n επεξεργαστή. Έτσι, η σχέση n = f(i) σημαίνει ότι το στιγμιότυπο i θα εκτελεστεί στον επεξεργαστή E n. Όταν η συνάρτηση f είναι μη γραμμική, τότε η ομαδοποίηση των στιγμιοτύπων σε διεργασίες (διακεκομμένες περιοχές) είναι, εν γένει, ακανόνιστη όπως φαίνεται στο Σχήμα 57α. Στην πιο απλή περίπτωση η απεικόνιση γίνεται γραμμικά, δηλαδή η f είναι της μορφής: f(i) = p 1 i1 + p 2 i2 + + p N in + p 0 για κάποιους σταθερούς συντελεστές {p i }. Η περίπτωση αυτή δείχνεται στο Σχήμα 57β. Εδώ βλέπουμε ότι η ομαδοποίηση των στιγμιοτύπων δίνει ευθύγραμμες περιοχές (διακεκομμένα παραλληλόγραμμα). Γενικά η γραμμική απεικόνιση δίνει περιοχές που είναι είτε ευθείες, στις 2 διαστάσεις, είτε επίπεδα, στις 3 διαστάσεις, είτε υπερ-επίπεδα σε μεγαλύτερες διαστάσεις (τα υπερ-επίπεδα ωστόσο δεν μπορούν εύκολα να οπτικοποιηθούν). Διάταξη επεξεργαστών σε πλέγμα

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 202 Στην περίπτωση που οι επεξεγαστές αποτελούν ένα πλέγμα, τότε η απεικόνιση είναι σε μια συνάρτηση f(i) η οποία για κάθε στιγμιότυπο i δίνει ένα διάνυσμα δεικτών n = [n 1,, n K ] που καθορίζει έναν συγκεκριμένο επεξεργαστή στο πλέγμα. Για παράδειγμα στο 2-διάστατο πλέγμα του Σχήμα 58β, η συνάρτηση πρέπει να επιστρέψει ένα διάνυσμα 2- διαστάσεων n = [n 1, n 2 ] = f(i) που σημαίνει ότι το στιγμιότυπο i θα εκτελεστεί στον επεξεργαστή E n1,n 2. Όπως και στην προηγούμενη περίπτωση, έτσι και εδώ, γραμμική απεικόνιση σημαίνει ότι η f είναι γραμμική, δηλαδή έχει την παρακάτω μορφή: f 1 (i) = p 1,1 i1 + p 1,2 i2 + + p 1,N in + p 1,0 f 2 (i) = p 2,1 i1 + p 2,2 i2 + + p 2,N in + p 2,0 για κάποιους συντελεστές {p i,j }. Περιορισμοί στην απεικόνιση και κατά συνέπεια στη συνάρτηση f (ή f) δεν υπάρχουν. Θεωρητικά θα μπορούσε η f να είναι τέτοια ώστε όλα τα στιγμιότυπα να αντιστοιχηθούν σε ένα μόνο επεξεργαστή. Προφανώς, ωστόσο, μια τέτοια απεικόνιση θα ήταν η χειρότερη δυνατή γιατί θα καταργούσε τον παράλληλισμό. Γενικά, ισχύουν οι τρεις βασικές αρχές που περιγράψαμε στο κεφάλαιο 7.2.2, δηλαδή η εξισορρόπηση του φόρτου εργασίας, η ελαχιστοποίηση της επικοινωνίας μεταξύ των διεργασιών, και η μείωση του χρόνου που απαιτείται για τη διαχείριση της απεικόνισης. 8.9 Χρονοδρομολόγηση Όπως είδαμε και στο Κεφάλαιο 7, μετά την απεικόνιση, το επόμενο βήμα είναι ο χρονοδιαμερισμός των στιγμιοτύπων σε υποσύνολα όπου τα στοιχεία του κάθε υποσυνόλου είναι ανεξάρτητα μεταξύ τους και συνεπώς μπορούν να εκτελεστούν ταυτόχρονα. Η ανεξαρτησία μεταξύ στιγμιοτύπων σημαίνει ότι δεν υπάρχει κανενός τύπου εξάρτηση μεταξύ τους, δηλαδή ούτε εξάρτηση ροής ούτε αντιεξάρτηση, ούτε εξάρτηση εξόδου. Επί πλέον, δύο στιγμιότυπα Α, Β, που ανήκουν στο ίδιο υποσύνολο δεν πρέπει να εξαρτώνται μεταξύ τους ούτε εμμέσως, δηλαδή δεν πρέπει να υπάρχει μονοπάτι στιγμιοτύπων Α Α 1 Α 2 Α Ν Β που να οδηγεί από το A στο Β και κάθε στιγμιότυπο να εξαρτάται από το προηγούμενο. Χρονοδρομολόγηση είναι ο ορισμός συγκεκριμένων χρόνων εκτέλεσης για κάθε στιγμιότυπο. Αν το στιγμιότυπο περιγράφεται από το διάνυσμα δεικτών i = [i1,..., in] του εμφωλευμένου βρόχου, τότε η χρονοδρομολόγηση δεν είναι τίποτ άλλο από την απεικόνιση i t, δηλαδή την αντιστοίχιση του i σε κάποιο δείκτη χρόνου t. Η χρονοδρομολόγηση γίνεται σε δύο βήματα: (α) πρώτα γίνεται διαμερισμός των στιγμιοτύπων σε υποσύνολα T 1, T 2,, T K (β) κατόπιν γίνεται ανάθεση συγκεκριμένου χρόνου εκτέλεσης t j σε κάθε υποσύνολο T j

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 203 Ο βασικός περιορισμός οποιουδήποτε χρονοδιαγράμματος είναι ο σεβασμός των εξαρτήσεων μεταξύ των στιγμιοτύπων: Αν υπάρχει εξάρτηση i j μεταξύ του στιγμιοτύπου i και του στιγμιοτύπου j τότε πρέπει t i < t j, δηλαδή πρέπει το στιγμιότυπο j να εκτελεστεί μετά από το i. Η πιο απλή συνάρτηση απεικόνισης i t είναι η γραμμική απεικόνιση και αυτήν θα μελετήσουμε παρακάτω. Οι μή γραμμικές απεικονίσεις είναι αρκετά πιο πολύπλοκες και δεν θα απασχολήσουν στο βιβλίο αυτό. Στο Σχήμα 59α δίνεται ένα παράδειγμα γράφου εξάρτησης που χωρίζεται με μή-γραμμικό τρόπο σε τρία υποσύνολα (διακεκομμένες περιοχές) ενώ στο Σχήμα 59β ο ίδιος γράφος χωρίζεται σε 6 υποσύνολα με γραμμικό τρόπο. Παρατηρήστε ότι και στις δύο περιπτώσεις οι κόμβοι (στιγμιότυπα) που βρίσκονται μέσα σε κάποιο υποσύνολο είναι ανεξάρτητοι μεταξύ τους συνεπώς μπορούν να εκτελεστούν παράλληλα. Δίπλα σε κάθε υποσύνολο δίνεται και ο χρόνος εκτέλεσής του (t). Εδώ έχει γίνει σιωπηρά η υπόθεση ότι όλοι οι κόμβοι έχουν την ίδια διάρκεια εκτέλεσης, κάτι που διευκολυνει ιδιαίτερα την χρονοδρομολόγηση αν και δεν είναι πάντα αλήθεια στην πράξη. t=0 t=1 t=2 t=0 t=1 t=2 (α) t=3 t=4 t=5 (β) Σχήμα 59. Χρονοδρομολόγηση γράφου που αντιστοιχεί σε ένα εμφωλευμένο 2 διαστάσεων. (α) Μη γραμμική χρονοδρομολόγηση (β) Γραμμική χρονοδρομολόγηση. 8.9.1 Γραμμική χρονοδρομολόγηση Όταν υπάρχει γραμμική σχέση μεταξύ i και t, δηλαδή όταν t = c 1 i1 + c 2 i2 + + c N in + c 0 = c i + c 0 για κάποιους συντελεστές c 1, c 2, c Ν, και c 0, τότε λέμε ότι έχουμε γραμμική χρονοδρομολόγηση. Η πράξη c i συμβολίζει το εσωτερικό γινόμενο των διανυσμάτων c = [c 1, c 2, c Ν ] και i = [i1,..., in]. Η επιλογή των συντελεστών {c i }

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 204 επιτυγχάνει ταυτόχρονα χρονο-διαμερισμό των στιγμιοτύπων σε υποσύνολα και ανάθεση χρόνου εκτέλεσης για κάθε στιγμιότυπο, δηλαδή κάνει πλήρη χρονοδρομολόγηση. Τα υποσύνολα στα οποία διαχωρίζεται ο γράφος έχουν γραμμικό σχήμα, δηλαδή είναι είτε ευθείες γραμμές στις 2 διαστάσεις είτε επίπεδα στις 3 διαστάσεις (ή υπερ-επίπεδα σε περισσότερες διαστάσεις, αν και δεν μπορούμε να τα οπτικοποιήσουμε). Ειδικά στην γραμμική χρονοδρομολόγηση τα επίπεδα αυτά λέγονται ισόχρονα επίπεδα διότι όλοι οι κόμβοι στο ίδιο επίπεδο έχουν ίσο χρόνο εκτέλεσης t. Το διάνυσμα c καλείται διάνυσμα χρονοδιαγράμματος και έχει την ιδιότητα ότι είναι κάθετο στα ισόχρονα επίπεδα. Ο συντελεστής c 0 καθορίζει σε ποιο ισόχρονο επίπεδο θα αντιστοιχεί χρόνος εκτέλεσης t = 0. Ο βασικός περιορισμός του χρονοδιαγράμματος, ότι δηλαδή πρέπει να σέβεται τις εξαρτήσεις μεταξύ των στιγμιοτύπων, μεταφράζεται στην εξής μαθηματική σχέση: Αν υπάρχει εξάρτηση i j μεταξύ δύο στιγμιοτύπων i και j τότε το εσωτερικό γινόμενο μεταξύ c και (j i) πρέπει να είναι θετικό: c (j i) > 0. Αυτό πρέπει να ισχύει για όλα τα ζευγάρια i και j με εξάρτηση οποιουδήποτε είδους (είτε εξάρτηση ροής είτε αντι-εξάρτηση είτε εξάρτηση εξόδου). Η γραμμική χρονοδρομoλόγηση θα γίνει ποιο εύκολα κατανοητή με δύο παραδείγματα. Παράδειγμα 19. Ένα γραμμικό χρονοδιάγραμμα. Ας θυμηθούμε το γράφο του Σχήμα 51.

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 205 Σχήμα 60. Γραμμικό χρονοδιάγραμμα για τον γράφο του Σχήμα 51 χρησιμοποιώντας το διάνυσμα χρονοδιαγράμματος c = [1, 1]. Οι διακεκομμένες γραμμές είναι τα ισόχρονα επίπεδα. i 2 10 9 8 7 6 5 4 3 2 t=8 t=7 t=6 t=5 t=4 t=3 t=2 t=1 t=0 t=9 t=10 t=11 t=12 t=13 t=14 t=15 t=16 c = [1,1] i 1 2 3 4 5 6 7 8 9 10

Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 206 Στο Σχήμα φαίνεται το χρονοδιάγραμμα που προκύπτει αν επιλέξουμε διάνυσμα χρονοδιαγράμματος c = [1, 1] και c 0 = 4. Με αυτές τις επιλογές, για κάθε στιγμιότυπο i = [i1, i2] ο χρόνος εκτέλεσης είναι: t = i1 + i2 4. Έτσι για παράδειγμα, το στιγμιότυπο [2, 2] εκτελείται στο χρόνο t = 2 + 2 4= 0, το στιγμιότυπο [2, 3] εκτελείται στο χρόνο t = 2 + 3 4= 1, το στιγμιότυπο [3, 2] εκτελείται στο χρόνο t = 3 + 2 4= 1, το στιγμιότυπο [2, 4] εκτελείται στο χρόνο t = 2 + 4 4= 2, το στιγμιότυπο [3, 3] εκτελείται στο χρόνο t = 3 + 3 4= 2, το στιγμιότυπο [4, 2] εκτελείται στο χρόνο t = 4 + 2 4= 2, κλπ. Τα ισόχρονα επίπεδα (διακεκομμένες γραμμές) είναι κάθετα στο διάνυσμα c, όπως γίνεται και εμφανές από το Σχήμα 60. Ο γράφος είναι ομοιόμορφος, δηλαδή για όλα τα ζεύγη εξαρτώμενων στιγμιοτύπων i, j έχουμε την ίδια διαφορά j i = [1, 2]. Συνεπώς, το χρονοδιάγραμμα σέβεται όλες τις εξαρτήσεις καθώς: c (j i) = [1,1] [1,2] = 1 1 + 1 2 = 2 > 0. Όπως παρατηρούμε δημιουργούνται 17 ισόχρονα επίπεδα, (t = 0, 1,, 16) και συνεπώς ο συνολικός χρόνος παράλληλης εκτέλεσης του αλγορίθμου είναι 17 περίοδοι χρόνου Τ, όπου ο χρόνος T είναι αρκετά μεγάλος ώστε να εκτελείται μέσα σ αυτόν ένα πλήρες στιγμιότυπο συν τον απαιτούμενο χρόνο επικοινωνίας μεταξύ των διεργασιών ώστε να ανταλλάξουν δεδομένα. Αν, πχ, ένα στιγμιότυπο απαιτεί 2 προσθέσεις, έναν πολλαπλασιασμό και μια επικοινωνία με μια διπλανή διεργασία και οι χρόνοι εκτέλεσης των πράξεων αυτών είναι, πχ, 3 ns για την πρόσθεση, 20 ns για τον πολλαπλασιασμό, και 20ns για την επικοινωνία, τότε η περίοδος χρόνου θα πρέπει να είναι T > 2 [3 ns] + 1 [20 ns] + 1 [20 ns] = 46 ns. Σε αυτή την περίπτωση ο συνολικός χρόνος παράλληλης εκτέλεσης του αλγορίθμου είναι 17 Τ > 17 46 ns = 782 ns. Παράδειγμα 20. Εναλλακτικό γραμμικό χρονοδιάγραμμα. Στο γράφο του προηγούμενου παραδείγματος μπορούμε να επιλέξουμε εναλλακτικά διανύσματα χρονοδιαγράμματος c. Στο Σχήμα 61 εμφανίζεται το χρονοδιάγραμμα c = [2, 1], c 0 = 6 οπότε για κάθε στιγμιότυπο i = [i1, i2] ο χρόνος εκτέλεσης είναι: Οπότε t = 2 i1 + i2 6. το στιγμιότυπο [2, 2] εκτελείται στο χρόνο t = 2*2 + 2 6= 0,

t=8 t=9 t=10 t=11 t=12 t=13 t=14 t=15 t=16 t=17 t=18 t=19 t=20 t=21 t=22 t=24 t=23 Κεφάλαιο 8: Παράλληλη εκτέλεση βρόχων 207 το στιγμιότυπο [2, 3] εκτελείται στο χρόνο t = 2*2 + 3 6= 1, το στιγμιότυπο [3, 2] εκτελείται στο χρόνο t = 2*3 + 2 6= 2, το στιγμιότυπο [2, 4] εκτελείται στο χρόνο t = 2*2 + 4 6= 2, το στιγμιότυπο [3, 3] εκτελείται στο χρόνο t = 2*3 + 3 6= 3, το στιγμιότυπο [4, 2] εκτελείται στο χρόνο t = 2*4 + 2 6= 4, κλπ. Το χρονοδιάγραμμα σέβεται τις εξαρτήσεις καθώς c (j i) = [2,1] [1,2] = 2 1 + 1 2 = 4 > 0. Βλέπουμε ότι με αυτό το χρονοδιάγραμμα δημιουργούνται 25 ισόχρονα επίπεδα (t=0, 1,, 24) οπότε η παράλληλη εκτέλεση του αλγορίθμου απαιτεί χρόνο 25 T, σε αντίθεση με τα 17 T του προγούμενου παραδείγματος. Το χρονοδιάγραμμα αυτό, συνεπώς, έχει χειρότερη επίδοση σε σχέση με το προηγούμενο. Η επιλογή του βελτιστου γραμμικού χρονοδιαγράμματος για ένα συγκεκριμένο γράφο εξάρτησης ξεφεύγει από τους στόχους αυτού του βιβλίου και δεν θα μας απασχολήσει περισσότερο. i 2 10 9 8 7 6 5 4 3 2 t=7 t=6 t=5 t=4 t=3 t=2 t=1 t=0 c = [2,1] i 1 2 3 4 5 6 7 8 9 10 Σχήμα 61. Εναλλακτικό χρονοδιάγραμμα για τον γράφο του Σχήμα 51 με c = [2, 1].