ΗΥ425 Αρχιτεκτονική Υπολογιστών. Static Scheduling. Βασίλης Παπαευσταθίου Ιάκωβος Μαυροειδής

Σχετικά έγγραφα
ΗΥ425 Αρχιτεκτονική Υπολογιστών. Static Scheduling. Ιάκωβος Μαυροειδής

ΗΥ425 Αρχιτεκτονική Υπολογιστών. Προχωρημένες Τεχνικές Pipelining. Ιάκωβος Μαυροειδής

Δυναμική Δρομολόγηση Εντολών (Dynamic Scheduling)

Instruction-Level Parallelism and its Dynamic Exploitation. Κεφάλαια 4o Computer Architecture-A Quantitative Approach 3 rd Edition

CS425 Computer Systems Architecture

ΤΕΧΝΙΚΕΣ ΑΥΞΗΣΗΣ ΤΗΣ ΑΠΟΔΟΣΗΣ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ I

CS-425 Mid-term exam

Instruction-Level Parallelism and its Dynamic Exploitation. Μάθηµα 3ο Computer Architecture-A Quantitative Approach

ΠΛΕ- 027 Μικροεπεξεργαστές 8ο μάθημα: Παραλληλία επιπέδου εντολής

Εισαγωγή. Σύνοψη βασικών εννοιών, 5-stage pipeline, επεκτάσεις για λειτουργίες πολλαπλών κύκλων

1.1 ΑΣΚΗΣΗ ΛΥΣΗ 2.1 ΑΣΚΗΣΗ ΛΥΣΗ 3.1 ΑΣΚΗΣΗ

Υ- 01 Αρχιτεκτονική Υπολογιστών Υπερβαθμωτοι επεξεργαστές

Αρχιτεκτονική Υπολογιστών

ΗΥ425 Αρχιτεκτονική Υπολογιστών. Branch Prediction. Ιάκωβος Μαυροειδής

ΗΥ425 Αρχιτεκτονική Υπολογιστών. Precise Exceptions Speculation Reorder Buffer. Βασίλης Παπαευσταθίου Ιάκωβος Μαυροειδής

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

ΗΥ425 Αρχιτεκτονική Υπολογιστών. Precise Exception Speculation Reorder Buffer. Ιάκωβος Μαυροειδής

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Pipeline: Ένα παράδειγμα από.τη καθημερινή ζωή. 30 min κάθε «φάση»

Επανάληψη Σύστημα Διασωλήνωσης (Pipelining) Κεφάλαιο 4 - Σύστημα ιασωλήνωσης

30 min κάθε «φάση» Pipeline: Ένα παράδειγµα από.τη καθηµερινή ζωή. 1. Πλυντήριο. 2. Στεγνωτήριο. 3. ίπλωµα. 4. αποθήκευση. προσέγγιση για 4.

Υπερβαθμωτή (superscalar) Οργάνωση Υπολογιστών

Περιορισμοί των βαθμωτών αρχιτεκτονικών

ΗΥ425 Αρχιτεκτονική Υπολογιστών. Branch Prediction. Βασίλης Παπαευσταθίου Ιάκωβος Μαυροειδής

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Pipeline: Ένα παράδειγµα από.τη καθηµερινή ζωή. 30 min κάθε «φάση»

Θέματα Μεταγλωττιστών

CS425 Computer Systems Architecture

ΔΙΑΛΕΞΗ 18: Στατικός Παραλληλισμός Εντολών VLIW Επεξεργαστές

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός Κεφ. 4: O επεξεργαστής Σύστημα Διασωλήνωσης (Pipelining)

Υποθετική Εκτέλεση Εντολών

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Δσναμική Δρομολόγηζη Ενηολών (Dynamic Scheduling)

Παραλληλισμός σε επίπεδο εντολών

(Branch Prediction Mechanisms)

Αρχιτεκτονική Υπολογιστών

Υπερβαθµωτή Οργάνωση Υπολογιστών

Chapter 6 Αύξηση της απόδοσης με διοχέτευση (pipeline)

Εντολές Διακλάδωσης. #bubbles ~= pipeline depth X loop length. Next fetch started. Fetch. I-cache. Fetch Buffer. Decode. Issue Buffer.

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 13. Διακλαδώσεις. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Τελική Εξέταση, Απαντήσεις/Λύσεις

Μέθοδοι Πρόβλεψης Διακλαδώσεων (Branch Prediction Mechanisms)

Τέτοιες λειτουργίες γίνονται διαμέσου του

Αρχιτεκτονική Υπολογιστών

Pipelined Datapath, Hazards and Forwarding

Υπερβαθμωτή (superscalar) Οργάνωση Υπολογιστών

Διάλεξη 12 Καθυστερήσεις (Stalls)

Instruction Execution Times

Κεντρική Μονάδα Επεξεργασίας. Επανάληψη: Απόδοση ΚΜΕ. ΚΜΕ ενός κύκλου (single-cycle) Παραλληλισμός σε επίπεδο εντολών. Υπολογιστικό σύστημα

Διάλεξη 12 Καθυστερήσεις (Stalls) Εκκενώσεις Εντολών (Flushing)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΔΕΥΤΕΡΗ ΠΡΟΟΔΟΣ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΣΤΟΥΣ Η/Y (ΗΥ232)

Συστήματα σε Ολοκληρωμένα Κυκλώματα

Application Operating System. Datapath & Control/Memory. Digital Design Circuit Design. Layout

ΔΙΑΛΕΞΗ 16: ΠΑΡΑΛΛΗΛΙΣΜΟΣ ΣΤΗΝ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Αρχιτεκτονική Υπολογιστών

ΔΙΑΛΕΞΗ 16: ΠΑΡΑΛΛΗΛΙΣΜΟΣ ΣΤΗΝ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ

Modbus basic setup notes for IO-Link AL1xxx Master Block

EE512: Error Control Coding

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Εργαστήριο Αρ. 2

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Υ- 01 Αρχιτεκτονική Υπολογιστών Υπόβαθρο: Διοχέτευση

Θέµατα Φεβρουαρίου

ΔΙΑΛΕΞΗ 16: ΠΑΡΑΛΛΗΛΙΣΜΟΣ ΣΤΗΝ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ

Αρχιτεκτονική Υπολογιστών

Οι τέσσερις αρχές για τον σχεδιασμό του συνόλου εντολών μιας μηχανής είναι:

Partial Trace and Partial Transpose

Main source: "Discrete-time systems and computer control" by Α. ΣΚΟΔΡΑΣ ΨΗΦΙΑΚΟΣ ΕΛΕΓΧΟΣ ΔΙΑΛΕΞΗ 4 ΔΙΑΦΑΝΕΙΑ 1

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Ενότητα 6 - Σύστημα Διασωλήνωσης. Π. Ευριπίδου (2007)

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

Παραδείγματα Assembly (Μέρος

CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS

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

Approximation of distance between locations on earth given by latitude and longitude

Section 9.2 Polar Equations and Graphs

Εισαγωγή στην πληροφορική -4

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Αρχιτεκτονική Υπολογιστών

2 Composition. Invertible Mappings

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Διάλεξη 11 Προώθηση (Forwarding)

Ασκήσεις στα Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

The challenges of non-stable predicates

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗ ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Overview. Transition Semantics. Configurations and the transition relation. Executions and computation

Θέματα Μεταγλωττιστών

ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση

Υπερβαθµωτή Οργάνωση Υπολογιστών

Section 7.6 Double and Half Angle Formulas

Αρχιτεκτονική υπολογιστών

Transcript:

ΗΥ425 Αρχιτεκτονική Υπολογιστών Static Scheduling Βασίλης Παπαευσταθίου Ιάκωβος Μαυροειδής

Τεχνικές ελάττωσης stalls. CPI = Ideal CPI + Structural stalls + RAW stalls + WAR stalls + WAW stalls + Control stalls Θα µελετήσουµε δύο ειδών τεχνικές Δυναµικές δροµολόγηση εντολών (hardware) Scoreboard (ελάττωση RAW stalls) Register Renaming α)tomasulo β)reorder Buffer (ελάττωση WAR και WAW stalls) Branch prediction (ελάττωση Control stalls) Στατικές (software/compiler) Loop Unrolling Software Pipelining Trace Scheduling 2

Αρχιτεκτονική Scoreboard (CDC 6600) Registers FP Mult FP Mult FP Divide FP Add Integer Functional Units SCOREBOARD Memory 3

Tomasulo Organization 4

Εξαρτήσεις Μεταξύ Εντολών (Depedences) Ποιές είναι οι πηγές των stall/bubbles; Εντολές που χρησιµοποιούν ίδιους registers. - Παράλληλες εντολές µπορούν να εκτελεστούν διαδοχικά χωρίς να δηµιουργούν stalls. π.χ. DIVD F0, F2, F4 ADDD F10, F1, F3 - Εξαρτήσεις µεταξύ εντολών µπορούν να οδηγήσουν σε stalls. Π.χ. DIVD F0, F2, F4 RAW ADDD F10, F0, F3 Οι εξαρτήσεις µεταξύ εντολών περιορίζουν την σειρά εκτέλεσης των εντολών (in order execution) π.χ. η ADDD πρέπει να εκτελεστεί µετά την DIVD στο 2ο παράδειγµα. Ενώ παράλληλες εντολές µπορούν να εκτελεστούν ανάποδα (out of order execution) π.χ. η ADDD µπορεί να εκτελεστεί πριν την DIVD στο 1ο παράδειγµα. 5

Εξαρτήσεις Μεταξύ Εντολών Data Dependences : Δύο εντολές είναι data dependent όταν υπάρχει µία αλυσίδα από RAW hazards µεταξύ τους. Name Dependences : Δύο εντολές είναι name dependent όταν υπάρχει ένα WAR ή WAW hazard µεταξύ τους. F0, 0(R1) ADDD F4, F0, F2 F0, 0(R2) Control Dependences : Eντολές εξαρτόµενες από branch εντολή. if p1 { S1; } 6

R4000 Performance Μη ιδανικό CPI : 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 Load stalls: (1 ή 2 clock cycles) Branch stalls: (2 cycles + unfilled slots) FP result stalls: RAW data hazard (latency) FP structural stalls: Not enough FP hardware (parallelism) eqntott espresso gcc li doduc nasa7 ora spice2g6 su2cor tomcatv Base Load stalls Branch stalls FP result stalls FP structural stal l s 7

Instruction Level Parallelism (ILP) ILP: Παράλληλη εκτέλεση µη συσχετιζόµενων (µη εξαρτώµενων) εντολών. gcc 17% control transfer εντολές 5 εντολές + 1 branch πέρα από ένα block για να έχουµε περισσότερο instruction level parallelism Loop level parallelism one opportunity First SW, then HW approaches 8

FP Loop: Που είναι τα Hazards? while (R1 > 0) { M[R1] = M[R1] + F2; R1 -= 8 } Loop: L.D F0,0(R1);F0=vector element ADD.D F4,F0,F2 ;add scalar from F2 S.D 0(R1),F4;store result SUBI R1,R1,8 ;decrement pointer 8B (DW) BNEZ R1,Loop ;branch R1!=zero NOP ;branch delay slot Instruction Instruction Latency in producing result using result clock cycles FP ALU op Another FP ALU op 3 FP ALU op Store double 2 Load double FP ALU op 1 Load double Store double 1 Integer op Integer op 0 Stalls? Assume 5-stage DLX (in order) 9

FP Loop Showing Stalls 1 Loop: L.D F0,0(R1) ;F0=vector element 2 stall 3 ADD.D F4,F0,F2 ;add scalar in F2 4 stall 5 stall 6 S.D 0(R1), F4 ;store result 7 SUBI R1,R1,8 ;decrement pointer 8B (DW) 8 BNEZ R1,Loop ;branch R1!=zero 9 stall ;branch delay slot Instruction Instruction Latency in producing result using result clock cycles FP ALU op Another FP ALU op 3 FP ALU op Store double 2 Load double FP ALU op 1 9 κύκλοι: Ξαναγράψτε τον κώδικα για να ελαχιστοποιήσετε τα stalls! 10

FP Loop Showing Stalls 1 Loop: L.D F0,0(R1) ;F0=vector element 2 stall 3 ADD.D F4,F0,F2 ;add scalar in F2 4 stall 5 stall 6 S.D 0(R1), F4 ;store result 7 SUBI R1,R1,8 ;decrement pointer 8B (DW) 8 BNEZ R1,Loop ;branch R1!=zero 9 stall ;branch delay slot Instruction Instruction Latency in producing result using result clock cycles FP ALU op Another FP ALU op 3 FP ALU op Store double 2 Load double FP ALU op 1 9 κύκλοι: Ξαναγράψτε τον κώδικα για να ελαχιστοποιήσετε τα stalls! 11

Scheduled κώδικας του FP Loop 1 Loop: L.D F0,0(R1) 2 stall 3 ADD.D F4,F0,F2 4 SUBI R1,R1,8 5 BNEZ R1,Loop ;delayed branch 6 S.D 8(R1),F4 ;altered when move past SUBI Αλλαγή θέσεων των BNEZ και αλλάζοντας την διεύθυνση του Instruction Instruction Latency in producing result using result clock cycles FP ALU op Another FP ALU op 3 FP ALU op Store double 2 Load double FP ALU op 1 6 clocks: Unroll loop 4 times to make code faster? 12

Ιδέα : Loop Unrolling while (R1 > 0) { M[R1] = M[R1] + F2; R1 -= 8 } while (R1 >= 4*8) { M[R1] = M[R1] + F2; M[R1-8] = M[R1-8] + F2; M[R1-16] = M[R1-16] + F2; M[R1-24] = M[R1-24] + F2; R1 -= 4*8 } while (R1 > 0) { M[R1] = M[R1] + F2; R1 -= 8 } Μη εξαρτόµενες εντολές µέσα στο Loop. Καλές προοπτικές για scheduling. 13

Unroll Loop 4 φορές: Που έχουµε name dependencies; 1 Loop:L.D F0,0(R1) 2 ADD.D F4,F0,F2 3 S.D 0(R1),F4 ;drop SUBI & BNEZ 4 L.D F0,-8(R1) 5 ADD.D F4,F0,F2 6 S.D -8(R1),F4 ;drop SUBI & BNEZ 7 L.D F0,-16(R1) 8 ADD.D F4,F0,F2 9 S.D -16(R1),F4 ;drop SUBI & BNEZ 10 L.D F0,-24(R1) 11 ADD.D F4,F0,F2 12 S.D -24(R1),F4 13 SUBI R1,R1,#32 ;alter to 4*8 14 BNEZ R1,LOOP 15 NOP 14

Unroll Loop 4 φορές: Που έχουµε name dependencies; 1 Loop:L.D F0,0(R1) 2 ADD.D F4,F0,F2 3 S.D 0(R1),F4 ;drop SUBI & BNEZ 4 L.D F0,-8(R1) 5 ADD.D F4,F0,F2 6 S.D -8(R1),F4 ;drop SUBI & BNEZ 7 L.D F0,-16(R1) 8 ADD.D F4,F0,F2 9 S.D -16(R1),F4 ;drop SUBI & BNEZ 10 L.D F0,-24(R1) 11 ADD.D F4,F0,F2 12 S.D -24(R1),F4 13 SUBI R1,R1,#32 ;alter to 4*8 14 BNEZ R1,LOOP 15 NOP Πώς εξαφανίζονται; 15

Που είναι τώρα; 1 Loop:L.D F0,0(R1) 2 ADD.D F4,F0,F2 3 S.D 0(R1),F4 ;drop SUBI & BNEZ 4 L.D F6,-8(R1) 5 ADD.D F8,F6,F2 6 S.D -8(R1),F8 ;drop SUBI & BNEZ 7 L.D F10,-16(R1) 8 ADD.D F12,F10,F2 9 S.D -16(R1),F12 ;drop SUBI & BNEZ 10 L.D F14,-24(R1) 11 ADD.D F16,F14,F2 12 S.D -24(R1),F16 13 SUBI R1,R1,#32 ;alter to 4*8 14 BNEZ R1,LOOP 15 NOP register renaming εξαφάνισε WAR/WAW stalls 16

Unroll Loop 4 φορές eliminates overhead instructions, but increases code size 1 Loop:L.D F0,0(R1) 2 ADD.D F4,F0,F2 1 cycle stall 2 cycles stall 3 S.D 0(R1),F4 ;drop SUBI & BNEZ 4 L.D F6,-8(R1) 5 ADD.D F8,F6,F2 6 S.D -8(R1),F8 ;drop SUBI & BNEZ 7 L.D F10,-16(R1) 8 ADD.D F12,F10,F2 9 S.D -16(R1),F12 ;drop SUBI & BNEZ 10 L.D F14,-24(R1) 11 ADD.D F16,F14,F2 12 S.D -24(R1),F16 13 SUBI R1,R1,#32 ;alter to 4*8 14 BNEZ R1,LOOP 15 NOP Rewrite loop to minimize stalls? 15 + 4 x (1+2) = 27 clock cycles, or 6.8 per iteration 17 Assumes R1 is multiple of 4

Schedule Unrolled Loop 1 Loop:L.D F0,0(R1) 2 L.D F6,-8(R1) 3 L.D F10,-16(R1) 4 L.D F14,-24(R1) 5 ADD.D F4,F0,F2 6 ADD.D F8,F6,F2 7 ADD.D F12,F10,F2 8 ADD.D F16,F14,F2 9 S.D 0(R1),F4 10 S.D -8(R1),F8 11 S.D -16(R1),F12 12 SUBI R1,R1,#32 13 BNEZ R1,LOOP 14 S.D 8(R1),F16 ; 8-32 = -24 14 clock cycles, or 3.5 per iteration Τι υποθέσεις έγιναν κατά την µετακίνηση του κώδικά; OK to move store past SUBI even though changes register OK to move loads before stores/add: get right data? When is it safe for compiler to do such changes? 18

Compiler Perspectives on Code Movement Name Dependencies είναι δύσκολο να διαγνωστούν για Memory Accesses Είναι 100(R4) = 20(R6)? Για διαφορετικές επαναλήψεις του loop, είναι 20(R6) = 20(R6)? Στο παράδειγµά µας ο compiler πρέπει να καταλάβει ότι όταν το R1 δεν αλλάζει τότε: 0(R1) ¹ -8(R1) ¹ -16(R1) ¹ -24(R1) There were no dependencies between some loads and stores so they could be moved by each other 19

Πότε είναι ασφαλές να κάνουµε Unroll ένα Loop? Παράδειγµα: Που είναι οι εξαρτήσεις? (A,B,C distinct & nonoverlapping) for (i=0; i<100; i=i+1) { A[i+1] = A[i] + C[i]; /* S1 */ B[i+1] = B[i] + A[i+1]; /* S2 */ } 1. S2 uses the value, A[i+1], computed by S1 in the same iteration. 2. S1 uses a value computed by S1 in an earlier iteration, since iteration i computes A[i+1] which is read in iteration i+1. The same is true of S2 for B[i] and B[i+1]. Αυτή η εξάρτηση (µεταξύ επαναλήψεων) ονοµάζεται loop-carried dependence For our prior example, each iteration was distinct Dependences in the above example force successive iterations of this loop to execute in series. Implies that iterations can t be executed in parallel, Right?? 20

loop-carried dependence σηµαίνει ότι δεν υπάρχει παραλληλισµός; Παράδειγµα: for (i=0; i<100; i=i+1) { A[i] = A[i] + B[i]; /* S1 */ B[i+1] = C[i] + D[i]; /* S2 */ } S1 χρησιµοποιεί τιµή του Β[i] υπολογισµένη σε προηγούµενη επανάληψη (loop-carried depedence). Όµως δεν υπάρχει άλλη εξάρτηση. Άρα η παραπάνω εξάρτηση δεν είναι κυκλική (circular). Εποµένως το loop είναι παράλληλο. Α[0] = Α[0] + Β[0] B[1] = C[0] + D[0] Α[1] = Α[1] + Β[1] B[2] = C[1] + D[1] Α[2] = Α[2] + Β[2] B[3] = C[2] + D[2]... Α[0] = Α[0] + Β[0] B[1] = C[0] + D[0] Α[1] = Α[1] + Β[1] B[2] = C[1] + D[1] Α[2] = Α[2] + Β[2] B[3] = C[2] + D[2]... 21

loop-carried dependence σηµαίνει ότι δεν υπάρχει παραλληλισµός; Παράδειγµα: for (i=0; i<100; i=i+1) { A[i] = A[i] + B[i]; /* S1 */ B[i+1] = C[i] + D[i]; /* S2 */ } Α[0] = Α[0] + Β[0]; /* start-up code*/ for (i=0; i<99; i=i+1) { B[i+1] = C[i] + D[i]; /* S2 */ A[i+1] = A[i+1] + B[i+1]; /* S1 */ } B[100] = B[99] + D[99]; /* clean-up code*/ 22

Recurrence Depedence Distance Παράδειγµα: for (i=1; i< 100; i=i+1) { Y[i] = Y[i-1] + Y[i]; } loop-carried εξάρτηση σε µορφή recurrence. Παράδειγµα: for (i=5; i< 100; i=i+1) { Y[i] = Y[i-5] + Y[i]; } Η επανάληψη i εξαρτάται από την i-5, δηλαδή έχει dependence distance 5. Όσο µεγαλύτερη η απόσταση τόσο περισσότερο πιθανό παραλληλισµό µπορούµε να πετύχουµε. 23

Άλλη εκδοχή: Software Pipelining Παρατήρηση: Αν οι επαναλήψεις του loop είναι ανεξάρτητες, τότε µπορούµε να έχουµε περισσότερο ILP εκτελώντας εντολές από διαφορετικές επαναλήψεις. Software pipelining: reorganizes loops so that each iteration is made from instructions chosen from different iterations of the original loop without loop unrolling ( Tomasulo in SW) Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 Softwarepipelined iteration 24

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 25

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 26

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 27

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 28

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 29

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 30

Software Pipelining: Παράδειγµα Iteration 0 Iteration 1 Iteration 2 Iteration 3 Iteration 4 F0,0(R1) start-up code F0,-8(R1) 0(R1),F4 F0,-16(R1) -8(R1),F4 F0,-24(R1) -16(R1),F4 F0,-32(R1) -24(R1),F4 finish-up code -32(R1),F4 31

Software Pipelining: Παράδειγµα Πριν: Unrolled 3 times 1 L.D F0,0(R1) 2 ADD.D F4,F0,F2 3 S.D 0(R1),F4 4 L.D F6,-8(R1) 5 ADD.D F8,F6,F2 6 S.D -8(R1),F8 7 L.D F10,-16(R1) 8 ADD.D F12,F10,F2 9 S.D -16(R1),F12 10 SUBI R1,R1,#24 11 BNEZ R1,LOOP Μετά: Software Pipelined 1 S.D 0(R1),F4 ; Stores M[i] 2 ADD.D F4,F0,F2 ; Adds to M[i-1] 3 L.D F0,-16(R1); Loads M[i-2] 4 SUBI R1,R1,#8 ; i = i - 1 5 BNEZ R1,LOOP 5 cycles per iteration Τα RAW hazards µετατρέπονται σε WAR hazards. 32

Software Pipelining vs Loop Unrolling Symbolic Loop Unrolling Ø Ø Maximize result-use distance Less code space than unrolling But.. Harder to implement Execution of SUB & BNEZ in every iteration 33