Γιώργος Δημητρίου Ενότητα 9 η : Θέματα Δρομολόγησης Εντολών
ILP Παραλληλισμός επιπέδου εντολής Εξαρτήσεις δεδομένων Εξαρτήσεις ελέγχου (διαδικασιακές) Με διαθέσιμους πόρους, οι εντολές μπορούν να εκτελεστούν στο μέγιστο βαθμό παραλληλισμού, όσο το επιτρέπουν οι εξαρτήσεις Αρκεί να επιτύχουμε βέλτιστη δρομολόγηση, στατικά ή δυναμικά ή σε συνδυασμό των δύο
Στατική Δρομολόγηση Εντολών Έστω μια αρχιτεκτονική που επιτρέπει πολλαπλές ταυτόχρονες λειτουργίες Πχ VLIW (very-long-instruction-word) Με είσοδο μια λίστα από πόρους (πχ ALU) και καθυστερήσεις ανά πόρο, καθώς και έναν CFG Βρες τη δρομολόγηση εντολών των βασικών ενοτήτων που ελαχιστοποιούν τον αριθμό κύκλων μηχανής στην εκτέλεση του κώδικα
Δρομολόγηση και Καταχωρητές Υψηλότερος βαθμός παραλληλισμού στη δρομολόγηση οδηγεί σε ανάγκη περισσότερων καταχωρητών Μέγιστος βαθμός παραλληλισμού επιτυγχάνεται με τη μορφή SSA Δέσμευση ελάχιστου πλήθους καταχωρητών μειώνει τον παραλληλισμό στην εκτέλεση
Παράδειγμα Με 2 αριθμητικές λειτουργίες ανά κύκλο a = b+c e = a+d a = b-c f = a+d Μετονομασία a a1 = b+c e = a1+d a2 = b-c f = a2+d ALU1 ALU2 ALU1 ALU2 a = b+c e = a+d a = b-c a1 = b+c e = a1+d a2 = b-c f = a2+d f = a+d
Άλλα Παραδείγματα for (i=0; i<n; i++) { t = a[i]+1; b[i] = t*t; } /* no parallelism */ for (i=0; i<n; i++) { t[i] = a[i]+1; b[i] = t[i]*t[i]; } /* All iterations can be executed in parallel */
Κανόνες Δρομολόγησης 1. Να εκτελούνται οι λειτουργίες που πρέπει, σε κάθε μονοπάτι εκτέλεσης Τήρηση εξαρτήσεων ελέγχου Ίσως να επιτρέπονται υποθετικές λειτουργίες 2. Οι λειτουργίες που αλληλεπιδρούν πρέπει να εκτελούνται με την ίδια σειρά Τήρηση εξαρτήσεων δεδομένων 3. Να μην παραβιάζεται η διαθεσιμότητα των πόρων της αρχιτεκτονικής
Εξαρτήσεις Δεδομένων 1. Read-after-Write (ΑΜΕ αληθινή εξάρτηση): Μια ανάγνωση του x πρέπει να ακολουθεί προηγούμενη εγγραφή του x 2. Write-after-Read (ΕΜΑ - αντιεξάρτηση): Μια εγγραφή του x πρέπει να ακολουθεί προηγούμενη ανάγνωση του x 3. Write-after-Write (ΕΜΕ εξάρτηση εξόδου): Οι εγγραφές του x πρέπει να γίνονται με τη σωστή σειρά
Απαλοιφή Εξαρτήσεων Δεδομένων Οι εξαρτήσεις ΑΜΕ δε μπορούν να απαλειφτούν Οι εξαρτήσεις ΕΜΑ και ΕΜΕ μπορούν να απαλειφτούν με αλλαγή μεταβλητής προορισμού (μετονομασία)
Μοντέλο Αρχιτεκτονικής Αριθμητικές λειτουργίες τύπου καταχωρητή-καταχωρητή: register*register -> register. Απαιτούν πόρο μιας ALU Φορτώσεις (LD) και Αποθηκεύσεις (ST) Απαιτούν πόρο μιας θέσης MEM (memory buffer)
Χρονισμός Μοντέλου Αριθμητικές λειτουργίες και αποθηκεύσεις μνήμης ενός κύκλου μηχανής Φορτώσεις μνήμης δύο κύκλων μηχανής Μια αποθήκευση μπορεί να ακολουθεί φόρτωση της ίδιας θέσης στον επόμενο κύκλο Έκδοση εντολών LD ανά έναν κύκλο
Γράφοι Εξαρτήσεων Δεδομένων Κόμβοι = εντολές μηχανής Ακμή i -> j εάν η εντολή (j) είναι εξαρτημένη από την εντολή (i). Ετικέτα κάθε ακμής = η ελάχιστη καθυστέρηση σε κύκλους μηχανής μεταξύ έναρξης της (i) και έναρξης της (j)
Παράδειγμα Πόρος LD r1, a MEM LD r2, b MEM ADD r3, r1, r2 ALU ST a, r2 MEM ST b, r1 MEM ST c, r3 MEM
Παράδειγμα: Γράφος Εξαρτήσεων Δεδομένων 1 2 Αντιεξάρτηση για το b 2 LD r1,a LD r2,b 2 2 ADD r3,r1,r2 ST a,r2 ST b,r1 ST c,r3 1 1 Αληθινή εξάρτηση για τον r2 Αληθινή εξάρτηση για τον r3 Stanford University
Δρομολόγηση Βασικής Ενότητας Τεχνική δρομολόγησης λίστας: Επέλεξε μια τοπολογική διάταξη εντολών με προτεραιότητες, η οποία 1.Δεν παραβιάζει τις ακμές του γράφου εξαρτήσεων δεδομένων (άρα τοπολογική) 2.Επιλέγει εντολές με κάποιον ευριστικό αλγόριθμο, πχ τον κόμβο που είναι μακρύτερα από τον κόμβο εξόδου (άρα με προτεραιότητες)
Παράδειγμα 1 LD r1,a 2 2 1 LD r2,b 2 2 ADD r3,r1,r2 ST a,r2 ST b,r1 1 ST c,r3 Οποιαδήποτε εντολή μπορεί να προηγηθεί καθώς δεν υπάρχουν πρόγονοι και τα μονοπάτια είναι μήκους 3 Επέλεξε πρώτα την εντολή LD r1,a, και καθώς δεν ενεργοποιείται άμεσα άλλη εντολή, επέλεξε ως δεύτερη την εντολή LD r2,b Stanford University
Παράδειγμα 2 2 LD r1,a 1 1 LD r2,b 2 2 ADD r3,r1,r2 ST a,r2 Τώρα ενεργοποιούνται αυτές οι τρεις εντολές, και επέλεξε την ADD, επειδή έχει μακρύτερο μονοπάτι ST b,r1 1 ST c,r3 Stanford University
Παράδειγμα 1 LD r1,a 2 2 1 LD r2,b 2 2 ADD r3,r1,r2 ST a,r2 ST b,r1 1 ST c,r3 Αυτές οι τρεις εντολές μπορούν να δρομολογηθούν με οποιαδήποτε σειρά, επέλεξε τη σειρά που υποδεικνύεται Stanford University
Χρησιμοποιώντας Λίστα Για κάθε εντολή στη λίστα, βρες το νωρίτερο κύκλο μηχανής στον οποίο αυτή μπορεί να δρομολογηθεί Λάβε υπόψη τους χρόνους δρομολόγησης των άμεσων προγόνων του κόμβου, ώστε να βρεις ένα κάτω φράγμα για τη δρομολόγηση της εντολής Στη συνέχεια, ανάβαλλε τη δρομολόγηση όσο οι απαιτούμενοι πόροι δεν είναι διαθέσιμοι Μόλις οι πόροι διατεθούν, ενημέρωσε τον πίνακα δρομολόγησης και τον πίνακα δέσμευσης πόρων
Ο αλγόριθμος
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r1,a: νωρίτερος κύκλος: 1 πόρος MEM: διαθέσιμος Stanford University
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r2,b LD r2,b: νωρίτερος κύκλος: 1 πόρος MEM: μη διαθέσιμος καθυστέρηση: ενός κύκλου Stanford University
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r2,b ADD r3,r1,r2 ADD r3,r1,r2: νωρίτερος κύκλος: 4 πόρος ALU: διαθέσιμος Stanford University
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r2,b ADD r3,r1,r2 ST a,r2 ST a,r2: νωρίτερος κύκλος: 4 πόρος MEM: διαθέσιμος Stanford University
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r2,b ST b,r1 ADD r3,r1,r2 ST a,r2 ST b,r1: νωρίτερος κύκλος: 3 πόρος MEM: διαθέσιμος Stanford University
Παράδειγμα: Η Δρομολόγηση LD r1,a LD r2,b ST b,r1 ADD r3,r1,r2 ST c,r3 ST a,r2 ST c,r3: νωρίτερος κύκλος: 5 πόρος MEM: διαθέσιμος Stanford University
Καθολική Μετακίνηση Κώδικα Μετακίνηση κώδικα από ενότητα σε ενότητα, με σκοπό την αύξηση του ILP Τήρηση εξαρτήσεων Υποθετική εκτέλεση (εκτέλεση κώδικα που κανονικά εκτελείται στη μία κατεύθυνση μιας διακλάδωσης) Επιτρέπεται αν η εντολή δεν έχει παρενέργειες Παράδειγμα: LD σε μη χρησιμοποιούμενο καταχωρητή (παρενέργειες?)
Μετακίνηση προς τα Επάνω Μετακίνηση σε κυρίαρχο, εάν: 1.Ικανοποιούνται οι εξαρτήσεις 2.Δεν υπάρχουν παρενέργειες, εκτός αν οι δύο κόμβοι είναι διαδικασιακά ισοδύναμοι: Κυριαρχία και μετα-κυριαρχία μεταξύ των κόμβων Μετακίνηση σε μη κυρίαρχο, μόνο με την προϋπόθεση ότι θα εισαχθεί κώδικας επιδιόρθωσης (compensation code)
Μετακίνηση προς τα Κάτω Μετακίνηση σε μετα-κυρίαρχο, εάν: 1.Ικανοποιούνται οι εξαρτήσεις 2.Δεν υπάρχουν παρενέργειες, εκτός Μετακίνηση σε μη μετα-κυρίαρχο, μόνο με την προϋπόθεση ότι
Μοντέλο Αρχιτεκτονικής Η αρχιτεκτονική εκτελεί παράλληλα ο- ποιεσδήποτε δύο εντολές Χρονισμός όπως και προηγουμένως LD = 2 κύκλοι, υπόλοιπες = 1 κύκλος
Παράδειγμα: Μετακίνηση Κώδικα Υποθέτουμε ότι οι εντολές LD δεν έχουν παρενέργειες, οπότε μπορούν να μετακινηθούν στον κόμβο εισόδου LD r1,a nop BRZ r1,l LD r2,b nop ST d,r2 LD r4,e nop ST f,r4 LD r3,c nop ST d,r3 Μπορούμε να μετακινήσουμε την εντολή ST στον κόμβο εισόδου μαζί με την εντολή LD r4, αφού οι δύο κόμβοι είναι διαδικασιακά ισοδύναμοι Stanford University
Παράδειγμα: Μετακίνηση Κώδικα LD r1,a LD r2,b BRZ r1,l LD r4,e LD r3,c ST f,r4 LD r2,b nop ST d,r2 ST d,r2 ST d,r3 LD r3,c nop ST d,r3 LD r4,e nop ST f,r4 Stanford University
Δρομολόγηση Περιοχών Αλγόριθμος δρομολόγησης εντολών με καθολική μετακίνηση κώδικα, μόνο μεταξύ διαδικασιακά ισοδύναμων ενοτήτων, ή προς τα επάνω, από μια ενότητα προς άλλη που βρίσκεται πάνω από μία μόνο διακλάδωση που κυριαρχεί την πρώτη ενότητα Υψηλότερη προτεραιότητα η πρώτη μετακίνηση Δρομολόγηση περιοχών από μέσα προς τα έξω Μετά τη δρομολόγηση μιας περιοχής, οι εντολές της δε μετακινούνται
Αλγόριθμος Είσοδος: CFG, πίνακας πόρων Έξοδος: Πίνακας δρομολόγησης S
Συμβολικό Ξεδίπλωμα (Software Pipelining) Παραλληλισμός στην εκτέλεση βρόχου με επικάλυψη διαδοχικών επαναλήψεων Οι διαδοχικές επαναλήψεις μπορούν να είναι ανεξάρτητες μεταξύ τους στην απλούστερη περίπτωση (βρόχος do-all), ή και να έχουν ε- ξαρτήσεις προς επόμενες επαναλήψεις (βρόχος do-across) Στόχος: Εκκίνηση επαναλήψεων με το μέγιστο δυνατό ρυθμό Περιορισμός: Χρήση της ίδιας δρομολόγησης και καθυστέρησης σε κάθε επανάληψη
Μοντέλο Αρχιτεκτονικής Μια εντολή LD ή ST και μια εντολή ALU (ή διακλάδωση) σε κάθε κύκλο Χρονισμός όπως νωρίτερα LD = 2 κύκλοι, υπόλοιπες = 1 κύκλος
Παράδειγμα for (i=0; i<n; i++) B[i] = A[i]; Έστω ότι ο $r9 περιέχει το 4N και ο $r8 περιέχει το 4*i: L: LD r1, a(r8) nop ST b(r8), r1 ADD r8, r8, #4 BLT r8, r9, L Η δρομολόγηση προκύπτει από τις εξαρτήσεις δεδομένων. Δεν υπάρχει παραλληλισμός!
2 Φορές Ξεδίπλωμα Προς το παρόν αγνοούμε τη δέσμευση καταχωρητών: LD nop ST ADD BLT LD nop ST ADD BLT Αποτυχία! Παραβίαση περιορισμών πόρων ALU
Εισαγωγή Λειτουργίας ΝΟΡ και 3 Φορές Ξεδίπλωμα LD nop ST ADD nop BLT LD nop ST ADD nop BLT LD nop ST ADD nop BLT Με 3 επαναλήψεις προκύπτουν αρκετές συγκρούσεις πόρων
Ρυθμός Επαναλήψεων Ερώτηση: Μπορούμε να έχουμε μια νέα επανάληψη σε κάθε κύκλο μηχανής; Απάντηση: Όχι! Γιατί; Κάθε επανάληψη απαιτεί 2 πόρους MEM και 2 πόρους ALU Για μια νέα επανάληψη σε κάθε κύκλο θα έπρεπε να διαθέτουμε τόσους πόρους Άρα ελάχιστο διάστημα εκκίνησης διαδοχικών επαναλήψεων = 2 κύκλοι Ή αλλιώς μέγιστος ρυθμός ανά 2 κύκλους
Δρομολόγηση με Καθυστέρηση 2 LD nop nop ST ADD BLT LD nop nop ST ADD BLT LD nop nop ST ADD BLT LD nop nop ST ADD BLT Αρχικοποίηση Ταυτόσημες δρομολογήσεις Τερματισμός
Αλγόριθμος Δρομολόγησης (Iterative Modulo Scheduling) Υπολόγισε τον ελάχιστο δυνατό χρόνο καθυστέρησης Τ=Τ 0 Προσπάθησε να δημιουργήσεις τον πίνακα δρομολόγησης με καθυστέρηση Τ Ικανοποίησε τους περιορισμούς εξαρτήσεων και πόρων Όπου χρειάζεται χρησιμοποίησε εντολές NOP Σταμάτα, αν μια εντολή δε δρομολογείται μέσα σε διάστημα Τ κύκλων και επανάλαβε την προσπάθεια από την αρχή με Τ=Τ+1
Πρώτος Αλγόριθμος
Δέσμευση Καταχωρητών Εφόσον δεν κάνουμε πραγματικό ξεδίπλωμα, το πλήθος καταχωρητών που χρειαζόμαστε είναι πεπερασμένο Μπορούμε να επαναχρησιμοποιούμε καταχωρητές σε επαναλήψεις που δεν επικαλύπτονται Όμως δε μπορούμε να χρησιμοποιούμε τους αρχικά δεσμευμένους καταχωρητές του βρόχου
Δέσμευση Καταχωρητών Ο πυρήνας του νέου βρόχου μπορεί να απαιτεί περισσότερους καταχωρητές από ό,τι το πλήθος καταχωρητών που δεσμεύεται για μια επανάληψη Ανάλογα με την επικάλυψη επαναλήψεων Οι καταχωρητές επαναχρησιμοποιούνται με αντιγραφή του πυρήνα Στο παράδειγμά μας έχουμε επικάλυψη 3 επαναλήψεων, άρα απαιτούνται 3 σύνολα καταχωρητών και 3 αντίγραφα του πυρήνα
Παράδειγμα: Δέσμευση Καταχωρητών Στον αρχικό βρόχο: Ο $r9 περιέχει τη σταθερά 4N Ο $r8 περιέχει το δείκτη του βρόχου Ο $r1 χρησιμοποιείται για την αντιγραφή του a[i] στο b[i] Στο νέο βρόχο: Ο $r9 περιέχει τη σταθερά 4N Οι $r6, $r7, $r8 περιέχουν το δείκτη του βρόχου Οι $r1, $r2, $r3 χρησιμοποιούνται για την αντίστοιχη αντιγραφή
Ο Πυρήνας του Νέου Βρόχου Πρόωρος τερματισμός Κάθε καταχωρητής δείκτης χειρίζεται ανά 3 τα στοιχεία των πινάκων επανάληψη i επανάληψη i + 1 επανάληψη i + 2 L: ADD r8,r8,#12 nop LD r3,a(r6) BGE r8,r9,l ST b(r7),r2 nop LD r1,a(r8) ADD r7,r7,#12 nop nop BGE r7,r9,l ST b(r6),r3 nop LD r2,a(r7) ADD r6,r6,#12 ST b(r8),r1 nop BLT r6,r9,l επανάληψη i + 3 επανάληψη i + 4 (L και L κατάλληλες ετικέτες στον κώδικα τερματισμού)
Κυκλικές Εξαρτήσεις Δεδομένων Μέχρι τώρα θεωρήσαμε βρόχους do-all με απουσία κυκλικών εξαρτήσεων στο βρόχο, ώστε τα δεδομένα να εξαρτώνται μόνο από άλλα δεδομένα της ίδιας επανάληψης Οι κυκλικές εξαρτήσεις στους δείκτες δε μας ενοχλούν (δείτε το προηγούμενο παράδειγμα!) Συμπλήρωση για βρόχους do-across: σημειώνουμε τις ακμές του γράφου εξαρτήσεων με ετικέτα <απόσταση, καθυστέρηση>
Παράδειγμα: Κυκλικές Εξαρτήσεις (A) (B) (C) LD r1,a(r8) <0,2> ST b(r8),r1 <0,1> ADD r8,r8,#4 <1,1> <1,1> Η εντολή (A) πρέπει να περιμένει τουλάχιστον 1 cc μετά την (C) από την προηγούμενη επανάληψη (D) <0,1> BLT r8,r9,l Η εντολή (C) πρέπει να περιμένει τουλάχιστον 1 cc μετά την (B) της ίδιας επανάληψης
Περιορισμός Επαναλήψεων (A) T (C) Τουλάχιστον 1 cc (A) (C)
Πίνακας Καθυστερήσεων Έστω T η καθυστέρηση εκκίνησης διαδοχικών επαναλήψεων Η ετικέτα <i,j> στο γράφο εξαρτήσεων επιβάλλει καθυστέρηση j-it Υπολόγισε για κάθε ζεύγος κόμβων (n, m) τη μέγιστη συνολική καθυστέρηση σε όλα τα ακυκλικά μονοπάτια από τον n στον m Το αποτέλεσμα δίνει άνω και κάτω φράγματα στη δρομολόγηση των εντολών
Παράδειγμα: Πίνακας Καθυστερήσεων A B C D A B C D A 2 A 2 3 4 B 1 B 2-T 1 2 C 1-T 1-T 1 C 1-T 3-T 1 D D Ακμές Μονοπάτια (κλείσιμο ακμών) Παρατήρηση: Θα πρέπει T 4. Εάν T=4, τότε η A (LD) πρέπει να προηγείται της Β (ST) κατά 2 cc, ενώ εάν T=5, τότε η A μπορεί να βρίσκεται 2-3 cc πριν τη B. S(B) S(A)+2 S(A) S(B)+2-T S(B)-2 S(A) S(B)+2-T
Προσαρμογή Αλγόριθμου Υπολογισμός ελάχιστου διαστήματος εκκίνησης συμπεριλαμβάνοντας και τους περιορισμούς από κυκλικές εξαρτήσεις Δρομολόγηση ολόκληρων ισχυρά συνεκτικών συνιστωσών (SCC) του γράφου εξαρτήσεων αντί απλών κόμβων, σε κάποια τοπολογική σειρά προτεραιότητας Δρομολόγηση ανά εντολή εντός της κάθε SCC Οι SCC δημιουργούν ακυκλικό γράφο του οποίου η δρομολόγηση γίνεται με τον προηγούμενο αλγόριθμο
Δεύτερος Αλγόριθμος
Βελτιώσεις Υποστήριξη Υλικού Ιδιαίτερη διαχείριση δεικτών για μείωση κυκλικών εξαρτήσεων Βρήκαμε T 4 αντί για Τ 2 που είχαμε βρει νωρίτερα! Μετατροπή βαθμωτών μεταβλητών σε διανυσματικές Μείωση ψευδών εξαρτήσεων μεταξύ επαναλήψεων Διαχείριση διακλαδώσεων Βεβαιωμένη εκτέλεση και trace scheduling Περιστρεφόμενος φάκελος καταχωρητών