ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός Ενότητα 6 Σύστημα Διασωλήνωσης Π. Ευριπίδου (2007) 1 Ταυτοχρονισμός ή Συνδρομή Λειτουργία (Concurrency) Παράλληλη Επεξεργασία (Parallelism) Replicated machine resources Επεξεργάζονται διαφορετικά μέρη του προγράμματος [Operate on different parts of the program] Διασωλήνωση (Pipelining): Σύστημα διαδοχικής διοχέτευσης και επεξεργασίας 50 10 15 15 Μια μηχανική λειτουργία διαιρείται σε ένα αριθμό τμημάτων.[machine function is split into a number of stages] Το κάθε τμήμα υλοποιείται με το δικό του υλικό [Separate hardware allocated for each stage] 10 2
Η Διασωλήνωση είναι μια τεχνική υλοποίησης στην οποία πολλές εντολές επικαλύπτονται κατά την εκτέλεση Σήμερα η Διασωλήνωση είναι το κλειδί για να γίνονται οι επεξεργαστές γρήγοροι. Όποιος έχει βάλει πλυντήριο, έχει ασυναίσθητα χρησιμοποιήσει Διασωλήνωση. 3 Σε μια Διασωληνωμένη μηχανή το ρολόι (χρονιστής) πρέπει να δουλεύει με την ταχύτητα του πιο αργού τμήματος (In a pipeline machine the clock must run at the speed of the slowest component) 15 15 S 4 S 3 15 15 S 2 T 1 S 1 1 2 3 4 5 6 4
Επιτάχυνση Διασωλήνωσης (Pipeline Speedup) Sk = Χρόνος χωρίς Διασωλήνωση Χρόνος με Διασωλήνωση K n-1 S 4 T 1 T 2 T 3 S k T1 n * t * k n * k = = = Tk [(n - 1) + k] * t (n - 1) + k S 3 S 2 T 1 T 1 T 2 T 2 T 3 T 3 T 4 T 4 n = αριθμός εντολών t = χρόνος κύκλου μηχανής k = αριθμός τμημάτων διασωλήνωσης S 1 T 1 T 2 T 3 T 4 1 2 3 4 5 6 5 Παράδειγμα: Υπολογίστε την επιτάχυνση από την χρήση ενός διασωληνωμένου αθροιστή με 4 τμήματα στην πρόσθεση δυο διανυσμάτων (Using a 4-stage pipeline adder find the corresponding speedup for adding two vectors of size): 1) 1 2) 10 3) 100 4) 1000 6
S 4 S 4 S 4 S 4 1* 4 = =1 4 10* 4 = 308 4+ 9 =. 100* 4 = = 388. 4+ 99 1000* 4 = = 399. 4+ 999 lim Sk( n) k n 7 Παράδειγμα 2: Υπολογίστε το χρόνο που χρειάζεται για την πρόσθεση 8 αριθμών με τη χρήση ενός διασωληνωμένου αθροιστή με 4 τμήματα (Given a 4 stage pipeline adder calculate the time (T4) to add 8 numbers) 8
S 1,2 S 3,4 S 5,6 S 7,8 S 1,4 S 1,2 S 3,4 S 5,6 S 7,8 S 1,4 S 1,2 S 1,2 S 3,4 S 3,4 S 5,6 S 5,6 S 7,8 S 7,8 S 1,4 S 1,4 S 5,8 S 5,8 1 2 3 4 5 6 7 8 S 5,8 S 1,8 S 5,8 S 1,8 S 1,8 S 1,8 10 11 12 13 14 15 16 17 9 Διασωλήνωσης Εντολών (Instruction Pipeline) Σε κάθε κύκλο μηχανής τερματίζεται η επεξεργασία μιας εντολής [One Instruction is completed each machine cycle] Επιτάχυνση της τάξης του 7 σε σύγκριση με μη-διασωληνωμένη μηχανή. [Perfomance Improvement of a factor of 7 over a purely sequential implementation] Υποθέστε ότι η μνήμη χρειάζεται 4 κύκλους μηχανής και όχι 1. [Suppose that the memory takes 4 machine cycles instead of 1.] Ο μέσος χρόνος εκτέλεσης μιας εντολής εξαρτάται από το πιο αργό τμήμα, τη μνήμη δηλαδή [The average rate of instruction completion depends on the slowest component i.e. the memory operations]. Με αυτό το ρυθμό παράγεται ένα αποτέλεσμα σε κάθε κύκλο. [At this rate one result is produced every 4 cycles.] Ημη-διασωληνωμένη μηχανή χρειάζεται [Sequential Implementation takes] 3 x 4 + 4 x 1 = 16 κύκλους. Επιτάχυνση της τάξης του 4 [Speedup of 4] Ερώτηση: Πως μπορούμε να βελτιώσουμε αυτή την διασωλήνωση [How can we improve this pipeline?] Instr. Fetch Instr. Decode Address Gen Oper. Fetch Execute Oper. Store Update PC 10
Προσθέτουμε 3 τμήματα καθυστέρησης μετά από κάθε τμήμα μνήμης [Add 3 delays stages after each memory stage]! Η νέα διασωλήνωση έχει 16 τμήματα. [New pipeline is 16 stages long] Ένα αποτέλεσμα παράγεται σε κάθε κύκλο. [One result per cycles is possible now] Επιτάχυνση της τάξης του 16 [Speedup of 16]! Ερώτηση: Είναι αυτό εφικτό [Is this for real? What's the catch]? Η καινούργια διασωλήνωση χρειάζεται ταυτόχρονα 12 προσπελάσεις μνήμης [The new pipeline requires that 12 memory accesses be active simultaneously.] Σε αυτή την περίπτωση η διασωλήνωση έχει μεταβιβάσει το πρόβλημα σε ένα άλλο σύστημα. [In this case a pipelined structure shifts the bottleneck to a different system.] Ο σχεδιαστής του Η/Υ πρέπει να χρησιμοποιήσει παρόμοιες μεθόδουςγιαναβελτιώσειτηναπόδοσητηςμνήμης[the architect must apply similar techniques to improve the memory performance.] Instr. Fetch DELAY DELAY DELAY Instr. Decode Address Gen Oper. Fetch DELAY DELAY DELAY Execute Oper. Store DELAY DELAY DELAY 11 Update PC Σύστημα διαδοχικής διοχέτευσης και επεξεργασίας του MIPS Για την ομαλή λειτουργία του συστήματος διασωλήνωσης πρέπει: να προσδιορίσουμε τις διάφορες λειτουργίες σε κάθε κύκλο μηχανής και να βεβαιωθούμε ότι εντολές που εκτελούνται ταυτόχρονα Δεν χρειάζονται περισσότερους πόρους από αυτούς που διαθέτει η μηχανή. (Making the Pipeline work Determine what happens in each cycle of the machine and make the sure that overlapping instructions doesn't over commit resources) MIPS 12 IF ID EX MEM WB Instruction Fetch I-Decode Execute Memory Access Write Back
IF: Προσκόμιση εντολής ( Instruction Fetch) ID: Αποκωδικοποίηση εντολής και ανάγνωση καταχωρητών (Instruction decode and register file read) EX: Εκτέλεση ή υπολογισμός διεύθυνσης (Execution or address calculation) MEM: Προσπέλαση και ανάγνωση μνήμης δεδομένων (Data memory access) WB: Γράψιμο στους καταχωρητές (Write Back) 13 14
Σχεδιάσμος για Διασωλήνωση Όλες οι MIPS εντολές έχουν το ίδιο μήκος. πιο εύκολη η προσκόμιση εντολών στο πρώτο τμήμα της Διασωλήνωσης πιο εύκολη αποκωδικοποιήσει στο δεύτερο στάδιο. Ο MIPS έχει λίγους τύπους εντολών με τα πεδία των καταχωρητών πηγής να είναι στην ίδια θέση. Οι Προσβάσεις στην μνήμης εμφανίζονται μόνο σε loads ή stores στον MIPS. Χρησιμοποιούμε το τμήμα εκτέλεσης (ΕΧΕ) για να υπολογίσουμε την διεύθυνση μνήμης καιμετάναέχουμε πρόσβαση στην μνήμη στο επόμενο στάδιο. Σταθερός Χρόνος εκτέλεσης των Εντολών Οι τελεστές πρέπει να είναι ευθυγραμμισμένη (aligned) στη μνήμη. τα απαιτούμενα δεδομένα μπορούν να μεταφερθούν μεταξύ του επεξεργαστή και της μνήμης σε ένα κύκλο της διασωλήνωσης. 15 Κίνδυνοι Διασωλήνωσης (Pipeline Hazards ) Το σύστημα διασωλήνωσης του ΜIPS εργάζεται χωρίς διακοπές (στάση διασωλήνωσης ή φυσαλίδες διασωλήνωσης) εάν η κάθε εντολή που εκτελείται στη διασωλήνωση είναι ανεξάρτητη από κάθε άλλη εντολή που εκτελείται στη διασωλήνωση (The MIPS pipeline would work without any "interruption«(pipeline stalls or bubbles) if every instruction were independent of every other instruction in the pipeline) Στην πράξη υπάρχουν αλληλεξαρτήσεις μεταξύ των εντολών που εκτελούνται στην διασωλήνωσης (In reality instructions in the pipeline are dependent on each other) Κίνδυνοι Διασωλήνωσης: Εμποδίζουν την επόμενη ακολουθία εντολών από του να εκτελεστεί κατά τη διάρκεια του προκαθορισμένου κύκλου μηχανής (Pipeline Hazards: Prevents the next instruction stream, from executing during its designated clock cycle.) Δομικοί Κίνδυνοι (Structural Hazards) Κίνδυνοι Δεδομένων (Data Hazards) Κίνδυνοι Ροής (Control Hazards) 16
Επιτάχυνσης Διακλάδωσης (Pipeline Speedup) Pipeline_speed-up= Average_Instruction_time-without_Pipelining Average_Instruction_time- with_pipelining = CPI_without_Pipelining Clock_cycle_time_without_Pipelining CPI_with_Pipelining Clock_cycle_time_WITH_Pipelining = Clock_cycle_time_without_Pipelining CPI_without_Pipelining Clock_cycle_time_WITH_Pipelining CPI_WITH_Pipelining Ideal_ CPI= CPI_without_Pipelining Pipeline_Depth Speedu p= Clock_cycle_time_without_Pipelining Ideal_CPI Pipe_Depth Clock_cycle_time_WITH_Pipelining CPI_WITH_Pipelining CPI_with_Pipeline= Ideal_CPI+Pipeline_Stalls_per_Instruction 17 Δομικοί Κίνδυνοι (Structural Hazards) Ορισμένοι συνδυασμοί εντολών δεν μπορούν να ικανοποιηθούν διότι χρειάζονται περισσότερους πόρους από αυτούς που διαθέτει η μηχανή (Some combination of instructions cannot be accommodated due to resource conflicts.) Ορισμένες λειτουργικές μονάδες δεν είναι διασωληνωμένες (Some functional units are not pipelined) Ορισμένες μονάδες δεν αναπαράγονται αρκετά για να ικανοποιήσουν όλους τους πιθανούς συνδυασμούς από εντολές. (Some resources are not duplicated enough to allow all combination of instructions.) Αρχείο καταχωρητών που επιτρέπει μόνο μια πρόσβαση (Only one registerfile port) Μια διασωλήνωμενη μνήμη (Single memory pipeline.) 18
Παράδειγμα: Έστω μια μηχανή (παρόμοια με το MIPS) με σύστημα μνήμης που επιτρέπει μόνο μια πρόσβαση σε κάθε κύκλο. Oι εντολές πρόσβασης στη μνήμη είναι το 30% τουολικούαριθμούτωνεντολών Το ιδανικό CPI είναι 1.2 Πόσο πιο γρήγορη είναι η ιδανική μηχανή σε σύγκριση με την πραγματική μηχανή; I n s t r. O r d e r Load Instr 1 Instr 2 Instr 3 Instr 4 Mem Mem Mem Mem Mem Mem Mem Mem Mem Mem Structural Hazard 19 Κίνδυνοι-Δεδομένων (Data Hazards) Κίνδυνοι-Δεδομένων δημιουργούνται όταν η διασωλήνωση διαφοροποιεί τη σειρά πρόσβασης σε τελεστές σε σύγκριση με τη σειρά πρόσβασης χωρίς διασωλήνωση Time (clock add r1,r2,r3 I ID/R E ME W A I Re D Re L sub r4,r1,r3 and r6,r1,r7 Im Re A D Re L I Re A D Re L or r8,r1,r9 xor r10,r1,r11 Im Re A D Re L Im Re A D Re L 20
I n s t r. O r d e r Μεταβίβαση (Forwarding) για αποφυγή Κινδύνου Δεδομένων add r1,r2,r3 sub r4,r1,r3 and r6,r1,r7 or r8,r1,r9 Time (clock cycles) Ifetch Ifetch DMem Ifetch Ifetch DMem DMem DMem xor r10,r1,r11 Ifetch DMem 21 Αλλαγές στο υλικό για Forwarding NextPC isters ID/EX mux mux EX/MEM Data Memory MEM/WR Immediate mux 22
Τι σημαίνει forwarding; Μεταχείριση πεδίων των pipeline registers σαν πιθανά inputs στις εντολές Πχ: στοστάδιοεχεc εκτελούμε το πιο κάτω: if (Src1[D/E]!= NULL) if (Dest[Ε/Μ]==Src1[D/Ε]) Src1= DestValue[Ε/Μ] else if (Dest[M/W]==Src1[D/Ε]) Src1= DestValue[M/W] else Src1= SrcValue1[D/E] 23 Κίνδυνοι Δεδομένων και με Forwarding Time (clock cycles) I n s t r. lw r1,0(r2) sub r4,r1,r6 Ifetch Ifetch DMem DMem O r d e r and r6,r1,r7 or r8,r1,r9 Ifetch Ifetch DMem DMem 24
Λύσεις του κινδύνου της εντολής φόρτωσης Time (clock cycles) I n s t r. O r d e r lw r1, 0(r2) sub r4,r1,r6 and r6,r1,r7 Ifetch Ifetch Ifetch DMem Bubble Bubble DMem DMem or r8,r1,r9 Bubble Ifetch DMem 25 Διαβίβαση Δεδομένων (Data Forwarding) Το αποτέλεσμα της ΑΛΜ επανατροφοδοτείται στην είσοδο της ΑΛΜ (The result is always fed back to the input latches) Το σύστημα διασωλήνωσης του MIPS πρέπει να διαβιβάζει δεδομένα στις δύο επόμενες εντολές. (The MIPS pipeline must pass results to the next two instructions (if they need the result that is)) Κίνδυνοι Δεδομένων δημιουργούνται και όταν δυο εντολές διαβάζουν ή γράφουν την ίδια τοποθεσία στη μνήμη. (Data hazards are also created when two instructions read or write the same memory location) Στον MIPS το πρόβλημα αυτό δεν παρουσιάζεται διότι οι προσπελάσεις στη μνήμη γίνονται πάντοτε στη σωστή σειρά. (Μόνο το τμήμα MEM διαβάζει ή γράφει στη μνήμη) [The MIPS does not have this problem because it keeps memory access in order (Only MEM stage reads or writes to memory)] 26
27 Μηχανισμός Εξασφάλισης της Διασωλήνωσης [Pipeline Interlocks] Επισημαίνει κινδύνους και Σταματά την τροφοδότηση στη διασωλήνωση της εντολής που θα χρησιμοποιήσει ένα δεδομένο μέχρι αυτό να παραχθεί από την παραγωγό εντολή [Detect hazards and stall the pipeline beginning with the instruction that wants to use the data until the sourcing instruction produces it.] Η καθυστέρηση ονομάζεται στάση ή φυσαλίδα. [The delay cycle is called stall or bubble] 28
Παράδειγμα: Το 20% των εντολών είναι φόρτωσης [20% of all instructions are loads] Στο 50% των περιπτώσεων η επόμενη εντολή χρησιμοποιεί το αποτέλεσμα της εντολής φόρτωσης [50% of the time the next instruction depends on the load]. Ο κίνδυνος αυτός δημιουργεί μια στάση στη διασωλήνωση [This hazard creates a single cycle delay] Ερώτηση: Πόσο πιο γρήγορη είναι η διασωλήνωση χωρίς τον κίνδυνο αυτό σε σύγκριση με την πραγματική μηχανή [How much faster is the ideal pipeline (CPI=1) compared to the real one.] Το CPI της εντολής που ακολουθεί την εντολή φόρτωσης και χρησιμοποιεί το αποτέλεσμα της φόρτωσης είναι 1.5 [CPI of the instruction following the load is 1.5] CPI= 0.8 x 1 + 0.2 *1.5 = 1.1 Performance ratio = 1.1 / 1 i.e. 10% faster 29 Χρονοπρογραμματισμός Εντολών [Instruction Scheduling] Οι Μεταγλωττιστές επιδιώκουν να αποφεύγουν την παραγωγή κώδικα στον οποίο μια εντολή φόρτωσης ακολουθείται από μια ή περισσότερες εντολές που θα χρησιμοποιήσουν το αποτέλεσμα της φόρτωσης [Compilers try to generate code that does not have a load followed by an instruction(s) that does use the result of that load] Παράδειγμα: Γράψετε κώδικα που αποφεύγει στάσεις στη διασωλήνωση του MIPS [Generate code that avoids pipeline stalls for the following code:] a= b+ c d= e- f Unoptimized Code lw Rb, b lw Rc, c load interlock add Ra, Rb, Rc sw a, Ra lw Re, e lw Rf, f load interlock sub Rd, Re, Rf sw d, Rd Optimized Code lw Rb, b lw Rc, c lw Re, e Delay slot add Ra, Rb, Rc lw Rf, f sw a, Ra Delay slot sub Rd, Re, Rf sw d, Rd 30
Κίνδυνοι Διακλαδώσεων (Κίνδυνοι Ροής Ελέγχου) [Control Hazards] Οι Κίνδυνοι Διακλαδώσεων δημιουργούνται όταν έχουμε μια διακλάδωση (η οποία μπορεί και να βασίζεται σε αποτέλεσμα άλλης εντολής) στην διασωλήνωση που ακολουθείτε από άλλες εντολές. Παράδειγμα: Υπολογίστε την επιτάχυνση του διασωληνωμένου MIPS εάν το 30% των εντολών είναι διακλαδώσεις [Example: Calculate the speedup of the pipelined MIPS if 30% of the instructions are branches.] Οι διακλαδώσεις στο MIPS χρειάζονται 3 τμήματα (IF, ID,EXE) 3 Στάσης Ideal CPI = 1. CPIreal= 0.7 + 0.3 x 4 = 1.9 Μόνο 50% της ιδανικής επιτάχυνσης είναι εφικτή. [Only about half the ideal speedup is possible] 31 Η μείωση του κόστους της επιτάχυνσης είναι εξαιρετικά σημαντική για μηχανέςυψηλήςαπόδοσης[reduction of branch penalty is crucial.] Οι στάσεις που οφείλονται σε κινδύνους διακλαδώσεων μπορούν να ελαττωθούν εάν [Branch stalls can be reduced by]: 1. Προσδιορίσουμε πιο νωρίς στην διασωλήνωση εάν η διακλάδωση θα γίνει [Determine if branch is taken earlier] 2. Υπολογίσουμε το νέο PC πιο νωρίς [Compute taken PC earlier] και τα δυο πρέπει να γίνουν (both must be done). 32
Η μείωση επιτυγχάνεται με: Την προσθήκη ειδικού κυκλώματος για να ελέγχει τη συνθήκη διακλάδωσης (test-for-zero) στο τμήμα ID [Allocate special logic to perform the test-for-zero at the ID stage] Την προσθήκη ειδικού αθροιστή στο τμήμα ID για τον υπολογισμό της Διεύθυνσης του Προορισμού της Διακλάδωσης (BTA). [Allocate an adder in the ID stage to compute the Branch Taken Address (BTA)] Το κόστος της διακλάδωσης στον MIPS είναι τώρα ένας κύκλος [Branch Penalty is now one cycle.] 33 Μείωση του κόστους των διακλαδώσεων σε διασωληνωμένες μηχανές [Reducing Pipeline Branch Penalty] Στατικές Προβλέψεις [Static Predictions (fixed for each branch during the entire execution] Καμιά εντολή δεν εισέρχεται στη διασωλήνωση μέχρις ότου να γνωρίζουμε το αποτέλεσμα της διακλάδωσης [Freeze pipeline until branch destination is known]. Πρόβλεψη ότι η διακλάδωση θα είναι επιτυχής [Predict branch taken.] Πρόβλεψη ότι η διακλάδωσης δενθαείναιεπιτυχής[predict branch as not taken.] Διακλαδώσεις με καθυστέρηση [Delayed branch.] 34
Διακλαδώσεις με καθυστέρηση Διακλαδώσεις με καθυστέρηση n κύκλων [Delayed branch with branch delay of n] Η Διακλάδωση με καθυστέρηση δεν λαμβάνει χώρα μέχρις ότου ένας αριθμός εντολών (n) που ακολουθούν τη διακλάδωση εκτελεστούν [Delayed Branch: The branch does not take effect until a number of sequential successors finish executing.] Ο MIPS έχει μια στάση για κάθε διακλάδωση. Δηλαδή η Διακλάδωση [Delayed branch] Branch Instruction Sequential Successor 1 Sequential Successor 2 Sequential Successor n branch target if taken με καθυστέρηση δεν λαμβάνει χώρα μέχρι να εκτελεστεί η εντολή που ακολουθεί την διακλάδωση. [The DLX has branch delay of 1, i.e. the delayed branch does not take effect until the next instruction finish executing.] Σχισμή Καθυστέρησης Διακλάδωσης: Η σχισμή που ακολουθεί τη σχισμή της Διακλάδωσης με καθυστέρηση [Branch Delay Slots: The sequential successor of a delayed branch] 35 Διασωληνομένος Διάδρομος Δεδομένων Ημνήμη-εντολών (instruction memory) χρησιμοποιείται μόνο σε ένα από τα πέντε στάδια εκτέλεσης μιας εντολής, επιτρέποντας την χρήση από άλλες εντολές κατά τα άλλα τέσσερα στάδια. Γιαναδιατηρήσουμετηνεντολήγιαταάλλατέσσερατηςστάδια, η τιμήπου διαβάζεται από τη μνήμη εντολών (instruction memory) πρέπει να εγγράφεται σε κάποιο καταχωρητή. Παρόμοια επιχειρήματα ισχύουν και για κάθε ένα από τα υπόλοιπα στάδια της διασωλήνωσης, 36
Όλες οι εντολές προχωρούν σε κάθε κύκλο ρολογιού από ένα καταχωρητή διασωλήνωσης στον επόμενο. Οι καταχωρητές ονομάζονται από τα δύο στάδια που διαχωρίζονται από τον συγκεκριμένο καταχωρητή. Για παράδειγμα ο καταχωρητής μεταξύ των σταδίων IF και ID ονομάζεται IF/ID. Προσέξτε ότι δεν υπάρχει καταχωρητής στο τέλος του σταδίου WB. Όλες οι εντολές πρέπει να αλλάξουν (update) κάποια κατάσταση (state) στη μηχανή -το αρχείο καταχωρητών, τηνμνήμηήτονpcέτσι δεν χρειάζεται ακόμα ένας καταχωρητής διασωλήνωσης στο στάδιο όπου η κατάσταση αλλάζεται. Για παράδειγμα, μια εντολή load θα τοποθετήσει το αποτέλεσμα της σε ένα από τους 32 καταχωρητές, και οποιαδήποτε μεταγενέστερη εντολή χρειάζεται αυτό το δεδομένο απλά θα διαβάσει τον κατάλληλο καταχωρητή. 37 Οι εντολές και τα δεδομένα κινούνται γενικά από αριστερά προς τα δεξιά μέσω των πέντε σταδίων καθώς ολοκληρώνεται η εκτέλεση της εντολής. Υπάρχουν όμως δύο εξαιρέσεις στην ροή των εντολών: Το στάδιο Write Back, που τοποθετεί το αποτέλεσμα πίσω στο αρχείο καταχωρητών Η επιλογή της επόμενης τιμής του PC, επιλέγοντας μεταξύ του αυξανόμενου PC και της διεύθυνσης από την εντολή branch στο στάδιο MEM Τα δεδομένα που ρέουν από ταδεξιάπροςτααριστεράδεν επηρεάζουν την παρούσα εντολή, μόνο οι επόμενες εντολές στο διάδρομο δεδομένων επηρεάζονται από αυτές τις αντίστροφες κινήσεις δεδομένων. Προσέξτε ότι η πρώτη δεξιά-προς-αριστερά κίνηση οδηγεί σε κινδύνους δεδομένων και η δεύτερη σε κινδύνους ελέγχου. 38
39 40
41 42
43 44
45