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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{ i f i == 0 and p > 0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μεταγλωττιστές ΙΙ. Γέννηση τελικού κώδικα για RISC επεξεργαστές. 12 Ιανουαρίου Νικόλαος Καββαδίας Μεταγλωττιστές ΙΙ

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

CSE.UOI : Μεταπτυχιακό Μάθημα

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

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

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

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

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

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

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

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

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

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

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

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

Επίλυση ειδικών μορφών ΣΔΕ

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

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

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

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

τους στην Κρυπτογραφία και τα

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

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

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

Π. ΚΡΗΤΗΣ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΗΥ 380, «ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ» Φ 07: ΔΥΝΑΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προτεινόμενα θέματα. στο μάθημα. Αρχές οργάνωσης και διοίκησης επιχειρήσεων. ΟΜΑΔΑ Α: Ερωτήσεις Σωστού Λάθους.

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

Μητροπολιτικά Οπτικά Δίκτυα Εισαγωγή

G περιέχει τουλάχιστον μία ακμή στο S. spanning tree στο γράφημα G.

Ring Routing and Wavelength Conversion. Γιώργος Ζώης

(13 ο ) ΔΥΝΑΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙII: «βέλτιστο στατικό ευρετήριο»

(3 ο ) Εξαντλητική αναζήτηση I: μεταθέσεις & υποσύνολα (4 o ) Εξαντλητική αναζήτηση II: συνδυασμοί, διατάξεις & διαμερίσεις

Παραβολή ψ=αχ 2 +βχ+γ, α 0. Η παραβολή ψ = αχ 2. Γενικά : Κάθε συνάρτηση της μορφής ψ=αχ 2 + βχ +γ, α 0 λέγεται τετραγωνική συνάρτηση.

HY 280. θεμελιακές έννοιες της επιστήμης του υπολογισμού ΑΣΚΗΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ. Γεώργιος Φρ.

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

Το κράτος είναι φτιαγμένο για τον άνθρωπο και όχι ο άνθρωπος για το κράτος. A. Einstein Πηγή:


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

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

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

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

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

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

Ανεξαρτησία Ανεξαρτησία για οικογένειες συνόλων και τυχαίες μεταβλητές

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

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

(20 ο ) ΣΤΑΔΙΑΚΕΣ ΚΑΤΑΣΚΕΥΕΣ Ι: ΑΠΛΗΣΤΟΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

τεσσάρων βάσεων δεδομένων που θα αντιστοιχούν στους συνδρομητές

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

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

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

Περιγραφή Περιγράμματος

Επιχειρησιακή Ερευνα Ι

Προτεινόμενα θέματα. στο μάθημα. Αρχές οργάνωσης και διοίκησης επιχειρήσεων. ΟΜΑΔΑ Α: Ερωτήσεις Σωστού Λάθους.

Κληρονομικότητα. Σήμερα! Κλάση Βάσης Παράγωγη κλάση Απλή κληρονομικότητα Protected δεδομένα Constructors & Destructors overloading

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

2. Κατάθεσε κάποιος στην Εθνική Τράπεζα 4800 με επιτόκιο 3%. Μετά από πόσο χρόνο θα πάρει τόκο 60 ; α) 90 ημέρες β) 1,5 έτη γ) 5 μήνες δ) 24 μήνες

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

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

Α. ΓΙΑ ΟΛΟΥΣ ΤΟΥΣ ΜΑΘΗΤΕΣ ΘΡΗΣΚΕΥΤΙΚΑ. ΙΣΤΟΡΙΑ (Γενικής Παιδείας) ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ (Γενικής Παιδείας) ΛΟΓΟΤΕΧΝΙΑ (Γενικής Παιδείας)

( ιμερείς) ΙΜΕΛΕΙΣ ΣΧΕΣΕΙΣ Α Β «απεικονίσεις»

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

5.1 Μετρήσιμες συναρτήσεις

Transcript:

Προηγμένα Θέματα Θεωρητικής Πληροφορικής Επιλογή κώδικα Νικόλαος Καββαδίας nkavv@uop.gr 24 Μαρτίου 2010

Σημαντικά ζητήματα στη γέννηση κώδικα (1) Επιθυμητές ιδιότητες του γεννήτορα κώδικα (code generator) Το παραγόμενο πρόγραμμα χαμηλού επιπέδου οφείλει να διατηρεί σημασιολογική ισοδυναμία με το πηγαίο πρόγραμμα Τα παραγόμενο πρόγραμμα ϑα πρέπει να εκμεταλλεύεται τους πόρους της στοχευόμενης αρχιτεκτονικής με τον καλύτερο δυνατό τρόπο Ο γεννήτορας κώδικα να μην έχει υπερβολικές απαιτήσεις σε χρόνο μεταγλώττισης ή εκτέλεσης Κύρια βήματα για τη γέννηση κώδικα Επιλογή κώδικα (code selection) Καταμερισμός καταχωρητών (register allocation) Χρονοπρογραμματισμός εντολών (instruction scheduling)

Σημαντικά ζητήματα στη γέννηση κώδικα (1) Προκλήσεις στη γέννηση κώδικα Πολλές διαδικασίες στα πλαίσια της γέννησης κώδικα έχουν εκθετική υπολογιστική πολυπλοκότητα και δεν μπορεί να συντεθεί αλγόριθμος πολυωνυμικής πολυπλοκότητας για αυτές (π.χ. καταμερισμός καταχωρητών) Ανταλλαγή (trade-off) ανάμεσα στην υπολογιστική πολυπλοκότητα των χρησιμοποιούμενων ευριστικών (heuristics) και στην ποιότητα των αποτελεσμάτων Η σχετική σειρά των επιμέρους διαδικασιών για τη γέννηση κώδικα (phase integration problem)

Στοιχεία της στοχευόμενης αρχιτεκτονικής για τη γέννηση κώδικα Επεξεργαστές περιορισμένου συνόλου εντολών (RISC: Reduced Instruction Set Computer) πολλοί καταχωρητές εντολές τριών διευθύνσεων απλοί και λίγοι τρόποι διευθυνσιοδότησης απλή αρχιτεκτονική συνόλου εντολών με ορθογώνια κωδικοποίηση Επεξεργαστές σύνθετου συνόλου εντολών (CISC: Complex Instruction Set Computer) λίγοι καταχωρητές εντολές με διαφορετικό αριθμό ορισμάτων πολλοί τρόποι διευθυνσιοδότησης περισσότερες από μία κατηγορίες καταχωρητών εντολές με διαφορετικά μήκη κωδικοποίησης Άλλες αρχιτεκτονικές: μηχανές στοίβας Z Οι περισσότερες μοντέρνες αρχιτεκτονικές δεν είναι αμιγώς RISC ή CISC

Επιλογή κώδικα (1) Μετασχηματισμός από την ενδιάμεση αναπαράσταση (IR) του προγράμματος σε αναπαράσταση με εντολές συμβολομεταφραστή του στοχευόμενου επεξεργαστή Είσοδος: γράφος ροής δεδομένων (DFG: Data Flow Graph) για κάθε βασικό μπλοκ Εξοδος: αποδοτική αντιστοίχιση ομαδοποιήσεων από εκφράσεις επιπέδου IR σε πραγματικές εντολές του επεξεργαστή Η επιλογή κώδικα απευθείας σε γράφους εξάρτησης δεδομένων, οι οποίοι αποτελούν DFG είναι έμφυτα πολύπλοκη (NP-complete) Συνήθως κάθε DFG διαχωρίζεται σε ένα δάσος (forest) από δένδρα ροής δεδομένων (DFT: Data Flow Tree) στα όρια των κοινών υποεκφράσεων (CSEs)

Επιλογή κώδικα (2) Παράδειγμα: Εστω DFG το οποίο αντιστοιχεί στον εξής κώδικα: x = a*b + c; y = a*b + 2; Στην περίπτωση αυτή, η κοινή υποέκφραση είναι το αποτέλεσμα του γινομένου a b Γίνεται ανάθεση της CSE σε προσωρινή μεταβλητή t = a*b

Κάλυψη δένδρου (tree covering) Η επιλογή κώδικα από DFTs μπορεί να ϑεωρηθεί ως πρόβλημα κάλυψης τους από υποδένδρα τα οποία έχουν ένα-προς-ένα αντιστοιχία με πραγματικές εντολές του επεξεργαστή Η διαδικασία ελέγχεται από κάποιο μετρικό κόστους (cost metric) όπως για παράδειγμα το μέγεθος του παραγόμενου κώδικα, ο χρόνος εκτέλεσης στον επεξεργαστή, ή η καταναλισκόμενη ισχύς στον επεξεργαστή κατά την εκτέλεση του προγράμματος Υπάρχουν αλγοριθμικές τεχνικές και εργαλεία που τις εφαρμόζουν για τη γέννηση κώδικα με βέλτιστη κάλυψη δένδρων

Παράδειγμα κάλυψης δένδρου Παραγόμενος κώδικας για το απεικονιζόμενο DFT LOAD R1, a LOAD R2, b ADD R1, R1, R2 LOAD R2, c LOAD R3, d MUL R2, R2, R3 ADD R2, R1, R2 STORE x, R2

Αρχή λειτουργίας της επιλογής κώδικα με κάλυψη δένδρου 1 Δοθέντος ενός δένδρου ροής δεδομένων 2 Γίνεται αρίθμηση όλων των κόμβων του δένδρου 3 Πραγματοποιείται ταύτιση μοτίβων (pattern matching) πάνω στο δένδρο προκειμένου να επιλεγεί η βέλτιστη περίπτωση επανεγγραφής (μετασχηματισμού) του δένδρου λόγω αντικατάστασης ενός υποδένδρου Η διάβαση του δένδρου μπορεί να γίνει είτε bottom-up είτε top-down Λαμβάνεται υπόψη το μετρικό κόστους που αντιστοιχείται σε κάθε επανεγγραφή Χρησιμοποιείται κάποια τεχνική για την επιλογή του υποδένδρου που πρόκειται να καλυφθεί και να αντιστοιχηθεί με εντολή assembly Μη βέλτιστες τεχνικές: μέγιστη μπουκιά (maximal munch) Βέλτιστες τεχνικές: TWIG, BURS (Bottom Up Rewrite System)

Κανόνες επανεγγραφής δένδρου για μία υποθετική μηχανή (1) Ca LOAD, #a Mx LOAD, x = M STORE x, Mx

Κανόνες επανεγγραφής δένδρου για μία υποθετική μηχανή (2) = M STORE, Rj Rj indir indir LOAD, a(rj) + Ca Rj

Κανόνες επανεγγραφής δένδρου για μία υποθετική μηχανή (3) + ADD,, a(rj) indir + Ca Rj + ADD,, Rj Rj + ADD,, #k Ck

Σχηματισμός δένδρου για μια σύνθετη έκφραση Εστω η έκφραση a[i] = b + 10; όπου ο πίνακας a είναι αποθηκευμένος στη στοίβα, η οποία δεικτοδοτείται με αναφορά τα περιεχόμενα του δείκτη στοίβας (SP) η μεταβλητή b είναι καθολικής εμβέλειας (στη μνήμη) η διεύθυνση του πρώτου στοιχείου του πίνακα a και η τιμή του δείκτη i βρίσκονται σε ϑέσεις μνήμης σχετικές ως προς την τιμή του SP Το δένδρο για την αντίστοιχη IR είναι: = indir + + Mb C10 + indir Ca SP + Ci SP

Γέννηση κώδικα με πλακόστρωση (tiling) του αρχικού δένδρου Δοθέντος ενός δένδρου, εφαρμόζονται οι παραπάνω κανόνες επανεγγραφής (rewriting rules) για την πλακόστρωση των αντίστοιχων υποδένδρων Οταν ένα μοτίβο ταιριάζει με ένα υποδένδρο, τότε η ισοδύναμή του έκφραση αντικαθιστά το αντίστοιχο υποδένδρο, και εκτελούνται οι τυχόν ενέργειες (όπως γέννηση κώδικα assembly με ανάθεση καταχωρητών) που συνδέονται με τον κανόνα Η διαδικασία συνεχίζεται μέχρις ότου το αρχικό δένδρο να μειωθεί σε ένα μονήρη κόμβο ο οποίος να αντιστοιχεί στην ισοδύναμη έκφραση κάποιου κανόνα ή μέχρις ότου να μην μπορεί να βρεθεί κάποια νέα αντικατάσταση Στην πράξη, υπάρχουν εργαλεία (γεννήτορες γεννητόρων κώδικα) που εξασφαλίζουν τη βέλτιστη κάλυψη ενός δένδρου (BURG, IBURG, OLIVE)

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 1 Παραγόμενος κώδικας LOAD R0, #a = Εφαρμογή κανόνα 1 indir + Ca + Mb C10 + indir Ca SP + Ci SP

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 1 Παραγόμενος κώδικας LOAD R0, #a = Εφαρμογή κανόνα 1 indir + Ca + Mb C10 + indir R0 SP + Ci SP

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 2 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP Εφαρμογή κανόνα 7 = indir + + + Mb C10 Rj + indir R0 SP + Ci SP

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 2 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP Εφαρμογή κανόνα 7 = indir + + + Mb C10 Rj R0 indir + Ci SP

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 3 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) = indir + Εφαρμογή κανόνα 6 + + Mb C10 indir R0 indir + + Ca Rj Ci SP

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 3 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) = indir + Εφαρμογή κανόνα 6 + R0 Mb C10 indir + Ca Rj

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 4 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b = indir + Εφαρμογή κανόνα 2 R0 Mb C10 Mx

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 4 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b = indir + Εφαρμογή κανόνα 2 R0 R1 C10 Mx

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 5 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b ADD R1, R1, #10 Εφαρμογή κανόνα 8 = indir + R0 R1 C10 + Ck

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 5 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b ADD R1, R1, #10 Εφαρμογή κανόνα 8 indir R0 = R1 + Ck

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 6 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b ADD R1, R1, #10 STORE R0, R1 Εφαρμογή κανόνα 4 indir R0 = R1 = M Rj indir

Γέννηση κώδικα με πλακόστρωση του αρχικού δένδρου: Βήμα 6 Παραγόμενος κώδικας LOAD R0, #a ADD R0, R0, SP ADD R0, R0, i(sp) LOAD R1, b ADD R1, R1, #10 STORE R0, R1 Εφαρμογή κανόνα 4 DONE! = M Rj indir

Κάλυψη δένδρου με τον αλγόριθμο της μέγιστης μπουκιάς (maximal munch) Ο αλγόριθμος maximal munch για την κάλυψη δένδρου αποτελεί μία άπληστη (greedy) μέθοδο για την επίλυση του προβλήματος Ροή του αλγορίθμου 1 Ξεκινώντας από τον κόμβο ρίζα βρίσκουμε το μεγαλύτερο υποδένδρο 2 Κάλυψη του κόμβου ρίζας και πιθανώς και άλλων κόμβων με το πρώτο υποδένδρο 3 Επανάληψη για κάθε υποδένδρο Καλά αποτελέσματα για σύνολα εντολών που είναι αμιγώς RISC Η πλακόστρωση που επιτυγχάνεται δεν είναι εγγυημένα βέλτιστη

Επιλογή κώδικα με τεχνικές δυναμικού προγραμματισμού Κοινό στοιχείο των τεχνικών που χρησιμοποιούν δυναμικό προγραμματισμό είναι η ανάθεση κόστους σε κάθε κόμβο του δένδρου Η διάβαση του δένδρου γίνεται από κάτω προς τα πάνω (bottom-up traversal) 1 Για κάθε πλακόστρωση t με κόστος c η οποία παρουσιάζει ταύτιση στον κόμβο n 2 Το c i ισούται με το κόστος κάθε υποδένδρου το οποίο αντιστοιχεί στους κόμβους-φύλλα (leaves) του t 3 Το κόστος του n ισούται με c + c i Με διάβαση από πάνω προς τα κάτω (top-down) επιλέγεται η πλακόστρωση με το μικρότερο κόστος

Γέννηση επιλογέα κώδικα με το εργαλείο OLIVE (1) Το εργαλείο OLIVE διαβάζει τις προδιαγραφές του συνόλου εντολών με τη μορφή γραμματικής δένδρου (tree grammar) Παράγει πηγαίο κώδικα ANSI C ενός εξειδικευμένου, για την αρχιτεκτονική, επιλογέα κώδικα Ο επιλογέας κώδικα είναι βέλτιστος όσον αφορά την κάλυψη DFTs Ο επιλογέας κώδικα μπορεί να ενσωματωθεί στο συνολικό μεταγλωττιστή i Το εργαλείο OLIVE χρησιμοποιεί την τεχνική TWIG

Γέννηση επιλογέα κώδικα με το εργαλείο OLIVE (2) Τμηματική προδιαγραφή για τον OLIVE stm: cs_store(reg,reg) { $cost[0].cost = 1 + $cost[2].cost + $cost[3].cost; }={ $action [2](); $action [3](); printf("\n\tstore reg,reg"); }; reg: cs_plus(reg,reg) { $cost[0].cost = 1 + $cost[2].cost + $cost[3].cost; }={ $action [2](); $action [3](); printf("\n\tadd reg,reg,reg"); }; reg: cs_readarg { $cost[0].cost = 1; }={ printf("\n\tmv reg,%s",cs_expsym($1)->name()); };

Παράδειγμα κάλυψης DFT με το εργαλείο OLIVE (1) Πηγαίος κώδικας C int a; void main(int b, int c) { int d, e, f, g; } a = b + c - d * e / f >> g; TAC IR εκφρασμένη σε υποσύνολο της C int a; void main(int b_3, int c_4) { int t1, t2, t3, t4, t5, t6; int c_4, d_6, e_7, f_8, g_9; t1 = b_3 + c_4; t2 = d_6 * e_7; t3 = t2 / f_8; t4 = t1 - t3; t5 = t4 >> g_9; t6 = &a; *t6 = t5; }

Παράδειγμα κάλυψης DFT με το εργαλείο OLIVE (2) Κειμενική μορφή ενός DFT (cs_store [stm 7 *t6 = t5; ] (cs_addr [exp 22 a int] addr of a ) (cs_shr [exp 20 t4 >> g_9 int] (cs_minus [exp 16 t1 - t3 int] (cs_plus [exp 4 b_3 + c_4 int] (cs_readarg [exp 2 b_3 int] arg no 1) (cs_readarg [exp 3 c_4 int] arg no 2)) (cs_div [exp 12 t2 / f_8 int] (cs_mult [exp 8 d_6 * e_7 int]) (cs_read [exp 6 d_6 int]) (cs_read [exp 7 e_7 int])) (cs_read [exp 11 f_8 int]))) (cs_read [exp 19 g_9 int]))) Κώδικας assembly για έναν υποθετικό επεξεργαστή MV reg, @a MV reg, b_3 MV reg, c_4 ADD reg, reg, reg MV reg, d_6 MV reg, e_7 MUL reg, reg, reg MV reg, f_8 DIV reg, reg, reg SUB reg, reg, reg MV reg, g_9 SHR reg, reg, reg STORE reg, reg

Παραδείγματα επιλογής κώδικα από IR Τυπικές εντολές: φόρτωση από μνήμη, αποθήκευση στη μνήμη, άλμα σε διεύθυνση με ή χωρίς συνθήκη, αριθμητικές και λογικές εντολές, εντολές σύγκρισης Τρόποι διευθυνσιοδότησης: με δεικτοδότηση (indexed addressing), έμμεση διευθυνσιοδότηση (indirect addressing), άμεση (direct) Assembly για την έκφραση x = y + z; LOAD R0, y // R0 = y ADD R0, R0, z // R0 = R0 + z STORE x, R0 // x = R0 Για την έκφραση b = a[i]; LOAD R1, i // R1 = i MUL R1, R1, 4 // R1 = R1 * 4 LOAD R2, a(r1) // R2 = MEM(a + R1) STORE b, R2 // x = R2 Για την έκφραση *p = y; LOAD R1, p // R1 = p LOAD R2, y // R2 = y STORE 0(R1), R2 // MEM(0 + R1) = R2

Αναφορές του μαθήματος I A. V. Aho, R. Sethi, and J. D. Ullman, Μεταγλωττιστές: Αρχές, Τεχνικές και Εργαλεία, με την επιμέλεια των: Αγγελος Σπ. Βώρος και Νικόλαος Σπ. Βώρος και Κων/νος Γ. Μασσέλος, κεφάλαια 8.9, 8.9.1, 8.9.2, Εκδόσεις Νέων Τεχνολογιών, 2008. Website for the English version: http://dragonbook.stanford.edu R. Leupers, O. Whalen, M. Hahenauer, T. Kogel, and P. Marwedel, An executable intermediate representation for retargetable compilation and high-level code optimization, in Proceedings of the Third International Workshop on Systems, Architectures, Modeling, and Simulation (SAMOS 2003), Samos, Greece, July 21-23 2003, pp. 120 125. A. V. Aho, M. Ganapathi, and S. W. K. Tjiang, Code generation using tree matching and dynamic programming, ACM Transactions on Programming Languages and Systems, vol. 11, no. 4, pp. 491 516, October 1989. C. W. Fraser, D. R. Hanson, and T. A. Proebstring, Engineering a simple, efficient code-generator generator, ACM Letters on Programming Languages and Systems, vol. 1, no. 3, pp. 213 226, September 1992.

Αναφορές του μαθήματος II SPAM Research Group, SPAM Compiler User s Manual, including a description of OLIVE in Chapter 4, September 23, 1997. IBURG, a tree parser generator. [Online]. Available: http://www.cs.princeton.edu/software/iburg/