Γιώργος Δημητρίου Ενότητα 7 η : Περιοχές: Εναλλακτική Μέθοδος Ανάλυσης Ροής Δεδομένων
Περιοχές (Regions) Σε κάποιες περιπτώσεις βρόχων η ανάλυση ροής δεδομένων με τον επαναληπτικό αλγόριθμο συγκλίνει αργά Εναλλακτικά μπορούμε να χρησιμοποιήσουμε τη μέθοδο των περιοχών Περιοχή είναι συνδυασμός βασικών ενοτήτων και ακμών του CFG σε νέο σύνθετο κόμβο του CFG με ενιαία συνάρτηση διάδοσης Ιεραρχική εύρεση περιοχών οδηγεί σε μία συνάρτηση διάδοσης για όλο το CFG, και άμεση επίλυση του προβλήματος!
Απαραίτητες Έννοιες Για την ανάλυση με περιοχές χρειαζόμαστε κάποιες νέες έννοιες Κυριαρχία Διάταξη κόμβων του CFG Κατηγορίες ακμών του CFG Βρόχοι Κάποιες έννοιες τις έχουμε ήδη μελετήσει
Κυρίαρχοι (Dominators) Ο κόμβος d κυριαρχεί τον κόμβο n εάν κάθε μονοπάτι από τον κόμβο entry προς τον n περνάει από τον d συμβολικά: d dom n Παρατηρήσεις: Κάθε κόμβος κυριαρχεί τον εαυτό του Ο κόμβος entry κυριαρχεί κάθε κόμβο Συνήθεις περιπτώσεις: Ο κόμβος ελέγχου ενός βρόχου while κυριαρχεί όλους τους κόμβους του σώματος του βρόχου Ο κόμβος που τελειώνει με τον κώδικα ελέγχου μιας διακλάδωσης if-then-else κυριαρχεί τις ενότητες και των δύο κατευθύνσεων της διακλάδωσης
Παράδειγμα Κυριαρχίας 1 4 2 5 3 Stanford University
Δέντρο Κυριαρχίας Άμεση κυριαρχία: d idom n Αν d dom n, d n, και δεν υπάρχει κόμβος m τέτοιος ώστε d dom m and m dom n Η σχέση άμεσης κυριαρχίας απεικονίζεται σε δέντρο: 4 1 5 2 3 4 1 5 2 Stanford University 3
Εύρεση Κυριάρχων Η εύρεση κυριάρχων μπορεί να γίνει με τις μεθόδους ανάλυσης ροής δεδομένων που μελετήσαμε Πρόβλημα: Για κάθε κόμβο, υπολόγισε όλους τους κυριάρχους του Κατεύθυνση: προς τα εμπρός Πράξη σύγκλισης: τομή συνόλων Οριακές συνθήκες: OUT[Entry] = {Entry} Αρχικοποίηση: OUT[B] = όλοι οι κόμβοι Εξισώσεις: OUT[B] = IN[B] U {B} IN[B] = p άμεσος πρόγονος του B OUT[p]
Παράδειγμα Κυριαρχίας {1} 1 4 {1,4} 2 {1,2} 5 3 {1,2,3} {1,5} Stanford University
Αναζήτηση κατά Βάθος Άρχισε με τον κόμβο entry Αν έχεις άμεσο απόγονο που δεν τον έχεις ακόμα επισκεφτεί, επισκέψου τον Αλλιώς, επέστρεψε στον πατρικό σου κόμβο (από όπου ήρθες)
Επικαλύπτον Δέντρο Αναζήτησης κατά Βάθος (DFST) Ρίζα = entry Οι ακμές του DFST είναι οι ακμές που ακολουθούμε για να επισκεφτούμε τους κόμβους για πρώτη φορά 2 1 3 4 5 Stanford University
Διάταξη Κόμβων κατά Βάθος Η αντίστροφη της σειράς με την οποία μια αναζήτηση κατά βάθος επιστρέφει από τους κόμβους Ισοδύναμα, η αντίστροφη σειρά διαπέρασης μετα-διάταξης (post-order) του DFST
Παράδειγμα Διάταξης 1 4 2 5 3 Stanford University
Κατηγορίες Ακμών του CFG Ακμές προώθησης (advancing edges) είναι οι ακμές του CFG προς κάποιον απόγονο στο DFST Οι ακμές του DFST είναι ακμές προώθησης Ακμές επιστροφής (retreating edges) είναι ακμές του CFG προς κάποιον πρόγονο στο DFST, συμπεριλαμβανομένου του ίδιου Ακμές διασταύρωσης (cross edges) είναι ακμές μεταξύ δύο κόμβων του CFG χωρίς σχέση πρόγονου-απόγονου στο DFST
Παράδειγμα Ακμών 4 Επιστροφής 1 5 2 Διασταύρωσης 3 Προώθησης (επιπλέον των ακμών του δέντρου) Stanford University
Οπισθοακμές Μια ακμή του CFG είναι οπισθοακμή αν ο κόμβος κεφαλής της κυριαρχεί του κόμβου ουράς της Παρατήρηση: Κάθε οπισθοακμή είναι ακμή επιστροφής για κάθε DFST ο- ποιουδήποτε CFG Το αντίστροφο όμως δεν ισχύει πάντα!
Παράδειγμα Οπισθοακμών {1} 1 4 {1,4} 2 {1,2} 5 3 {1,2,3} {1,5} Stanford University
Ελαττώμενοι CFGs Ένας CFG είναι ελαττώμενος (reducible) εάν κάθε ακμή επιστροφής σε κάθε DFST αυτού του CFG είναι οπισθοακμή Για να ελέγξουμε αν ένας CFG είναι ελαττώμενος, απομακρύνουμε τις οπισθοακμές του και ελέγχουμε αν το αποτέλεσμα είναι μη κυκλικό κατευθυνόμενο γράφημα
Παράδειγμα Ελέγχου Ελάττωσης 1 4 2 5 3 Stanford University
Παράδειγμα Ελέγχου Ελάττωσης 1 4 2 5 3 Μη κυκλικό κατευθυνόμενο γράφημα
Ποιοι CFGs Είναι Ελαττώμενοι; Απάντηση: Οι περισσότεροι CFGs είναι ελαττώμενοι Ειδικότερα: Δομημένος προγραμματισμός με while-loops, for-loops, repeat-loops, ifthen(-else), break και continue οδηγεί σε ελαττώμενους CFGs
Παράδειγμα μη Ελαττώμενου CFG A B C B A Σε οποιοδήποτε DFST, μια από τις δύο αυτές ακμές θα είναι ακμή επιστροφής C A C B
Γιατί Εξετάζουμε τις Οπισθοακμές; 1. Κατάλληλη διάταξη των κόμβων στον επαναληπτικό αλγόριθμο DFA εξασφαλίζει ότι το πλήθος των περασμάτων που απαιτούνται περιορίζεται από το πλήθος των φωλιασμένων οπισθοακμών 2. Το πλήθος των φωλιασμένων οπισθοακμών περιορίζεται από το μέγιστο βάθος φωλιάσματος των βρόχων του CFG
Παράδειγμα με Ορισμούς Χρήσεων Έστω ότι επισκεπτόμαστε τους κόμβους σε διάταξη αναζήτησης κατά βάθος Η πληροφορία ότι ένας ορισμός d φτάνει σε κάποια ενότητα διαδίδεται σε ένα πέρασμα όσο ακολουθείται η διάταξη των κόμβων Όταν ο ορισμός d φτάνει σε μια ακμή επιστροφής, δε μπορεί να διαδώσει την πληροφορία από το σύνολο OUT στο IN Άρα απαιτείται επόμενο πέρασμα
Παράδειγμα με Ορισμούς Χρήσεων d 4 d d 1 d d 5 d d 2 d d 3 d Stanford University Έστω ότι υπάρχει ορισμός της μεταβλητής d στον κόμβο 2
Βάθος Γράφου Ροής Ελέγχου Ονομάζουμε βάθος (depth) ενός CFG το μέγιστο πλήθος ακμών επιστροφής σε ο- ποιοδήποτε μη κυκλικό μονοπάτι του CFG Για το παράδειγμα των ορισμών χρήσεων, εάν χρησιμοποιήσουμε διάταξη αναζήτησης κατά βάθος, η σύγκλιση του αλγόριθμου επιτυγχάνεται σε depth+2 περάσματα depth+1 περάσματα για τις ακμές επιστροφής 1 τελευταίο πέρασμα για έλεγχο σύγκλισης
Παράδειγμα: Βάθος = 2 1 -> 4 ->7 - - -> 3 -> 10 ->17 - - -> 6 -> 18 -> 20 επιστροφή επιστροφή προώθηση προώθηση προώθηση
Όμοια Οι διαθέσιμες εκφράσεις υπολογίζονται επίσης σε depth+2 περάσματα Η μη διαθεσιμότητα διαδίδεται σε αύξουσα διάταξη κόμβων σε ένα πέρασμα Οι ζωντανές μεταβλητές υπολογίζονται σε depth+2 περάσματα, σε σειρά αντίστροφη της διάταξης κατά βάθος Μια χρήση διαδίδεται προς τα πίσω σε φθίνουσα διάταξη κόμβων σε ένα πέρασμα
Γενικά Το άνω φράγμα depth+2 περασμάτων ισχύει για μονότονα πλαίσια, όσο η πληροφορία αρκεί να διαδίδεται σε μη κυκλικά μονοπάτια Παράδειγμα: ένας ορισμός φτάνει σε ένα σημείο προγράμματος κατά μήκος μη κυκλικών μονοπατιών
Όμως Η διάδοση σταθεράς δεν έχει την ιδιότητα της επιμεριστικότητας και άρα δεν είναι σίγουρα μονότονη L: a = b b = c c = 1 goto L a = b b = c c = 1
Πόσο Καλό Είναι το Φράγμα depth+2; Οι συνήθεις προγραμματιστικές δομές παράγουν ελαττώμενους γράφους ροής με πλήθος οπισθοακμών το πολύ ίσο με το μέγιστο βάθος φωλιάσματος βρόχων Το βάθος φωλιάσματος τις περισσότερες φορές δεν είναι μεγάλο Μια (παλιά) μελέτη του Knuth έχει δείξει ότι το μέσο βάθος τυπικών γράφων ροής είναι ~2.75.
Παράδειγμα Φωλιάσματος Βρόχων βάθος φωλιάσματος = 3 βάθος CFG = 3 βάθος φωλιάσματος = 3 βάθος CFG = 1 Stanford University
Φυσικοί Βρόχοι Ορίζουμε φυσικό βρόχο (natural loop) ένα βρόχο με: Μοναδικό κόμβο εισόδου (header) Ο κόμβος εισόδου κυριαρχεί όλους τους κόμβους του βρόχου Μια οπισθοακμή προς τον κόμβο εισόδου
Εύρεση Φυσικών Βρόχων Ο φυσικός βρόχος μιας οπισθοακμής a b είναι το σύνολο {b} και όλοι οι κόμβοι που οδηγούν στον κόμβο a χωρίς να περνάνε από τον b Μέθοδος: Αφαίρεσε τον b από τον CFG και βρες όλους τους προγόνους του a
Παράδειγμα Φυσικών Βρόχων φυσικός βρόχος ακμής 5 -> 1 4 1 5 2 3 φυσικός βρόχος ακμής 3 -> 2 Stanford University
Σχέσεις Μεταξύ Βρόχων Εάν δύο βρόχοι δεν έχουν κοινό κόμβο εισόδου Είτε είναι ασύνδετοι μεταξύ τους Είτε ο ένας περιέχεται (είναι φωλιασμένος) στον άλλο ο πιο εσωτερικός βρόχος: αυτός που δεν περιέχει άλλο βρόχο Εάν δύο βρόχοι έχουν κοινό κόμβο εισόδου Δεν διακρίνεται σχέση φωλιάσματος Οπότε θεωρούνται ένας βρόχος 1 Παράδειγμα: 2 3 4
Περιοχές (Regions) Ένα σύνολο κόμβων N και ακμών E είναι περιοχή (region) εάν: 1.Υπάρχει ένας κόμβος επικεφαλίδα h στο N που κυριαρχεί όλους τους κόμβους του N 2.Εάν n h N, τότε όλοι οι άμεσοι πρόγονοι του n βρίσκονται επίσης στο N 3.Το E περιλαμβάνει όλες τις ακμές μεταξύ των κόμβων του Ν, πιθανά χωρίς τις ακμές προς τον κόμβο h
Ελάττωση T1-T2 (Hecht & Ullman) Ένας ελαττώμενος CFG μπορεί να ελαττωθεί με τη βοήθεια δύο μετασχηματισμών δημιουργίας περιοχών: T1: Απαλοιφή βρόχου T2: Συγχώνευση δύο κόμβων n και m τέτοιων ώστε ο μόνος άμεσος πρόγονος του m είναι ο n, και ο m δεν είναι η επικεφαλίδα Ένας μη ελαττώμενος CFG μπορεί να ελαττωθεί με κατάλληλη μετατροπή
Παράδειγμα Ελάττωσης T2 1 4 2 5 3 T2 Stanford University
Παράδειγμα Ελάττωσης 14 23 T1 5 Stanford University
Παράδειγμα Ελάττωσης 14 T2 23 5 Stanford University
Παράδειγμα Ελάττωσης 1234 T2 5 Stanford University
Παράδειγμα Ελάττωσης 12345 T1 Stanford University
Παράδειγμα Ελάττωσης 12345 Stanford University
Οι Περιοχές που Προέκυψαν 1 4 2 3 5 Stanford University
Ανάλυση Ροής Δεδομένων Στην επαναληπτική ανάλυση Ορίζουμε τη συνάρτηση διάδοσης F B ώστε να απεικονίζει την επίδραση από την αρχή μέχρι το τέλος της ενότητας Β Στην ανάλυση με περιοχές Ορίζουμε τη συνάρτηση διάδοσης F R,B ώστε να απεικονίζει την επίδραση από την αρχή της περιοχής R μέχρι το τέλος της ενότητας Β Ελαττώνουμε κατασκευάζοντας μεγαλύτερες περιοχές και νέες συναρτήσεις διάδοσης από τις συναρτήσεις διάδοσης των φωλιασμένων περιοχών Όταν φτάσουμε στην περιοχή P του συνολικού CFG με v τις αρχικές τιμές του κόμβου entry, τότε: Out[B] = F P,B (v) In[b] = Β άμεσος πρόγονος του Β Οut[B ]
Ορισμοί για Συναρτήσεις Διάδοσης Παράδειγμα: Ορισμοί Χρήσεων F(x) = Gen (x - Kill) Σύνθεση: [F1 F2](x) = F2(F1(x)) = Gen2 (F1(x) - Kill2) = = Gen2 ((Gen1 (x - Kill1)) - Kill2) = = Gen2 (Gen1 - Kill2) (x - (Kill1 Kill2)) Πράξη σύγκλισης (meet): [F1 F2](x) = F1(x) F2(x) = = Gen1 (x - Kill1) Gen2 (x - Kill2) = = (Gen1 Gen2) (x - (Kill1 Kill2)) Κλείσιμο (closure): [F * ](x) = n F n (x) = I F(x) F(F(x)) = = x (Gen (x - Kill)) (Gen ((Gen (x - Kill)) - Kill)) = = x (Gen - )
Υπολογισμός Συναρτήσεων Διάδοσης Πρώτα υπολόγισε τις συναρτήσεις διάδοσης για κάθε περιοχή, από μέσα προς τα έξω: 1. Για κάθε περιοχή R και υποπεριοχή της S: f R,IN[S] = MOP από την επικεφαλίδα της R μέχρι την επικεφαλίδα της S, για μονοπάτια εντός της R 2. Για κάθε περιοχή R με ενότητα εξόδου B (δηλαδή ενότητα με άμεσο απόγονο εκτός της R), f R,OUT[B] = ΜΟΡ εντός της R από την επικεφαλίδα της R μέχρι το τέλος της B
Παράδειγμα Συναρτήσεων Διάδοσης f R,OUT[4] = f 1 f 4 f R,IN[S] = f 1 (f 2 f 3 )* R S 1 4 2 3 5 f R,OUT[2] = f 1 f 2 (f 3 f 2 )* f S,OUT[2] = f 2 (f 3 f 2 )* Stanford University
Παράδειγμα Πράξεων Σύγκλισης f R,OUT[4] = f 1 f 4 T R 1 4 2 3 5 f T,IN[5] = f 1 f 4 f 1 f 2 (f 3 f 2 )* f R,OUT[2] = f 1 f 2 (f 3 f 2 )* Stanford University
Επίλυση για Κάθε Κόμβο Τέλος, έχοντας υπολογίσει τη συνάρτηση f R,IN[R] όπου R είναι τώρα όλος ο CFG και R = R + {entry}, δούλεψε από έξω προς τα μέσα ώστε να υπολογίσεις τις τιμές IN[h], για την επικεφαλίδα h κάθε υποπεριοχής Εφόσον κάθε κόμβος είναι επικεφαλίδα κάποιας περιοχής, έχουμε όλες τις τιμές IN, από τις οποίες μπορούμε να υπολογίσουμε τις τιμές OUT
Ολοκλήρωση Παραδείγματος R IN[1] = f R,IN[R] (v ENTRY ) T U IN[2] = S 1 4 2 3 5 IN[3] = f S,IN[3] (IN[2]) f U,IN[S] (IN[1]) Stanford University
Άλλο Παράδειγμα CMU
Σύγκριση Μεθόδων Εφαρμογή Το κλείσιμο F* ισχυροποιεί τις περιοχές Οι περιοχές δύσκολα εφαρμόζονται προς τα πίσω Ο αντίστροφος CFG είναι συνήθως μη ελαττώμενος Περιοχές για διασυναρτησιακές βελτιστοποιήσεις Επαναληπτικοί αλγόριθμοι για μη ελαττώμενο CFG Ταχύτητα Κύκλοι στον CFG με μονοτονία στη διάδοση: (depth + 2) περάσματα στους επαναληπτικούς αλγόριθμους O(m log n) στη μέθοδο περιοχών Κύκλοι στον CFG χωρίς μονοτονία στη διάδοση: Οι επαναληπτικοί αλγόριθμοι συγκλίνουν πιο αργά Η μέθοδος περιοχών έχει την ίδια πολυπλοκότητα