Μεταγλωττιστές ΙΙ. Βελτιστοποιήσεις για την εκμετάλλευση της παραλληλίας και ενίσχυση της τοπικότητας

Σχετικά έγγραφα
Προηγμένα Θέματα Θεωρητικής Πληροφορικής

Βελτιστοποιήσεις για την εκμετάλλευση της παραλληλίας και ενίσχυση της τοπικότητας. Προηγμένα Θέματα Θεωρητικής Πληροφορικής

Προηγμένα Θέματα Θεωρητικής Πληροφορικής

Μεταγλωττιστές ΙΙ. Χρονοπρογραμματισμός κώδικα και βελτιστοποιήσεις εξαρτημένες από την αρχιτεκτονική

Αποδεικτικές Διαδικασίες και Μαθηματική Επαγωγή.

Μεταγλωττιστές ΙΙ. Επιλογή κώδικα. 24 Νοεμβρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Προηγμένα Θέματα Θεωρητικής Πληροφορικής

Συναρτήσεις. Σημερινό μάθημα

Μεταγλωττιστές ΙΙ. Γέννηση ενδιάμεσης αναπαράστασης. 10 Νοεμβρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΣΤΟ ΦΑΡΜΑΚΕΙΟ. Με την πιστοποίηση του έχει πρόσβαση στο περιβάλλον του φαρμακείου που παρέχει η εφαρμογή.

Μεταγλωττιστές ΙΙ. Καταμερισμός καταχωρητών. Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Εξαναγκασμένες ταλαντώσεις, Ιδιοτιμές με πολλαπλότητα, Εκθετικά πινάκων. 9 Απριλίου 2013, Βόλος

ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ Γ ΤΑΞΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

Pointers. Σημερινό Μάθημα! Χρήση pointer Τελεστής * Τελεστής & Γενικοί δείκτες Ανάκληση Δέσμευση μνήμης new / delete Pointer σε αντικείμενο 2

Οι γέφυρες του ποταμού... Pregel (Konigsberg)

Προηγμένα Θέματα Θεωρητικής Πληροφορικής

Μεταγλωττιστές ΙΙ. Βελτιστοποιήσεις ανεξάρτητες από την αρχιτεκτονική. Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Τρίτη, 05 Ιουνίου 2001 ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ Γ ΛΥΚΕΙΟΥ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

{ i f i == 0 and p > 0

Η έννοια της βελτιστοποίησης προγράμματος. Προηγμένα Θέματα Θεωρητικής Πληροφορικής

ΜΑΘΗΜΑ: ΟΙΚΟΝΟΜΙΚΗ ΘΕΩΡΙΑ


ΣΧΟΛΙΚΟ ΕΤΟΣ ΕΥΘΥΓΡΑΜΜΗ ΟΜΑΛΗ ΚΙΝΗΣΗ ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΕΞΕΤΑΣΗ ΣΤΗ ΦΥΣΙΚΗ A ΛΥΚΕΙΟΥ. Ονοματεπώνυμο Τμήμα

Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Περισσότερα για τα αρθρώματα Αναθέσεις και τελεστές Συντρέχων κώδικας

Ας υποθέσουμε ότι ο παίκτης Ι διαλέγει πρώτος την τυχαιοποιημένη στρατηγική (x 1, x 2 ), x 1, x2 0,

ΣΤΟ ΙΑΤΡΕΙΟ. Με την πιστοποίηση του αποκτά πρόσβαση στο περιβάλλον του ιατρού που παρέχει η εφαρμογή.

Αλγόριθμοι & Βελτιστοποίηση

Συναρτήσεις & Κλάσεις

Μεταγλωττιστές ΙΙ. 26 Ιανουαρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Πρώτη Γραπτή Εργασία. Εισαγωγή στους υπολογιστές Μαθηματικά

Φόρμα Σχεδιασμού Διάλεξης (ημ/α: 17/03/08, έκδοση: 1.0)

Ταξινόμηση των μοντέλων διασποράς ατμοσφαιρικών ρύπων βασισμένη σε μαθηματικά κριτήρια.

Ψηφιακή Εικόνα. Σημερινό μάθημα!

ΘΕΜΑ: Aποτελεσματικότητα της νομισματικής και δημοσιονομικής πολιτικής σε μια ανοικτή οικονομία

Μονάδες α. Να γράψετε στο τετράδιό σας τον παρακάτω πίνακα σωστά συµπληρωµένο.

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Σχέσεις και ιδιότητές τους

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Μούλου Ευγενία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Εαρινό Εξάμηνο

ΜΑΘΗΜΑ: ΠΟΛΙΤΙΚΗ ΟΙΚΟΝΟΜΙΑ-ΔΗΜΟΣΙΑ ΟΙΚΟΝΟΜΙΚΗ

21/11/2005 Διακριτά Μαθηματικά. Γραφήματα ΒΑΣΙΚΗ ΟΡΟΛΟΓΙΑ : ΜΟΝΟΠΑΤΙΑ ΚΑΙ ΚΥΚΛΟΙ Δ Ι. Γεώργιος Βούρος Πανεπιστήμιο Αιγαίου

Δ Ι Α Κ Ρ Ι Τ Α Μ Α Θ Η Μ Α Τ Ι Κ Α. 1η σειρά ασκήσεων

Γέννηση ενδιάμεσης αναπαράστασης. Προηγμένα Θέματα Θεωρητικής Πληροφορικής. Τύποι IR. Άποψη του μεταγλωττιστή από την πλευρά της IR.

8 Βελτιστοποιήσεις για την ανάδειξη της παραλληλίας

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Έννοια. Η αποδοχή της κληρονομίας αποτελεί δικαίωμα του κληρονόμου, άρα δεν

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

ΤΑΞΙΝΟΜΗΣΗ ΟΡΓΑΝΙΣΜΩΝ

Προηγμένα Θέματα Θεωρητικής Πληροφορικής

ΔΙΚΑΙΩΜΑΤΑ ΠΡΟΣΟΡΜΙΣΗΣ, ΠΑΡΑΒΟΛΗΣ, ΠΡΥΜΝΟΔΕΤΗΣΗΣ ΚΑΙ ΕΛΛΙΜΕΝΙΣΜΟΥ ΣΚΑΦΩΝ ΣΕ ΘΑΛΑΣΣΙΕΣ ΠΕΡΙΟΧΕΣ. (ΛΙΜΑΝΙΑ κ.λπ.) ΤΟΠΙΚΗΣ ΑΡΜΟΔΙΟΤΗΤΑΣ ΛΙΜΕΝΙΚΩΝ

Γενικά για τον καταμερισμό καταχωρητών. Προηγμένα Θέματα Θεωρητικής Πληροφορικής. Εναλλακτικές προσεγγίσεις στο πρόβλημα του

Συγκέντρωση Κίνησης Εισαγωγή Στατική Συγκέντρωση Κίνησης

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Ανασκόπηση ϑεμάτων παλαιών εξετάσεων του μαθήματος. Περιεχόμενο εξετάσεων

Προηγμένα Θέματα Θεωρητικής Πληροφορικής

ΠΡΟΤΕΙΝΟΜΕΝΟ ΘΕΜΑ. Μορφές δημόσιου δανεισμού. Σύνταξη: Παπαδόπουλος Θεοχάρης, Οικονομολόγος, MSc, PhD Candidate

Σκιαγράφηση της διάλεξης. Προηγμένα Θέματα Θεωρητικής Πληροφορικής.

ΘΕΜΑ: Διαφορές εσωτερικού εξωτερικού δανεισμού. Η διαχρονική κατανομή του βάρους από το δημόσιο δανεισμό.

Γλώσσες Περιγραφής Υλικού Ι

Εργαστηριακή Άσκηση Θερμομόρφωση (Thermoforming)

έγγραφο σε κάθε διάσταση αντιστοιχούν στο πλήθος εμφανίσεων της λέξης (που αντιστοιχεί στη συγκεκριμένη διάσταση) εντός του εγγράφου.

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΑΡΧΕΣ ΟΙΚΟΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑ ΕΠΙΛΟΓΗΣ Γ ΛΥΚΕΙΟΥ

ΨΗΦΙΑΚΑ ΗΛΕΚΤΡΟΝΙΚΑ Σχεδίαση Λογικών Κυκλωμάτων

Αναγνώριση Προτύπων. Σημερινό Μάθημα

Εισαγωγικά. 1.1 Η σ-αλγεβρα ως πληροφορία

1. Εστω ότι A, B, C είναι γενικοί 2 2 πίνακες, δηλαδή, a 21 a, και ανάλογα για τους B, C. Υπολογίστε τους πίνακες (A B) C και A (B C) και

ΜΙΚΡΟΟΙΚΟΝΟΜΙΚΗ Η ΚΑΤΑΝΑΛΩΤΙΚΗ ΑΠΟΦΑΣΗ. Άσκηση με θέμα τη μεγιστοποίηση της χρησιμότητας του καταναλωτή

ΣΥΝΟΛΑ (προσέξτε τα κοινά χαρακτηριστικά των παρακάτω προτάσεων) Οι άνθρωποι που σπουδάζουν ΤΠ&ΕΣ και βρίσκονται στην αίθουσα

Ολοκληρωμένη Χωρική Ανάπτυξη. Ειδική Υπηρεσία Στρατηγικής, Σχεδιασμού Και Αξιολόγησης (ΕΥΣΣΑ) Μονάδα Α Στρατηγικής και Παρακολούθησης Πολιτικών

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Γενικά χαρακτηριστικά του επεξεργαστή MU0. Προγραμματιζόμενοι επεξεργαστές

Εισαγωγή στο MATLAB. Στη συγγραφή των σημειώσεων συνέβαλαν οι μεταπτυχιακές φοιτήτριες Ελισάβετ Πισιάρα και Σπυρούλα Οδυσσέως

Προτεινόμενα θέματα στο μάθημα. Αρχές Οικονομικής Θεωρίας ΟΜΑΔΑ Α. Στις προτάσεις από Α.1. μέχρι και Α10 να γράψετε στο τετράδιό σας τον αριθμό της

Βελτίωση Εικόνας. Σήμερα!

Ο Ισχυρός Νόμος των Μεγάλων Αριθμών

Αναγνώριση Προτύπων. Σήμερα! Λόγος Πιθανοφάνειας Πιθανότητα Λάθους Κόστος Ρίσκο Bayes Ελάχιστη πιθανότητα λάθους για πολλές κλάσεις

Ευρωπαϊκά παράγωγα Ευρωπαϊκά δικαιώματα

ΑΣΕΠ 2000 ΑΣΕΠ 2000 Εμπορική Τράπεζα 1983 Υπουργείο Κοιν. Υπηρ. 1983

17 Μαρτίου 2013, Βόλος

Κεφάλαιο 2.4: Τα βασικά στοιχεία ενός Επιχειρηματικού Σχεδίου (Business Plan) Μέσα από αυτό το κεφάλαιο φαίνεται ότι αφενός η σωστή δημιουργία και

Επίλυση δικτύων διανομής

ΜΑΘΗΜΑ: ΓΕΝΙΚΟ ΔΙΟΙΚΗΤΙΚΟ ΔΙΚΑΙΟ ΔΙΚΑΣΤΩΝ

«ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ»

Συναρτήσεις ΙΙ. Σημερινό μάθημα

Σχεδίαση Ψηφιακών Κυκλωμάτων

Εισαγωγικές Διαλέξεις στην Θεωρία των Αλυσίδων Markov και των Στοχαστικών Ανελίξεων. Οικονομικό Πανεπιστήμιο Αθηνών

Σκιαγράφηση της διάλεξης. Σχεδίαση Ψηφιακών Κυκλωμάτων. Ορισμοί για τις χρονικές καθυστερήσεις διάδοσης. Συνδυαστική και ακολουθιακή λογική

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

1. Σε περίπτωση κατά την οποία η τιμή ενός αγαθού μειωθεί κατά 2% και η ζητούμενη

Γλώσσες Περιγραφής Υλικού Ι

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Μηχανές Πεπερασμένων Καταστάσεων: Εισαγωγή και.


Ηλεκτρονικοί Υπολογιστές Ι: Εισαγωγή στη γλώσσα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ. Τρίτη Γραπτή Εργασία στη Στατιστική

- 1 - Ποιοι κερδίζουν από το εμπόριο αγαθών και υπηρεσιών; Γιατί η άμεση ανταλλαγή αγαθών, ορισμένες φορές, είναι δύσκολο να

ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ Β ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 27 ΜΑΪΟΥ 2000 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΘΕΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ: ΧΗΜΕΙΑ ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΞΙ (6)

Σκιαγράφηση της διάλεξης. Γλώσσες Περιγραφής Υλικού Ι. Διαφορές μεταξύ των περιγραφών συνδυαστικών και ακολουθιακών κυκλωμάτων

Transcript:

Μεταγλωττιστές ΙΙ Βελτιστοποιήσεις για την εκμετάλλευση της παραλληλίας και ενίσχυση της τοπικότητας Νικόλαος Καββαδίας nkavv@uop.gr 22 Δεκεμβρίου 2010

Βελτιστοποιήσεις για την εκμετάλλευση της παραλληλίας και ενίσχυση της τοπικότητας Οι βελτιστοποιήσεις για βαθμωτούς επεξεργαστές (scalar processors) έχουν γενικά ως στόχο τη μείωση των εκτελούμενων εντολών (και κατά επέκταση του χρόνου εκτέλεσης ή/και τη βελτίωση άλλων μετρικών) Οι βελτιστοποιήσεις για παράλληλες αρχιτεκτονικές έχουν ως στόχο τη βελτίωση χαρακτηριστικών όπως η αύξηση της διαθέσιμης παραλληλίας (πολλές λειτουργίες βρίσκονται ταυτόχρονα σε εξέλιξη), η τοποθέτηση των δεδομένων στη μνήμη και η οργάνωση της ιεραρχίας μνήμης Είδη επεξεργαστών Επεξεργαστές VLIW Υπερβαθμωτοί επεξεργαστές (superscalar processors) Διανυσματικοί επεξεργαστές (vector processors) Πολυπύρηνοι επεξεργαστές (multicore processors) Πολυεπεξεργαστές (multiprocessors) Στόχος: Αύξηση της παραλληλίας και της τοπικότητας

Παραλληλία και τοπικότητα σε μία παράλληλη αρχιτεκτονική Πολυεπεξεργαστής διαμοιρασμένου πεδίου διευθύνσεων (shared memory multiprocessor): μία ενιαία κεντρική μνήμη δεδομένων

Η διαδικασία της βελτιστοποίησης Η βελτιστοποίηση υψηλού επιπέδου έχει μεγαλύτερα οφέλη για την επίτευξη παραλληλίας Ενδιάμεση αναπαράσταση υψηλού επιπέδου (πριν τη μετατροπή της σε συμβολική assembly για την εφαρμογή περασμάτων χαμηλού επιπέδου όπως επιλογή κώδικα, καταμερισμός καταχωρητών κ.λ.π.) Στο επίπεδο του πηγαίου κώδικα πιθανόν με τη μεσολάβηση της μετατροπής σε AST Η βελτιστοποίηση από την άποψη του μεταγλωττιστή 1 Διερεύνηση για τα κατάλληλα τμήματα του προγράμματος εισόδου που είναι ωφέλιμο να βελτιστοποιηθούν 2 Πιστοποίηση του ότι η εφαρμογή της βελτιστοποίησης δεν αλλοιώνει τη φύση (σημασιολογία) του προγράμματος 3 Μετασχηματισμός του προγράμματος με έξοδο ενδιάμεσης αναπαράστασης του ίδιου επιπέδου i Εστιάζουμε στη βελτιστοποίηση διαδικαστικών γλωσσών προγραμματισμού όπως είναι η ANSI/ISO C

Ανάλυση εξαρτήσεων δεδομένων (data dependence analysis) Η ανάλυση εξαρτήσεων ϑα πρέπει να αναγνωρίζει τους επιβαλλόμενους περιορισμούς και να καθορίζει το αν ένας συγκεκριμένος μετασχηματισμός μπορεί να εφαρμοστεί χωρίς την αλλοίωση της συμπεριφοράς του προγράμματος Εξαρτήσεις ανάμεσα σε δεδομένα Βαθμωτές εξαρτήσεις (τύποι RAW, WAW, WAR) Εξαρτήσεις μεταφερόμενες από βρόχο (loop-carried dependencies) Εξάρτηση δεδομένων: η εντολή i χρειάζεται τουλάχιστον μία τιμή που υπολογίζεται από την j

Εξαρτήσεις μεταφερόμενες από βρόχο (loop-carried dependencies) Το σώμα ενός βρόχου μπορεί να εκτελεστεί πολλές φορές Οι εξαρτήσεις που είναι μεταφερόμενες από βρόχο υφίστανται ανάμεσα σε διαφορετικές (συνήθως διαδοχικές) επαναλήψεις του βρόχου Παράδειγμα for (i = 2; i <= n; i++) { S1: a[i] = a[i] + c; S2: b[i] = a[i-1] * b[i]; Στην ίδια επανάληψη του βρόχου, δεν υπάρχει εξάρτηση ανάμεσα στις S1 και S2 Σε δύο διαδοχικές επαναλήψεις, π.χ. όταν i = k η δήλωση S2 διαβάζει την τιμή του a[k-1] η οποία γράφεται από τη δήλωση S1 κατά την επανάληψη k - 1 Για την ανάλυση εξαρτήσεων χρειάζεται η καταγραφή όλων των εκφράσεων δεικτοδότησης των πινάκων

Γενικευμένη δομή βρόχων Δομή πλήρως φωλιασμένων βρόχων σε γενική μορφή Πεδίο επανάληψης (iteration space): το διάνυσμα των d στοιχείων I = (i 1,..., i d ) με κάθε στοιχείο του διανύσματος να αναπαριστά τη μεταβλητή δείκτη του αντίστοιχου βρόχου

Πεδίο επανάληψης (iteration space) Εστω οι διπλά φωλιασμένοι βρόχοι: for (i = 0; i < 6; i++) { for (j = 0; j < 9; j++) {... Δομή βρόχων με n φωλιασμένους βρόχους αναπαρίσταται από ΠΟΛΥΤΟΠΟ (polytope) n διαστάσεων Ισοδύναμα χρησιμοποιείται η έκφραση πολύεδρο (polyhedron) Οι επαναλήψεις εκφράζονται ως συντεταγμένες στο πεδίο επανάληψης Ακολουθιακή σειρά εκτέλεσης: [0,0], [0,1],..., [0,7], [0,8], [1,0], [1,1],..., [1,8],..., [5,0],..., [5,8]

Μετασχηματισμοί βρόχου (loop transformations) (1) Loop reordering transformations Loop unswitching Loop skewing Loop reversal Strip mining Cycle shrinking Loop tiling Loop distribution Loop fusion Loop restructuring transformations Loop unrolling Loop coalescing Loop collapsing

Μετασχηματισμοί βρόχου (2) Loop restructuring transformations (cont.) Software pipelining Loop peeling Loop normalization (canonicalization) Loop spreading Loop replacement transformations Reduction recognition Loop idiom recognition Array statement scalarization

Loop unswitching Εφαρμόζεται όταν ένας βρόχος περιέχει έλεγχο ο οποίος εξετάζει συνθήκη αμετάβλητη ως προς το βρόχο Τότε ο βρόχος μεταφέρεται (δημιουργώντας τα αντίστοιχα αντίγραφα) εντός των δύο κλάδων της συνθήκης (π.χ. μία δήλωση ελέγχου if-else στην C). Δηλαδή υπάρχει αντιμετάθεση μεταξύ του βρόχου και της δήλωσης ελέγχου Μειώνεται το μέγεθος του σώματος βρόχου (loop body) for (i = 2; i <= n; i++) { a[i] = a[i] + c; if (x < 7) b[i] = a[i] * c[i]; else b[i] = a[i-1] * b[i-1]; if (n > 1) if (x < 7) for (i = 2; i <= n; i++) { a[i] = a[i] + c; b[i] = a[i] * c[i]; else for (i = 2; i <= n; i++) { a[i] = a[i] + c; b[i] = a[i-1] * b[i-1];

Loop reordering (αναδιάταξη βρόχου) (1) Μετασχηματισμός που μεταβάλλει τη σχετική σειρά εκτέλεσης των επαναλήψεων σε ένα βρόχο ή μία δομή βρόχων Χρησιμοποιείται για την ανάδειξη της παραλληλίας και τη βελτίωση της τοπικότητας των προσπελάσεων στη μνήμη Για γενικευμένες (μη τέλειες) δομές βρόχων, εφαρμόζεται σε συνδυασμό με την κατανομή βρόχων (loop distribution), η οποία και τον ενεργοποιεί Ο μεταγλωττιστής εξετάζει τις μεταφερόμενες από βρόχο εξαρτήσεις ώστε να καθορίσει αν ο συγκεκριμένος βρόχος/βρόχοι είναι παραλληλοποιήσιμος/οι

Loop reordering (αναδιάταξη βρόχου) (2) Ο εξωτερικός βρόχος είναι παραλληλοποιήσιμος for (i = 1; i <= n; i++) { for (j = 2; j <= n; j++) { a[i][j] = a[i][j-1] + c; Ο εσωτερικός βρόχος είναι παραλληλοποιήσιμος for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { a[i][j] = a[i-1][j] + a[i-1][j+1];

Loop interchange (ανταλλαγή βρόχων) (1) Μετακινεί έναν από τους εξωτερικότερους βρόχους στην εσώτερη ϑέση (inner loop) Μεταβάλλει τη σχετική σειρά εκτέλεσης των επαναλήψεων σε ένα βρόχο ή μία δομή βρόχων Χρησιμοποιείται για την ανάδειξη της παραλληλίας και τη βελτίωση της τοπικότητας των προσπελάσεων στη μνήμη Για γενικευμένες (μη τέλειες) δομές βρόχων, εφαρμόζεται σε συνδυασμό με κατανομή βρόχων (loop distribution) η οποία και τον ενεργοποιεί Χρήσεις Ενεργοποίηση και βελτίωση διανυσματοποίησης Μείωση του βήματος δείκτη (stride), ιδανικά στο 1 Αύξηση του αριθμού των εκφράσεων που είναι αμετάβλητες στον εσώτερο βρόχο

Loop interchange (ανταλλαγή βρόχων) (2) Μεταβολή του τρόπου σάρωσης διευθύνσεων λόγω της ανταλλαγής δύο βρόχων Διαδοχικά στοιχεία του total με βήμα n for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { total[i] = total[i] + a[i][j]; Διαδοχικά στοιχεία του total με βήμα 1 for (j = 1; j <= n; j++) { for (i = 1; i <= n; i++) { total[i] = total[i] + a[i][j];

Loop skewing (ολίσθηση βρόχου) (1) Χρησιμοποιείται κυρίως για την ενεργοποίηση του μετασχηματισμού ανταλλαγής βρόχων Υλοποιείται με την πρόσθεση του δείκτη του εξώτερου βρόχου, πολλαπλασιασμένου με το συντελεστή ολίσθησης f (skewing factor) και στα δύο όρια των επαναλήψεων του δείκτη του εσώτερου βρόχου Στη συνέχεια μεταβάλλονται αντίστοιχα οι εκφράσεις διευθυνσιοδότησης σε όλους τους πίνακες που διαβάζονται ή γράφονται στο σώμα του εσώτερου βρόχου Ο μετασχηματισμός αυτός δεν μεταβάλλει τη συμπεριφορά του προγράμματος και μπορεί να χρησιμοποιηθεί σε κάθε περίπτωση

Loop skewing (ολίσθηση βρόχου) (2) Παράδειγμα εφαρμογής του loop skewing for (i = 2; i <= n-1; i++) { for (j = 2; j <= m-1; j++) { a[i][j] = (a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1])/4; Αρχικό πεδίο επαναλήψεων for (i = 2; i <= n-1; i++) { for (j = i+2; j <= i+m-1; j++) { a[i][j-i] = (a[i-1][j-i] + a[i][j-1-i] + a[i+1][j-i] + a[i][j+1-i])/4; Ολισθημένο πεδίο επαναλήψεων

Loop reversal (αναστροφή βρόχου) Προκαλεί την αλλαγή της κατευθυντικότητας με την οποία ένας βρόχος διασχίζει το πεδίο επανάληψής του Μειώνει την επιβάρυνση για την εκτέλεση των λειτουργιών αύξησης δείκτη και ελέγχου του βρόχου Π.χ. εντολή BNEZ (branch if not equal to zero) στον επεξεργαστή DLX Ενεργοποιεί την εφαρμογή μετασχηματισμών όπως ο loop interchange: Παράδειγμα for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { a[i][j] = a[i-1][j+1] + 1; for (i = 1; i <= n; i++) { for (j = n; j >= 1; j--) { a[i][j] = a[i-1][j+1] + 1;

Strip mining Ομαδοποιεί δεδομένα του ίδιου τύπου ώστε αν αυτά είναι ελεύθερα από εξαρτήσεις να μπορούν να χρησιμοποιηθούν από διανυσματική εντολή του επεξεργαστή Βασική παράμετρος είναι το strip length που αντιστοιχεί στο εύρος του διανύσματος for (i = 1; i <= n; i++) { a[i] = a[i] + c; Διανυσματικός κώδικας (Vector DLX) ; R9 = address of a[ti] LV V1, R9 ; V1 <- a[ti:ti+63] ADDSV V1, F8, V1 ; V1 <- V1 + c (F8 = c) SV V1, R9 ; a[ti:ti+63] <- V1 TN = (n/64)*64; for (TI = 1; TI < TN; TI += 64) { a[range(ti:ti+63)] = a[range(ti:ti+63)] + c; for (i = TN+1; i <= n; i++) { a[i] = a[i] + c;

Loop tiling (πλακόστρωση βρόχων) Αποτελεί την πολυδιάστατη γενίκευση του μετασχηματισμού strip mining Ονομάζεται και loop blocking Χρησιμοποιείται για τη βελτίωση της επαναχρησιμοποίησης δεδομένων από την κρυφή μνήμη (cache reuse) Λειτουργεί με τη διαίρεση του πεδίου επανάληψης σε επιμέρους τμήματα (tiles: πλακίδια), και με την εφαρμογή του αντίστοιχου μετασχηματισμού της δομής βρόχων που αναπαρίσταται από το πεδίο

Loop tiling: Παράδειγμα Αρχικός βρόχος for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { a[i][j] = b[j][i]; Πλακοστρωμένος βρόχος for (TI = 1; TI <= n; TI += 64) { for (TJ = 1; TJ <= n; TJ += 64) { for (i = TI; i <= min(ti+63,n); i++) { for (j = TJ; j <= min(tj+63,n); j++) { a[i][j] = b[j][i];

Loop distribution (κατανομή βρόχων) Χρησιμοποιείται για την κατανομή ενός βρόχου σε πολλούς Εναλλακτικά ονομάζεται loop fission ή loop splitting Κάθε νέος βρόχος έχει το ίδιο πεδίο επανάληψης με τον αρχικό αλλά περιέχει ένα υποσύνολο των δηλώσεων του σώματος του αρχικού βρόχου Χρήσεις Δημιουργία τέλεια φωλιασμένων βρόχων Δημιουργία βρόχων με λιγότερες εξαρτήσεις Βελτίωση της τοπικότητας της κρυφής μνήμης εντολών Ελάττωση των απαιτήσεων μνήμης και της πίεσης στο αρχείο καταχωρητών

Loop distribution: Παράδειγμα Αρχικός βρόχος for (i = 1; i <= n; i++) { a[i] = a[i] + c; x[i+1] = x[i]*7 + x[i+1] + a[i]; Κατανομή του αρχικού βρόχου for (i = 1; i <= n; i++) { a[i] = a[i] + c; for (i = 1; i <= n; i++) { x[i+1] = x[i]*7 + x[i+1] + a[i];

Loop fusion (μείξη βρόχων) Πρόκειται για τον αντίστροφο μετασχηματισμό από αυτόν της κατανομής βρόχου Χρησιμοποιείται για τη βελτίωση επιδόσεων με την εκμετάλλευση της μείωσης της επιβάρυνσης βρόχου της αύξησης της παραλληλίας στο σώμα του βρόχου της βελτίωσης της τοπικότητας Αρχικός κώδικας for (i = 1; i <= n; i++) { a[i] = a[i] + c; for (i = 1; i <= n; i++) { x[i+1] = x[i]*7 + x[i+1] + a[i]; Μείξη (συνένωση) των αρχικών βρόχων for (i = 1; i <= n; i++) { a[i] = a[i] + c; x[i+1] = x[i]*7 + x[i+1] + a[i];

Loop unrolling (ξετύλιγμα βρόχων) Αναδομητικός (restructuring) μετασχηματισμός ο οποίος μεταβάλλει τη δομή του βρόχου, χωρίς να επηρεάζει τη σχετική σειρά των λειτουργιών στο σώμα του βρόχου Αντιγράφει το σώμα ενός βρόχου για αριθμό φορών ίσο με τον παράγοντα ξετυλίγματος (unroll factor: u). Ο νέος βρόχος έχει βήμα u αντί για 1 Χρήσεις μείωση της επιβάρυνσης βρόχου αύξηση της παραλληλίας στο σώμα του βρόχου βελτίωση της τοπικότητας Αρχικός βρόχος Unroll factor: 2 for (i = 2; i <= n-1; i++) { a[i] = a[i] + a[i-1] * a[i+1]; for (i = 2; i <= n-2; i+=2) { a[i] = a[i] + a[i-1] * a[i+1]; a[i+1] = a[i+1] + a[i] * a[i+2]; if (mod(n-2,2) == 1) { a[n-1] = a[n-1] + a[n-2] * a[n];

Loop unrolling: Εφαρμογή σε δομές επανάληψης for και while Γενικά υπάρχει μία ϑεμελιώδης δομή επανάληψης, η repeat...until (ισότιμη της do...while) Δομή for Unrolled for loop for (i = 0; i < N; i++) { S(i); Δομή repeat-until repeat S; until (condition); for (i = 0 ; i+4 < N; i += 4) { S(i); S(i+1); S(i+2); S(i+3); for ( ; i < N; i++) { S(i); Unrolled repeat-until loop repeat S; if (condition) break; S; if (condition) break; S; if (condition) break; S; until (condition);

Loop coalescing (συνάσπιση βρόχων) Συνδυάζει μία δομή βρόχου ώστε τη μετατροπή της σε έναν απλό βρόχο με τις αρχικές μεταβλητές δείκτη να υπολογίζονται από μία επαγόμενη μεταβλητή Μπορεί να βελτιώσει το χρονοπρογραμματισμό των εντολών του βρόχου σε μία παράλληλη αρχιτεκτονική (πολυεπεξεργαστή) Ως μετασχηματισμός είναι πάντοτε επιτρεπτός καθώς δεν μεταβάλλει τη διαδοχή των επαναλήψεων στο βρόχο Αρχική δομή βρόχων for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { a[i][j] = a[i][j] + c; Συνασπισμένη δομή βρόχων for (T = 1; T <= n*m; T++) { i = ((T-1) / m) + 1; j = MOD(T-1, m) + 1; a[i][j] = a[i][j] + c;

Loop peeling (ξεφλούδισμα βρόχου) Κατά το μετασχηματισμό αυτό, απομακρύνεται μία ομάδα επαναλήψεων από την αρχή ή το τέλος του βρόχου και εκτελείται ξεχωριστά Χρησιμοποιείται για την απομάκρυνση εξαρτήσεων με πρώτες ή τελευταίες επαναλήψεις του βρόχου Επίσης και για την ταύτιση της συνθήκης ελέγχου με αυτή τυχόν γειτονικών βρόχων, προκειμένου τη συνένωση όλων σε μία ενιαία δομή βρόχου Μπορεί να χρησιμοποιηθεί σε κάθε περίπτωση for (i = 2; i <= n; i++) { b[i] = b[i] + b[2]; parfor (i = 3; i <= n; i++) { a[i] = a[i] + c; if (n >= 2) { b[2] = b[2] + b[2]; parfor (i = 3; i <= n; i++) { b[i] = b[i] + b[2]; a[i] = a[i] + c;

Loop spreading (διεύρυνση βρόχου) Ο μετασχηματισμός αυτός μετακινεί ορισμένες λειτουργίες από το σώμα ενός βρόχου στο σώμα ενός παρακείμενου ώστε στην τελική τους μορφή, τα σώματα των δύο βρόχων να μπορούν να εκτελεστούν παράλληλα Χρησιμοποιείται για την αποκάλυψη ευκαιριών για loop peeling και fusion Γενικά διευκολύνει την ανάδειξη παραλληλίας επιπέδου εντολών

Loop spreading: Παράδειγμα Αρχική δομή βρόχων for (i = 1; i <= n/2; i++) { a[i+1] = a[i+1] + a[i]; for (i = 1; i <= n-3; i++) { b[i+1] = b[i+1] + b[i] + a[i+3]; Τελική δομή βρόχων for (i = 1; i <= n/2; i++) { a[i+1] = a[i+1] + a[i]; if (i > 3) { b[i-2] = b[i-2] + b[i-3] + a[i]; for (i = (n/2)-3; i <= n-3; i++) { b[i+1] = b[i+1] + b[i] + a[i+3];

Μετασχηματισμοί προσπέλασης μνήμης (memory access transformations) Array padding Scalar expansion Array contraction Scalar replacement Code colocation Displacement minimization

Scalar expansion (βαθμωτό ανάπτυγμα) Βαθμωτές μεταβλητές σε ένα σώμα βρόχου δημιουργούν μία αντι-εξάρτηση με την επόμενη επανάληψη Καταμερισμός μιας προσωρινής μεταβλητής για κάθε επανάληψη ξεχωριστά Με τον τρόπο αυτό ενεργοποιούνται οι δυνατότητες παραλληλοποίησης Απαραίτητη προϋπόθεση είναι η διαθεσιμότητα πολύ μεγάλου αριθμού καταχωρητών Αρχικός βρόχος for (i = 1; i <= n; i++) { c = b[i]; a[i] = a[i] + c; Μετά το μετασχηματισμό για διανυσματική εκτέλεση real T[n]; parfor (i = 1; i <= n; i++) { T[i] = b[i]; a[i] = a[i] + T[i];

Array contraction (συστολή πίνακα) Συρρίκνωση του αριθμού των στοιχείων και ενδεχόμενα και του αριθμού των διαστάσεων σε πίνακες Αρχικός βρόχος real T[n][n]; for (i = 1; i <= n; i++) { parfor (j = 1; j <= n; j++) { T[i][j] = a[i][j] * 3; b[i][j] = T[i][j] + b[i][j]/t[i][j]; Μετά το μετασχηματισμό συστολής πίνακα real T[n]; for (i = 1; i <= n; i++) { parfor (j = 1; j <= n; j++) { T[j] = a[i][j] * 3; b[i][j] = T[j] + b[i][j]/t[j];

Scalar replacement (βαθμωτή αντικατατάσταση) Αντίστοιχος μετασχηματισμός με τη συστολή πίνακα για την περίπτωση που ένας συχνά αναφερόμενος πίνακας είναι αμετάβλητος ως προς τις επαναλήψεις ενός εσώτερου βρόχου Αντικαθιστά τις αναφορές σε στοιχείο του πίνακα από βαθμωτή μεταβλητή Αρχικός βρόχος for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { total[i] = total[i] + a[i][j]; Μετά από βαθμωτή αντικατάσταση for (i = 1; i <= n; i++) { T = total[i]; for (j = 1; j <= n; j++) { T = T + a[i][j]; total[i] = T;

Χρονοπρογραμματισμός σε κυκλικές περιοχές Τεχνική χρονοπρογραμματισμού εξειδικευμένη σε κυκλικές περιοχές (βρόχοι) Τα περισσότερα προγράμματα εφαρμογών στην πράξη δαπανούν το μεγαλύτερο μέρος του χρόνου εκτέλεσής τους σε σώματα βρόχων Η βελτιστοποίηση των επιδόσεων με εκμετάλλευση της παραλληλίας του επεξεργαστή για τμήματα κώδικα βρόχου απαιτεί εξειδικευμένες τεχνικές Αύξηση του μεγέθους του βρόχου με ξετύλιγμα Υπέρθεση (overlapping) της εκτέλεσης διαφορετικών (διαδοχικών) επαναλήψεων παράλληλα Εκτέλεση τμημάτων από διαφορετικές επαναλήψεις παράλληλα Οταν αυτές οι τεχνικές εφαρμόζονται, οδηγούν σε σημαντικές βελτιώσεις h Δεν μπορεί να χειριστεί κάθε είδος βρόχου

Software pipelining (Λογισμική διοχέτευση) Η τεχνική χρονοπρογραμματισμού με software pipelining περιγράφει μία οικογένεια από αλγορίθμους που εφαρμόζονται σε κυκλικές περιοχές κώδικα Υποδιαιρούν ένα βρόχο σε επιμέρους στάδια Τα στάδια εκτελούνται περιλαμβάνοντας διαφορετικές επαναλήψεις σε παράλληλη επεξεργασία Στην ουσία χωρίζει τις εντολές του βρόχου σε στάδια διοχέτευσης, όπως η αντίστοιχη τεχνική στο υλικό Κύρια μέθοδος: Modulo Scheduling (χρονοπρογραμματισμός ακέραιου υπόλοιπου) Βελτιστοποιεί για ρυθμό παραγωγής νέων αποτελεσμάτων (throughput) Πλεονέκτημα είναι ότι η καθυστέρηση (latency) εξυπηρέτησης της μιας επανάληψης ξεχωριστά δεν έχει σημασία

Software pipelining: Παράδειγμα (1)

Software pipelining: Παράδειγμα (2)

Σύγκριση loop unrolling με software pipelining (1) Η διαφορά μεταξύ του loop unrolling και του software pipelining είναι ότι το unrolling μειώνει την επιβάρυνση του βρόχου, ελαττώνοντας τον απόλυτο αριθμό των επαναλήψεων, ενώ το sw pipelining μειώνει το κόστος έναρξης (initiation cost) κάθε νέας επανάληψης

Σύγκριση loop unrolling με software pipelining (2)

Αναφορές του μαθήματος I A. V. Aho, R. Sethi, and J. D. Ullman, Μεταγλωττιστές: Αρχές, Τεχνικές και Εργαλεία, με την επιμέλεια των: Άγγελος Σπ. Βώρος και Νικόλαος Σπ. Βώρος και Κων/νος Γ. Μασσέλος, κεφάλαια 10.5, 11.1 11.3, 11.9 11.10, Εκδόσεις Νέων Τεχνολογιών, 2008. Website for the English version: http://dragonbook.stanford.edu D. F. Bacon, S. L. Graham, and O. J. Sharp, Compiler transformations for high-performance computing, ACM Computing Surveys, vol. 26, no. 4, pp. 345 420, December 1994. V. H. Allan, R. B. Jones, R. M. Lee, and S. J. Allan, Software Pipelining, ACM Computing Surveys, vol. 27, no. 3, pp. 367 432, September 1995. N. Kavvadias. Hardware looping unit. [Online]. Available: http://www.opencores.org/projects.cgi/web/hwlu/overview/