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

Σχετικά έγγραφα
Θέματα Μεταγλωττιστών

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 12 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 9 ο

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

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

Θεωρία Υπολογισμού και Πολυπλοκότητα Κανονικές Γλώσσες (2)

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

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

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

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 1 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 11 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές Βελτιστοποίηση

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Αλγόριθμοι και Πολυπλοκότητα

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 5: Κανονικές Εκφράσεις

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (1)

3η Σειρά Γραπτών Ασκήσεων

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

ΣΥΝΕΚΤΙΚΟΤΗΤΑ ΓΡΑΦΗΜΑΤΩΝ

Διαχρονικές δομές δεδομένων

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Ουρά Προτεραιότητας (priority queue)

Ανάπτυξη και Σχεδίαση Λογισμικού

Συνδετικότητα γραφήματος (graph connectivity)

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

1 Διάσχιση κατευθυνόμενων γραφημάτων

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Θεωρία Υπολογισμού και Πολυπλοκότητα Κανονικές Γλώσσες (1)

Σημειωματάριο Τετάρτης 29 Νοε. 2017

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Θεωρία Υπολογισμού και Πολυπλοκότητα Ασυμφραστικές Γλώσσες (2)

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

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Κεφάλαιο 10 Ψηφιακά Λεξικά

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 13: Παραλλαγές Μηχανών Turing και Περιγραφή Αλγορίθμων

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 10: Αυτόματα Στοίβας II

Ουρά Προτεραιότητας (priority queue)

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 2 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Συνεκτικότητα Γραφήματος

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

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

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΑΛΓΟΡΙΘΜΩΝ ΚΕΦΑΛΑΙΟ 2 ο ΚΕΦΑΛΑΙΟ 7 ο ΕΡΩΤΗΣΕΙΣ ΓΕΝΙΚΑ ΠΕΡΙ ΑΛΓΟΡΙΘΜΩΝ

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

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Σειρά Προβλημάτων 5 Λύσεις

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

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

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

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Μεταγλωττιστές Βελτιστοποίηση

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

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 4: Μη Ντετερμινιστικά (Αντιαιτιοκρατικά) Πεπερασμένα Αυτόματα (ΝFA)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

Λογική Δημήτρης Πλεξουσάκης Φροντιστήριο 6: Προτασιακός Λογισμός: Μέθοδος Επίλυσης Τμήμα Επιστήμης Υπολογιστών

HY Λογική Διδάσκων: Δ. Πλεξουσάκης Εαρινό Εξάμηνο. Φροντιστήριο 6

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

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

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

Δομές Δεδομένων Ενότητα 2

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

Διερεύνηση γραφήματος

Σειρά Προβλημάτων 3 Λύσεις

Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 8 ο Μερική Επικάλυψη. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Σειρά Προβλημάτων 3 Λύσεις

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

ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ. Ενότητα 6: Προβλήματα ικανοποίησης περιορισμών. Ρεφανίδης Ιωάννης Τμήμα Εφαρμοσμένης Πληροφορικής

Βασικές Έννοιες Θεωρίας Γραφημάτων

Προγραμματισμός Ι (ΗΥ120)

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2) Ισοδυναµία CFG και PDA. Σε αυτό το µάθηµα. Αυτόµατα Στοίβας Pushdown Automata

Σειρά Προβλημάτων 5 Λύσεις

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

Επίλυση 1 ης Εργασίας. Παραδόθηκαν: 11/12 15%

Θεωρήστε ένα puzzle (παιχνίδι σπαζοκεφαλιάς) με την ακόλουθη αρχική διαμόρφωση : b b b w w w e

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

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθμοι και πολυπλοκότητα: 4 η σειρά ασκήσεων ΣΗΜΜΥ - Ε.Μ.Π.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Διαίρει και Βασίλευε. πρόβλημα μεγέθους Ν. διάσπαση. πρόβλημα μεγέθους k. πρόβλημα μεγέθους Ν-k

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

Επίπεδα Γραφήματα : Προβλήματα και Υπολογιστική Πολυπλοκότητα

Προβλήματα Ελάχιστου Κόστους Ροής σε Δίκτυο. Δίκτυα Ροής Ελάχιστου Κόστους (Minimum Cost Flow Networks)

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΘΕΜΑ Α. 1. Η δυαδική αναζήτηση χρησιμοποιείται μόνο σε ταξινομημένες συλλογές δεδομένων.

Σειρά Προβλημάτων 3 Λύσεις

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον. Διάρκεια 3 ώρες. Όνομα... Επώνυμο... Βαθμός...

Transcript:

Γιώργος Δημητρίου Ενότητα 3 η : Ενδιάμεση Αναπαράσταση / SSA

Ενδιάμεση Αναπαράσταση (IR) Η ενδιάμεση αναπαράσταση αποθηκεύει τη συγκεντρωμένη πληροφορία από την ανάλυση ενός προγράμματος Από την ενδιάμεση αναπαράσταση ξεκινάει η παραγωγή τελικού κώδικα Σημαντικός στόχος του σχεδιαστή ενός μεταγλωττιστή αποτελεί η ανεξαρτητοποίηση του εμπρόσθιου από το οπίσθιο τμήμα με τη βοήθεια μιας ισχυρής αλλά ευέλικτης ενδιάμεσης αναπαράστασης

Μορφές IR Γραμμικές αναπαραστάσεις Πλησιέστερα στον τελικό κώδικα Δύσκολες για βελτιστοποίηση Αναπαραστάσεις γραφημάτων Πλησιέστερα στον αρχικό κώδικα Πιο ευέλικτες για βελτιστοποίηση SSA Ουσιαστικά γραμμική αναπαράσταση Καλή για βελτιστοποίηση

Παράδειγμα Αρχικός κώδικας: if (x>y) a=a+3; else a=a-2; b=a; Τετράδες: 1: <=,x,y,5 2: +,a,3,$1 3: :=,$1,-,a 4: jump,-,-,7 5: -,a,2,$2 6: :=,$2,-,a 7: :=,a,-,b x AST: if > = y a a stmt = + a 3 a b - = 2 a SSA: if (x>y) a1:=a+3 else a2:=a-2 a3:=φ(a1,a2) b:=a3

Εισαγωγή στη Μορφή SSA Ένα πρόγραμμα βρίσκεται σε μορφή SSA (Static Single-Assignment), εάν και μόνο εάν: Κάθε μεταβλητή ορίζεται στατικά ακριβώς μία φορά, και Κάθε χρήση μεταβλητής ακολουθεί πάντα τον ορισμό της

Γιατί SSA; Αποτελεί μια κοινή βάση για την επίλυση πολλών κλασικών προβλημάτων ανάλυσης ροής δεδομένων Ενσωματώνει ροή ελέγχου και ροή δεδομένων στην ίδια δομή Η μορφή SSA κατασκευάζεται και συντηρείται εύκολα Πολλοί αλγόριθμοι ανάλυσης ροής δεδομένων έχουν χαμηλότερη πολυπλοκότητα με SSA από ό,τι με AST

Στατικός Ορισμός Μεταβλητών Κάθε μεταβλητή έχει μόνο έναν ορισμό (δηλαδή ανάθεση τιμής) στον κώδικα Ο ορισμός αυτός μπορεί να βρίσκεται σε βρόχο, κι έτσι να εκτελείται πολλές φορές Άρα στην ουσία μια μεταβλητή ορίζεται δυναμικά πολλές φορές

Ορισμοί και Μονοπάτια Ελέγχου Κάθε μεταβλητή πρέπει να έχει ένα μοναδικό ορισμό σε κάθε σημείο χρήσης της (reaching definition) Όταν δύο μονοπάτια συναντώνται, εισάγεται μια ειδική συνάρτηση φ(), η οποία συνδέει τους διαφορετικούς ορισμούς μιας μεταβλητής στον ένα μοναδικό ορισμό που απαιτεί η μορφή SSA

Παράδειγμα: CFG a = a = = a+5 a = = a+5 Πολλαπλοί Ορισμοί Χρήσης = a+5 Stanford University

Παράδειγμα: Μορφή SSA a 1 = a 3 = = a 1 +5 a 2 = = a 2 +5 a 4 = φ(a 1,a 3 ) = a 4 +5 Μοναδικός Ορισμός Χρήσης Stanford University

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

Αποδοτικότητα της Μορφής SSA Use-Def chains: Πολλές χρήσεις (uses) προς πολλούς ορισμούς (defs) a = a = a = Κόστος αναπαράστασης Δυσκολία διαχείρισης a a a Peking University

Αποδοτικότητα της Μορφής SSA Το πλήθος των ακμών μειώθηκε από 9 σε 6 Η συνάρτηση φ() απότελεί ορισμό (def) και τα ορίσματά της απότελούν χρήσεις (uses) Πολλές χρήσεις προς έναν ορισμό Κάθε ορισμός είναι α- ποκλειστικός για όλες τις χρήσεις του a = a = a = a = φ a,a,a) a a a Peking University

Μετονομασία Τιμών Η αναπαράσταση των ακμών usedef δεν είναι πια απαραίτητη a 1 = a 2 = a 4 = φ a 1,a 2,a 3 ) a 3 = a 4 a 4 a 4 Peking University

Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου Είναι αυτός ο κώδικας σε μορφή SSA; Όχι, υπάρχουν δύο ορισμοί για τη χρήση του a στο μπλοκ B4 (στα μπλοκ B1 και B3) Πώς μετατρέπεται ο κώδικας σε μορφή SSA; B3 B1 B2 b M[x] a 0 a b if b<4 Δημιουργούμε δύο εκδοχές για το a, μία στο B1 και μία στο B3 B4 c a + b Peking University

Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου Ποια εκδοχή του a χρησιμοποιούμε τώρα στο μπλοκ B4; B1 b M[x] a1 0 Εισάγουμε τη συνάρτηση φ() η οποία κατά κάποιον τρόπο ξέρει από ποιο μονοπάτι φτάσαμε στο μπλοκ B4: B3 B2 a2 b if b<4 φ a2, a1 = a2, αν φτάσαμε από το Β3 a1, αν φτάσαμε από το Β2 B4 c a? + b Peking University

Μορφή SSA και Σημεία Σύγκλισης Ροής Ελέγχου Ποια εκδοχή του a χρησιμοποιούμε τώρα στο μπλοκ B4; B1 b M[x] a1 0 Εισάγουμε τη συνάρτηση φ() η οποία κατά κάποιον τρόπο ξέρει από ποιο μονοπάτι φτάσαμε στο μπλοκ B4: B3 B2 a2 b if b<4 φ a2, a1 = a2, αν φτάσαμε από το Β3 a1, αν φτάσαμε από το Β2 B4 a3 φ(a2,a1) c a3 + b Peking University

Παράδειγμα Βρόχου a 0 b a+1 c c+b a b*2 if a < N return Σημείωση: Μόνο τα a και c έχουν χρήση στο σώμα του βρόχου πριν το νέο ορισμό τους. Το b ορίζεται εκ νέου στην αρχή του σώματος του βρόχου! a1 0 a3 (a1,a2) b1 (b0,b2) c2 (c0,c1) b2 a3+1 c1 c2+b2 a2 b2*2 if a2 < N return Peking University Η φ(b0,b2) δε χρειάζεται, αφού δεν υπάρχει χρήση του b0. Όμως η φάση εισαγωγής των συναρτήσεων φ() αυτό δεν το γνωρίζει. Άχρηστες συναρτήσεις αφαιρούνται από τη φάση απαλοιφής άχρηστου κώδικα.

Υλοποίηση Συναρτήσεων φ() Πώς υλοποιούμε μια συνάρτηση φ() που γνωρίζει ποιο μονοπάτι ελέγχου ακολουθείται; Απάντηση 1: Δεν την υλοποιούμε!! Η συνάρτηση φ() χρησιμοποιείται μόνο για να συνδέσει χρήσεις με ορισμούς κατά τη φάση της βελτιστοποίησης, αλλά δεν υλοποιείται. Απάντηση 2: Αν πρέπει να εκτελέσουμε μια συνάρτηση φ(), μπορούμε να την υλοποιήσουμε με εισαγωγή εντολών MOVE σε όλα τα μονοπάτια.

Εισαγωγή Συναρτήσεων φ() Μπορούμε να εισάγουμε μια συνάρτηση φ() για κάθε μεταβλητή σε κάθε σημείο σύγκλισης του γράφου ροής ελέγχου (CFG). Αλλά αυτό δεν είναι και η καλύτερη ιδέα. Ποια θα πρέπει να είναι τα κριτήριά μας για να εισάγουμε μια συνάρτηση φ() για κάποια μεταβλητή a σε κάποιον κόμβο z του CFG; Διαισθητικά, θα πρέπει να εισάγουμε μια συνάρτηση φ() εάν υπάρχουν δύο ορισμοί της μεταβλητής a που φτάνουν στον κόμβο z μέσα από διαφορετικά μονοπάτια.

Η Απλοϊκή Μέθοδος Απλή εισαγωγή μιας συνάρτησης φ() σε κάθε σημείο σύγκλισης του CFG Αλλά αυτό δεν είναι αποδοτικό εισάγουμε υπερβολικά πολλές άχρηστες συναρτήσεις φ()! Ποιος είναι καλός αλγόριθμος εισαγωγής μόνο των χρήσιμων συναρτήσεων φ();

Κριτήριο Σύγκλισης Μονοπατιών Εισαγωγή μιας συνάρτησης φ() για μια μεταβλητή a σε κάποιον κόμβο z, εάν είναι αληθείς όλες οι παρακάτω συνθήκες: 1. Υπάρχει μπλοκ x όπου ορίζεται η μεταβλητή a 2. Υπάρχει και άλλο μπλοκ y x που ορίζει την a 3. Υπάρχει μη κενό μονοπάτι Pxz από το x στο z 4. Υπάρχει μη κενό μονοπάτι Pyz από το y στο z 5. Τα μονοπάτια Pxz και Pyz δεν έχουν κοινούς κόμβους πέρα από τον z 6. Ο κόμβος z δεν εμφανίζεται και στα δύο μονοπάτια Pxz και Pyz πριν το τέλος τους, αλλά μπορεί να εμφανίζεται σε ένα από τα δύο. Ο κόμβος έναρξης θεωρείται ότι περιέχει ορισμό για κάθε μεταβλητή.

Επαναληπτικό Κριτήριο Σύγκλισης Μονοπατιών Εφόσον μια συνάρτηση φ() αποτελεί και αυτή ορισμό της μεταβλητής a, το κριτήριο σύγκλισης θα πρέπει να εφαρμόζεται επαναληπτικά: όσο υπάρχουν κόμβοι x, y, z που ικανοποιούν τις συνθήκες 1-6 και ο z δεν περιέχει συνάρτηση φ() για τη μεταβλητή a επανάλαβε εισαγωγή a (a, a,, a) στον κόμβο z Ο αλγόριθμος είναι υπερβολικά ακριβός, εφόσον απαιτεί την εξέταση κάθε τριάδας κόμβων x, y, z και κάθε μονοπατιού από τον x στον y. Μπορούμε καλύτερα;

Η Ιδέα των Συνόρων Κυριαρχίας Διαισθητικά: bb1 a bbn Μπλοκ κυριαρχούμενα από το bb1 a Σύνορο μεταξύ κυριαρχίας και μη-κυριαρχίας (Σύνορο Κυριαρχίας) Peking University

Σύνορα Κυριαρχίας (Dominance Frontiers) Το σύνορο κυριαρχίας DF(x) ενός κόμβου x είναι το σύνολο όλων των κόμβων z τέτοιων ώστε το x κυριαρχεί κάποιον πρόγονο του z, χωρίς αυστηρή κυριαρχία του z. Εάν το x κυριαρχεί το y και x y, τότε λέμε ότι το x κυριαρχεί αυστηρά το y

Υπολογισμός του Συνόρου Κυριαρχίας Διαισθητικά: Ποιο είναι το σύνορο κυριαρχίας του κόμβου 5; 1. Εύρεση περιοχής κυριαρχίας του κόμβου 5: {5, 6, 7, 8} 1 2 9 5 2. Εύρεση προορισμών των ακμών που φεύγουν από την περιοχή κυριαρχίας του κόμβου 5 Προορισμοί που αποτελούν το σύνορο κυριαρχίας του κόμβου 5: DF(5) = { 4, 5, 12, 13} 3 4 6 7 10 11 8 12 13 Peking University Γιατί ο κόμβος 5 βρίσκεται στο DF(5);

Αλγόριθμος Μετατροπής σε SSA Σε γενικές γραμμές, η μετατροπή ενός κώδικα σε μορφή SSA γίνεται σε τρία βήματα: Βήμα 1. Ξεκινώντας από το CFG, βρίσκουμε τα σύνορα κυριαρχίας όλων των κόμβων. Βήμα 2. Χρησιμοποιώντας τα σύνορα κυριαρχίας, καθορίζουμε τις θέσεις όπου θα εισαχθούν συναρτήσεις φ() για κάθε μεταβλητή του προγράμματος. Βήμα 3. Μετονομάζουμε τις μεταβλητές, αντικαθιστώντας κάθε αναφορά μιας μεταβλητής V με την κατάλληλη δεικτοδοτούμενη αναφορά μιας νέας μεταβλητής V i

Γράφος Ροής Ελέγχου (Control Flow Graph) CFG = (V, E), όπου V οι κόμβοι και Ε οι ακμές Το σύνολο V περιέχει και τους ειδικούς κόμβους START και END: Κάθε κόμβος είναι προσβάσιμος από τον κόμβο START Ο κόμβος END είναι προσβάσιμος από κάθε κόμβο του CFG. Ο κόμβος START δεν έχει προγόνους Ο κόμβος END δεν έχει απογόνους

Δέντρο Κυριαρχίας (Dominator Tree) Αν ο κόμβος X υπάρχει σε κάθε μονοπάτι μεταξύ START και Y, τότε ο X κυριαρχεί τονy. Η σχέση κυριαρχίας είναι ανακλαστική και μεταβατική. idom(y): άμεσος κυρίαρχος τουy Δέντρο Κυριαρχίας Ο κόμβος START αποτελεί τη ρίζα Κάθε κόμβος Υ εκτός του START έχει γονέα τον κόμβο idom(y)

Παράδειγμα Δέντρου Κυριαρχίας START START a b c d CFG END DT Stanford University

Παράδειγμα Δέντρου Κυριαρχίας START a a START b c d CFG END DT Stanford University

Παράδειγμα Δέντρου Κυριαρχίας START a a START b c b c d CFG END DT Stanford University

Παράδειγμα Δέντρου Κυριαρχίας START a a START b c b c d d CFG END DT Stanford University

Παράδειγμα Δέντρου Κυριαρχίας START a a START END b c b c d d CFG END DT Stanford University

Παράδειγμα Συνόρων Κυριαρχίας START a a START END b c b c d DT d DF(c) =? CFG END DF(a) =? Stanford University

Παράδειγμα Συνόρων Κυριαρχίας START a a START END b c b c d DT d DF(c) = {d} CFG END DF(a) =? Stanford University

Παράδειγμα Συνόρων Κυριαρχίας START START a a END b c b c d DT d DF(c) = {d} CFG END DF(a) = {END} Stanford University

Υπολογισμός Συνόρων Κυριαρχίας Σύνορο κυριαρχίας DF(X) του κόμβου X Σχέση 1: DF(X) ={Y P Pred(Y): X dom P and X!sdomY } Σχέση 2: DF(X) = DF local (X) Z Παιδιά(X) DF up (Z) DF local (X) = {Y Παιδιά(X) X!sdomY} = {Y Παιδιά(X) idom(y) X} DF up (Z) = {Y DF(Z) idom(z)!sdomy}

Υπολογισμός Συνόρων Κυριαρχίας Γιατί οι προηγούμενες σχέσεις 1 και 2 είναι ισοδύναμες; Είναι εύκολο να πάμε από τη σχέση 1 στη σχέση 2. Άρα πρέπει να δείξουμε ότι η σχέση 2 βρίσκει κάθε κόμβο του DF(X). Έστω Y DF(X) και U->Y ακμή τέτοια, ώστε ο Χ κυριαρχεί τον U αλλά δεν κυριαρχεί αυστηρά τονy. Αν U = X, τότεy DF local (X) Αν U X, τότε υπάρχει μονοπάτι μεταξύ Χ και U στο Δέντρο Κυριαρχίας κάτι που σημαίνει ότι υπάρχει παιδί Ζ του Χ το οποίο να κυριαρχεί τον U. Ο Z δεν κυριαρχεί αυστηρά τον Υ, επειδή ο Χ δεν κυριαρχεί αυστηρά τονy. ΆραY DF up (Z).

Συναρτήσεις φ() και Σύνορο Κυριαρχίας Διαισθητικά καταλαβαίνουμε ότι η σχέση Y DF(X) σημαίνει: ΟY έχει πολλαπλούς προγόνους Ο X κυριαρχεί κάποιον από αυτούς, έστω τον U, οπότε ο U κληρονομεί όλες τις σχέσεις του κόμβου X Οι ορισμοί χρήσης του Υ προέρχονται από τον U και άλλους προγόνους Άρα ο Y είναι ακριβώς μια θέση όπου πρέπει να μπει συνάρτηση φ()

Εισαγωγή Συναρτήσεων φ() Αλγόριθμος: Για κάθε μεταβλητή V Βάλε σε μια λίστα εργασίας W όλους τους κόμβους με ανάθεση στη V Όσο υπάρχει X στη λίστα W επανάλαβε Για κάθε κόμβοy στο DF(X) κάνε Εάν δεν υπάρχει φ() στονy τότε Πρόσθεσε (V = φ (V,,V)) στονy Εάν οy δεν έχει ξανασυναντηθεί, βάλτον στη λίστα W.

Μετονομασία Μεταβλητών Αναδρομικά για κάθε μεταβλητή, ξεκινώντας με τον κόμβο START, χρησιμοποιώντας στοίβα Για τον κόμβο X Για κάθε ανάθεση (V = ) του X Μετονόμασε τις χρήσεις της μεταβλητής V με το όνομα στην κορυφή της στοίβας Βάλε το νέο όνομα V i στη στοίβα i = i + 1 Μετονόμασε τα ορίσματα της συνάρτησης φ() μέσω των ακμών του CFG Εφάρμοσε αναδρομικά για όλα τα παιδιά του Χ στο δέντρο κυριαρχίας Για κάθε ανάθεση (V = ) του X Βγάλε το V i από τη στοίβα

Παραγωγή Κώδικα από SSA Απλοϊκή λύση: Μια συνάρτηση φ() με k ορίσματα, που βρίσκεται στην αρχή ενός κόμβου Χ, μπορεί να αντικατασταθεί α- πό k απλές αναθέσεις, στο τέλος κάθε πατρικού κόμβου του Χ στο CFG. Πρόβλημα αποδοτικότητας κώδικα;

Παραγωγή Κώδικα από SSA Επιλογή 1: χρωματισμός Υπολόγισε τις διάρκειες ζωής των μεταβλητών και δώσε ένα μοναδικό όνομα μεταβλητής για κάθε διάρκεια ζωής Όπως κάνουμε στη δέσμευση καταχωρητών! Επιλογή 2: απλή διαγραφή όλων των συναρτήσεων φ() Οι βελτιστοποιήσεις με βάση τη μορφή SSA πρέπει να μη δημιουργούν επικαλυπτόμενες διάρκειες ζωής

Απαλοιφή Άχρηστου Κώδικα Για ποιο λόγο ένας κώδικας είναι άχρηστος; Ανάθεση χωρίς επόμενη χρήση Μέθοδος απαλοιφής άχρηστου κώδικα Σημείωσε όλες τις εντολές ως άχρηστες Σημείωσε κάποιες εντολές ως χρήσιμες (ζωντανές) με βάση κάποια κριτήρια Έτσι όμως δημιουργείς και άλλες χρήσιμες εντολές Πραγματικά άχρηστος κώδικας είναι εκείνος που έμεινε σημειωμένος ως άχρηστος Peking University

Παράδειγμα Χρήσης SSA Διαισθητική απαλοιφή άχρηστου κώδικα (dead code elimination) Εφόσον για κάθε μεταβλητή υπάρχει μόνο ένας ορισμός, αν η λίστα χρήσεων της μεταβλητής είναι κενή, τότε ο ορισμός είναι άχρηστος Όταν μια εντολή v x op y απαλείφεται επειδή δεν υπάρχει χρήση της v, τότε η εντολή πρέπει να απαλειφτεί και από τις χρήσεις των x και y, κάτι που μπορεί να αχρηστεύσει και τους ορισμούς αυτών των μεταβλητών, κοκ

Παράδειγμα Χρήσης SSA Διαισθητική διάδοση σταθερής τιμής (constant propagation) Αν υπάρχει εντολή v c, όπου c είναι σταθερά, τότε όλες οι χρήσεις της v μπορούν να αντικατασταθούν με c Μια εντολή της μορφής v φ(c1, c2,, cn) όπου όλα τα ci είναι ταυτόσημα μπορεί να απλοποιηθεί σε v c. Χρησιμοποιώντας αλγόριθμο με λίστα εργασίας σε ένα πρόγραμμα που βρίσκεται σε μορφή SSA, υλοποιούμε διάδοση σταθεράς σε γραμμικό χρόνο

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 B3 j i k k+1 B7 B2 B1 if j<20 i 1 j 1 k 0 if k<100 j k k k+2 return j B6 B4 Peking University

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 B3 j i k3 k+1 B7 B1 B2 if j<20 i 1 j 1 k1 0 if k<100 return j j k k5 k+2 B6 B4

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k+1 B7 B3 B1 B2 if j<20 i 1 j 1 k1 0 if k<100 return j j k k5 k+2 k4 (k3,k5) B6 B4

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k+1 B7 B3 B2 B1 if j<20 i 1 j 1 k1 0 k2 (k4,k1) if k<100 return j j k k5 k+2 k4 (k3,k5) B6 B4

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j i k3 k2+1 B7 B3 B2 B1 if j<20 i 1 j 1 k1 0 k2 (k4,k1) if k2<100 return j j k2 k5 k2+2 k4 (k3,k5) B6 B4

Παράδειγμα i=1; j=1; k=0; while(k<100) { if(j<20) { j=i; k=k+1; } else { j=k; k=k+2; } } return j; } B5 j3 i1 k3 k2+1 B7 B3 B2 if j2<20 B1 j4 (j3,j5) k4 (k3,k5) i1 1 j1 1 k1 0 j2 (j4,j1) k2 (k4,k1) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4

Διάδοση Σταθεράς B1 i1 1 j1 1 k1 0 B1 i1 1 j1 1 k1 0 B2 j2 (j4,j1) k2 (k4,k1) if k2<100 B2 j2 (j4, 1) k2 (k4,0) if k2<100 B3 if j2<20 return j2 B4 B3 if j2<20 return j2 B4 B5 j3 i1 k3 k2+1 j5 k2 k5 k2+2 B6 B5 j3 1 k3 k2+1 j5 k2 k5 k2+2 B6 B7 j4 (j3,j5) k4 (k3,k5) B7 j4 (j3,j5) k4 (k3,k5)

Απαλοιφή Άχρηστου Κώδικα B1 i1 1 j1 1 k1 0 B2 j2 (j4, 1) k2 (k4,0) if k2<100 B2 j2 (j4,1) k2 (k4,0) if k2<100 B3 if j2<20 return j2 B4 B3 if j2<20 return j2 B4 B5 j3 1 k3 k2+1 j5 k2 k5 k2+2 B6 B5 j3 1 k3 k2+1 j5 k2 k5 k2+2 B6 B7 j4 (j3,j5) k4 (k3,k5) B7 j4 (j3,j5) k4 (k3,k5)

Συνέχεια B2 j2 (j4,1) k2 (k4,0) if k2<100 B2 j2 (j4,1) k2 (k4,0) if k2<100 B3 if j2<20 return j2 B4 B3 if j2<20 return j2 B4 B5 j3 1 k3 k2+1 j5 k2 k5 k2+2 B6 B5 j3 1 k3 k2+1 j5 k2 k5 k2+2 B6 B7 j4 (j3,j5) k4 (k3,k5) B7 j4 (1,j5) k4 (k3,k5)

Κι Άλλη Βελτιστοποίηση B5 k3 k2+1 B7 B3 B2 if j2<20 j4 (1,j5) k4 (k3,k5) j2 (j4,1) k2 (k4,0) if k2<100 return j2 j5 k2 k5 k2+2 B6 B4 Μπορούμε να δούμε ότι το μπλοκ Β6 δεν εκτελείται ποτέ! Πώς μπορούμε να το καταλάβουμε αυτό και να απλοποιήσουμε τον κώδικα; Χρησιμοποιώντας τη διάδοση σταθεράς υπό συνθήκη, η οποία βρίσκει ότι το j2 δεν αλλάζει τιμή και έτσι επιτρέπει περαιτέρω απαλοιφή άχρηστου κώδικα

Περαιτέρω Απαλοιφή Άχρηστου Κώδικα B2 j2 (j4,1) k2 (k4,0) if k2<100 B2 j2 (j4,1) k2 (k4,0) if k2<100 B3 if j2<20 return j2 B4 return j2 B4 k3 k2+1 j5 k2 k5 k2+2 B6 B5 k3 k2+1 B7 j4 (1,j5) k4 (k3,k5) B7 j4 (1) k4 (k3)

Απαλοιφή Συναρτήσεων φ B2 j2 (j4,1) k2 (k4,0) if k2<100 B2 j2 (j4,1) k2 (k4,0) if k2<100 return B4 j2 B4 return j2 B4 B5 k3 k2+1 B5 k3 k2+1 B7 j4 (1) k4 (k3) B7 j4 1 k4 k3

Διάδοση Σταθεράς και Αντιγράφου B2 j2 (j4,1) k2 (k4,0) if k2<100 B2 j2 (1,1) k2 (k3,0) if k2<100 return j2 B4 return j2 B4 B5 k3 k2+1 B5 k3 k2+1 B7 j4 1 k4 k3 B7 j4 1 k4 k3

Κι Άλλος Άχρηστος Κώδικας B2 j2 (1,1) k2 (k3,0) if k2<100 B2 j2 (1,1) k2 (k3,0) if k2<100 return j2 B4 return j2 B4 B5 k3 k2+1 B5 k3 k2+1 B7 j4 1 k4 k3

Κι Άλλη Απλοποίηση Συνάρτησης φ B2 j2 (1,1) k2 (k3,0) if k2<100 B2 j2 1 k2 (k3,0) if k2<100 return j2 B4 return j2 B4 B5 k3 k2+1 B5 k3 k2+1

Κι Άλλη Διάδοση Σταθεράς B2 j2 1 k2 (k3,0) if k2<100 B2 j2 1 k2 (k3,0) if k2<100 return j2 B4 return 1 B4 B5 k3 k2+1 B5 k3 k2+1

Τελικός Κώδικας! B2 j2 1 k2 (k3,0) if k2<100 return 1 B4 return 1 B4 B5 k3 k2+1