ILP (integer linear programming) βασιζόμενη εξαρτώμενη από τους πόρους μεταγλώττιση
Γιατί χρησιμοποιείται μοντελοποίηση των περιορισμών με ακεραίους? Υπάρχουν ήδη εργαλεία για τον υπολογισμό και την χρήση ακεραίων Μοντελοποιεί καλά μεγέθη όπως: τον αριθμό των register, τα επίπεδα τάσης, το μέγεθος του κώδικα, τον αριθμό των κύκλων ρολογιού. Εξασφαλίζεται χαμηλό υπολογιστικό κόστος Ο γραμμικός προγραμματισμός ακεραίων εγγυάται βέλτιστη λύση αντίθετα με ευριστικές μεθόδους
Παραδείγματα Παρουσιάζονται παρακάτω 4 αναλύσεις 1. Χρόνο-προγραμματισμός εκτέλεσης εντολών 2. Αποτελεσματικότητας χρήσης ενέργειας 3. Ελαχιστοποίησης μεγέθους κώδικα 4. Δέσμευσης καταχωρητών
Για τις ακόλουθες αναλύσεις ορίζουμε τα παρακάτω μεγέθη Χαρακτηριστικός αριθμός επεξεργαστή Source program:πληροφορίες για το πρόγραμμα είσοδο που θα μεταγλωττιστεί Target program:το απαιτούμενο format του προγράμματος το οποίο θα δημιουργηθεί Πρόβλημα: ο ορισμός της συνάρτησης (προβλήματος) που θα βελτιστοποιηθεί Μεταβλητές 0-1 :και οι 4 προαναφερθείσες αναλύσεις είναι τέτοιου τύπου μεταβλητές
Περιορισμοί: π.χ. Όπου V είναι μεταβλητές με τιμή 0ή1 και C σταθερές ακεραίων Objective function:η ανάλυση προσπαθεί να ελαχιστοποιήσει την συνάρτηση αυτή Code generation:η ανάλυση αυτή οδηγεί στην δημιουργία κώδικα
Μοντελοποίηση προγράμματος Έχουμε ένα σύνολο από εντολές s1,s2,..,sn P είναι το σύνολο των σημείων που μπορεί να βρίσκεται το πρόγραμμα Κάθε σημείο βρίσκεται ανάμεσα σε δύο εντολές ή προηγείται της s1 ή ακολουθεί την sn είναι ένα σύνολο από δύο σημεία Επιπλέον succ Όπου pi είναι σημεία του προγράμματος
Προγραμματισμός εντολών Ο επεξεργαστής έστω μπορεί να προγραμματίζει την εκτέλεση R εντολών ταυτόχρονα Ορίζουμε από 5 τιμές τέτοιο ώστε οι εντολές που βρίσκονται ανάμεσα στα δύο δεύτερα σημεία (p3,p4) δεν μπορούν να αρχίσουν να εκτελούνται νωρίτερα από W κύκλους από τότε που θα τελειώσει η εκτέλεση των εντολών που βρίσκονται ανάμεσα στα δύο πρώτα σημεία (p1,p2)
Ο στόχος που έχουμε είναι η δημιουργία ενός group από το πολύ R εντολές οι οποίες προγραμματίζονται ταυτόχρονα. Ο αριθμός των group αυτών ονομάζεται μήκος προγραμματισμού. Η επιθυμητή λύση του προβλήματος είναι η ελαχιστοποίηση του αριθμού των group για την εκτέλεση όσο το δυνατόν περισσότερων εντολών παράλληλα. 0-1 μεταβλητές ορίζονται τέτοιες ώστε για κάθε ζευγάρι σημείων και για κάθε κύκλο ρολογιού η μεταβλητή x είναι 1 αν η εντολή είναι προγραμματισμένο να εκτελεστεί σε αυτόν τον κύκλο.
Κάθε εντολή πρέπει να προγραμματιστεί σε ακριβώς έναν από M κύκλους και το πολύ R εντολές πρέπει να εκτελούνται παράλληλα. Έτσι προκύπτουν οι σχέσεις: Για κάθε ζευγάρι ο κύκλος στον οποίο θα εκτελεστεί μία εντολή δίνεται από την σχέση
Η εξασφάλιση του περιορισμού του Depn επιτυγχάνεται από την διατήρηση της ακόλουθης ανισότητας: Δημιουργείται λοιπόν το επιθυμητό πρόγραμμα και κάθε εντολή αν π.χ. ανήκει στο ζευγάρι (p1,p2) και τότε προγραμματίζεται στο i group του προγράμματος που δημιουργείται
Αποτελεσματική διαχείριση ενέργειας Ο επεξεργαστής έχει Ν επίπεδα τάσης Η αρχική πληροφορία είναι η ενέργεια που καταναλώνεται κατά την εκτέλεση ενός κομματιού κώδικα (ζεύγους σημείων) το οποίο εκτελείται σε επίπεδο τάσης Ε. Το πρόγραμμα που δημιουργείται διαφέρει από το αρχικό στο ότι έχει την επιπλέον εντολή slv i (set voltage level). O στόχος είναι η δημιουργία ενός προγράμματος που θα καταναλώνει την ελάχιστη ενέργεια.
Έχουμε την μεταβλητή VLVal( voltage level value) και υπάρχει μία για κάθε ζεύγος και κάθε επίπεδο τάσης. Είναι 1 όταν το επίπεδο τάσης που επιλέγεται για την εκτέλεση του συγκεκριμένου ζεύγους είναι αυτό που αυτή εκφράζει. Η SETVL(pi) είναι 1 αν το επίπεδο τάσης αλλάζει στο pi Ακριβώς ένα voltage level επιλέγεται για την εκτέλεση κάθε εντολής. Δηλαδή:
Καθώς ο συνολικός χρόνος εκτέλεσης δεν πρέπει να ξεπερνά το D έχουμε: όπου Ct είναι ο χρόνος εκτέλεσης Ο στόχος είναι η ελαχιστοποίηση της ακόλουθης συνάρτησης συνάρτησης που εκφράζει την κατανάλωση ενέργεια της εκτέλεσης του προγράμματος:
Ελαχιστοποίηση μεγέθους κώδικα Ο επεξεργαστής έχει Ν τράπεζες και η κάθε μία έχει Μ καταχωρητές επιπλέον ένας register pointer (RP) δείχνει την τράπεζα που χρησιμοποιείται. Το πρόγραμμα που δημιουργείται διαφέρει από το αρχικό καθώς έχει την εντολή srb b (set register bank) ακόμα για την ονομασία κάθε register χρησιμοποιείται και η τράπεζα στην οποία βρίσκεται Στόχος είναι η δημιουργία προγράμματος που θα καταλαμβάνει τον ελάχιστο δυνατό χώρο.
Η μεταβλητή r υπάρχει για κάθε μεταβλητή και κάθε τράπεζα και είναι 1 αν η μεταβλητή προγράμματος που η r περιγράφει βρίσκεται στην τράπεζα που η r αναφέρεται. H RPVal είναι 1 αν η τράπεζα που χρησιμοποιείται για την εκτέλεση του ζεύγους (pi, pj) είναι αυτή στην οποία αναφέρεται. H μεταβλητή είναι 1 αν ο RP κατά την διάρκεια εκτέλεσης του ζεύγους (p1,p2) είναι διαφορετικός από αυτόν στον οποίο αναφέρεται η u H μεταβλητή είναι 1 αν ο RP κατά την διάρκεια εκτέλεσης του ζεύγους (p1,p2) είναι διαφορετικός από μία τουλάχιστον από το σύνολο των μεταβλητών στις οποίες αναφέρεται.
Οι περιορισμοί είναι οι ακόλουθοι: Ο στόχος είναι η ελαχιστοποίηση της συνάρτησης: με τοποθέτηση των μεταβλητών στα διάφορα register banks
Δέσμευση register O επεξεργαστής περιέχει Κ registers Δημιουργούνται επιπλέον εντολές οι οποίες διαβάζουν από registers και γράφουν σε θέσεις μνήμης ή το αντίστροφο το κόστος διαβάσματος είναι Cl και το κόστος γραψίματος Cs ενώ το κόστος fetching και decodig μιάς εντολής είναι Ci Οι μεταβλητές που χρησιμοποιούνται είναι οι ακόλουθες:
Για την ελαχιστοποίηση του χρόνου εκτέλεσης του προγράμματος πρέπει να ελαχιστοποιηθεί η ακόλουθη συνάρτηση:
Συμπεράσματα Συσκευές σαν τα ιατρικά εμφυτεύματα και τις έξυπνες κάρτες απαιτούν όλο και μικρότερους υπολογιστές. Θέματα εκτέλεσης αλγορίθμων με περιορισμένους πόρους χρειάζεται να επιλυθούν. Είναι αρκετά πιο εύκολο να γράφονται οι αλγόριθμοι αυτοί σε γλώσσες υψηλού επιπέδου.
Μία από τις σημαντικότερες προσεγγίσεις αυτού του προβλήματος είναι μία στατική ανάλυση βασιζόμενη σε γραμμικό προγραμματισμό ακεραίων. Είναι λοιπόν αρκετά επικερδής μια τέτοια ανάλυση για την μεταγλώττιση ενός προγράμματος συσχετίζοντας τους διαθέσιμους πόρους.