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

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

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

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

CS425 Computer Systems Architecture

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

CS-425 Mid-term exam

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

CS425 Computer Systems Architecture

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

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

(Branch Prediction Mechanisms)

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

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

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

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

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

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

Pipelined Datapath, Hazards and Forwarding

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

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

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

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

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

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

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

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

Instruction Execution Times

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

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

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

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

Παράλληλα Συστήματα. Γιώργος Δημητρίου. Ενότητα 2 η : Στοιχεία Αρχιτεκτονικής Υπολογιστών. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

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

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

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

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

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

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

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

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

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

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

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

EE512: Error Control Coding

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

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

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

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

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

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

Κεφάλαιο 6 Βελτίωση Απόδοσης με Διασωλήνωση (Enhancing Performance with Pipelining)

The challenges of non-stable predicates

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Κεφ. 4: Ο επεξεργαστής 1. Διάδρομος δεδομένων και μονάδα ελέγχου 2.

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

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

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

Modbus basic setup notes for IO-Link AL1xxx Master Block

Κεντρική Μονάδα Επεξεργασίας

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

Section 9.2 Polar Equations and Graphs

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

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

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

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

Single Cycle Datapath. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

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

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

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

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) Στατικές (shoftware/compiler) Loop Unrolling Software Pipelining Trace Scheduling

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

Tomasulo Organization From Mem FP Op Queue Load Buffers Load1 Load2 Load3 Load4 Load5 Load6 FP Registers Store Buffers Add1 Add2 Add3 Mult1 Mult2 FP adders Reservation Stations FP multipliers To Mem Common Data Bus (CDB)

Dest Reg Result Exceptions? Valid Program Counter Reorder buffer (ROB) FP Op Queue Reorder Buffer FP Regs Reorder Table Res Stations FP Adder Res Stations FP Adder

eqntott espresso gcc li doduc nasa7 ora spice2g6 su2cor tomcatv R4000 Performance Μη ιδανικό CPI : 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) 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 Base Load stalls Branch stalls FP result stalls FP structural stalls

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

Εξαρτήσεις Μεταξύ Εντολών (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ο παράδειγμα.

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

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 ;delayed branch 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?

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 ;delayed branch 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?

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 και SD αλλάζοντας την διεύθυνση του SD 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?

Ιδέα : 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.

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

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 Πώς εξαφανίζονται;

Που είναι τώρα; 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

1 Loop: LD F0,0(R1) 2 ADDD F4,F0,F2 Unroll Loop 4 φορές 1 cycle stall 2 cycles stall 3 SD 0(R1),F4 ;drop SUBI & BNEZ 4 LD F6,-8(R1) 5 ADDD F8,F6,F2 6 SD -8(R1),F8 ;drop SUBI & BNEZ 7 LD F10,-16(R1) 8 ADDD F12,F10,F2 9 SD -16(R1),F12 ;drop SUBI & BNEZ 10 LD F14,-24(R1) 11 ADDD F16,F14,F2 12 SD -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 Assumes R1 is multiple of 4

Schedule Unrolled Loop 1 Loop: LD F0,0(R1) 2 LD F6,-8(R1) 3 LD F10,-16(R1) 4 LD F14,-24(R1) 5 ADDD F4,F0,F2 6 ADDD F8,F6,F2 7 ADDD F12,F10,F2 8 ADDD F16,F14,F2 9 SD 0(R1),F4 10 SD -8(R1),F8 11 SD -16(R1),F12 12 SUBI R1,R1,#32 13 BNEZ R1,LOOP 14 SD 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?

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

Πότε είναι ασφαλές να κάνουμε 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 Implies that iterations can t be executed in parallel, Right??

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]...

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]; /* S1 */ A[i+1] = A[i+1] + B[i+1]; /* S2 */ } B[100] = B[99] + D[99]; /* clean-up code*/

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

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

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

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 5 BNEZ R1,LOOP 5 cycles per iteration Τα RAW hazards μετατρέπονται σε WAR hazards.

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