Branch Prediction Mechanisms cslabntua 2018 2019 1 CPI
Μέθοδοι Πρόβλεψης Διακλαδώσεων (Branch Prediction Mechanisms) cslab@ntua 2018 -2019 1
Τεχνικές βελτίωσης του CPI Pipeline CPI = υπερβαθμωτή εκτέλεση Ideal pipeline CPI + register renaming δυναμική εκτέλεση loop unrolling static scheduling, software pipelining cslab@ntua 2018 -2019 προώθηση Structural Stalls + Data Hazard Stalls + Control Stalls υποθετική εκτέλεση delayed branches, branch πρόβλεψη scheduling διακλαδώσεων 3
Τεχνικές Αντιμετώπισης Control Dependencies • • • Stall the pipeline Κάνε κάτι χρήσιμο (branch delay slots) Διαγραφή control-flow instructions (predicated execution) Κάνε κάτι άλλο (fine-grained multithreading) Κάνε τα όλα (multipath execution) Πρόβλεψη cslab@ntua 2018 -2019 4
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0 Απόφαση (108): T cslab@ntua 2018 -2019 10
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0 TTTT. . . . TTTΤ 100000 Απόφαση (108): T TTTT. . . . TTTN cslab@ntua 2018 -2019 11
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0 TTTT. . . . TTTΤ N 100000 Απόφαση (108): T TTTT. . . . TTTN T cslab@ntua 2018 -2019 12
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); Misprediction = 2/100000 0 x 150: if( (i & 1) == 1) call. B( ); Prediction Rate = 99. 998% } Πρόβλεψη (108): 0 TTTT. . . . TTTΤ NTTTT. . . . TTTΤ 100000 Απόφαση (108): T TTTTTTTT. . . . TTTN cslab@ntua 2018 -2019 13
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); DIV MFHI BNEZ JMP R 2, #100 R 1, 0 x 150 FUNA } Πρόβλεψη (144): 0 Απόφαση (144): N cslab@ntua 2018 -2019 14
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); DIV MFHI BNEZ JMP R 2, #100 R 1, 0 x 150 FUNA } Πρόβλεψη (144): 0 NTTTTTTT. . . . TTTΤ 100 Απόφαση (144): NTTTT. . . . TTTN cslab@ntua 2018 -2019 15
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); DIV MFHI BNEZ JMP R 2, #100 R 1, 0 x 150 FUNA } Πρόβλεψη (144): 0 NTTTTTTT. . . . TTTΤ N 100 Απόφαση (144): NTTTT. . . . TTTN T cslab@ntua 2018 -2019 16
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); Misprediction = 2/100 0 x 150: if( (i & 1) == 1) call. B( ); Prediction Rate = 98% } Πρόβλεψη (144): 0 NTTTTTTT. . . . TTTΤ NTTTT. . . . TTTΤ 100 Απόφαση (144): NTTTT. . . . TTTN T TTTT. . . . TTTN cslab@ntua 2018 -2019 17
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: 0 x 150: if( ( i % 100) == 0 ) call. A( ); if( (i & 1) == 1) call. B( ); } AND SUB BNEZ JMP R 1, R 2, #1 R 1, ENDLOOP FUNB Πρόβλεψη (150): 0 Απόφαση (150): T cslab@ntua 2018 -2019 18
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: 0 x 150: if( ( i % 100) == 0 ) call. A( ); if( (i & 1) == 1) call. B( ); } AND SUB BNEZ JMP R 1, R 2, #1 R 1, ENDLOOP FUNB Πρόβλεψη (150): 0 T Απόφαση (150): T N cslab@ntua 2018 -2019 19
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: 0 x 150: if( ( i % 100) == 0 ) call. A( ); if( (i & 1) == 1) call. B( ); } AND SUB BNEZ JMP R 1, R 2, #1 R 1, ENDLOOP FUNB Πρόβλεψη (150): 0 T N Απόφαση (150): T N T cslab@ntua 2018 -2019 20
Παράδειγμα 1 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); Misprediction = 1/1 0 x 150: if( (i & 1) == 1) call. B( ); Prediction Rate = 0% } Πρόβλεψη (150): 0 T N T N T N Απόφαση (150): T N T N T N T cslab@ntua 2018 -2019 21
Δυναμικές Τεχνικές Πρόβλεψης • 2 -bit predictor cslab@ntua 2018 -2019 22
Παράδειγμα 2 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0, 1: Predict Not Taken 2, 3: Predict Taken 1 Απόφαση (108): T cslab@ntua 2018 -2019 23
Παράδειγμα 2 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0, 1: Predict Not Taken 2, 3: Predict Taken 1 23333333. . . . 3333 100000 Απόφαση (108): T TTTT. . . . TTTN cslab@ntua 2018 -2019 24
Παράδειγμα 2 -bit predictor 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0, 1: Predict Not Taken 2, 3: Predict Taken 1 23333333. . . . 3333 2 100000 Απόφαση (108): T TTTT. . . . TTTN T cslab@ntua 2018 -2019 25
Παράδειγμα 2 -bit predictor Misprediction ~= 1 per N branches 0 x 108: for(i=0; i < 100000; i++) {. . . 0 x 144: if( ( i % 100) == 0 ) call. A( ); 0 x 150: if( (i & 1) == 1) call. B( ); } Πρόβλεψη (108): 0 x 108 Prediction Rate = 99. 999% 0 x 144 Prediction Rate = 99% 0 x 150 Prediction Rate = 50% 0, 1: Predict Not Taken 2, 3: Predict Taken 1 23333333. . . . 3333 2 3333. . . . 3333 100000 Απόφαση (108): T TTTTTTTT. . . . TTTN cslab@ntua 2018 -2019 26
Παράδειγμα if (aa==2) aa = 0; if (bb == 2) bb = 0; if (aa != bb) {. . . } b 1 1 (T) 0 (NT) b 2 1 b 3 aa bb 0 1 0 b 3 b 3 aa bb BNEZ R 3, L 1 ; branch b 1 (aa!=2) DADD R 1, R 0 ; aa=0 L 1: DADDIU R 3, R 2, #-2 BNEZ R 3, L 2 ; branch b 2 (bb!=2) DADD R 2, R 0 ; bb=0 R 3, R 1, R 2 ; R 3=aa-bb R 3, L 3 ; branch b 3 (aa==bb) L 2: DSUBU b 2 Path: 1 -1 1 -0 0 -1 DADDIU R 3, R 1, #-2 BEQZ 0 -0 aa bb Αν b 1 και b 2 NT (Not Taken) τότε b 3 T (Taken) ! cslab@ntua 2018 -2019 30
Global-History Two-Level Predictor • (2, 2) predictor • 64 entries • 4 low order bits PC • 2 bits global history cslab@ntua 2018 -2019 32
Σύγκριση • (0, 2) predictor με 4096 εγγραφές (8 K bits) vs • (2, 2) predictor με 1024 εγγραφές (8Κ bits) cslab@ntua 2018 -2019 33
Local-History Two-Level Predictor • BHT – 8 εγγραφές – 3 -bit ιστορία • PHT – 128 εγγραφές – 2 -bit predictors cslab@ntua 2018 -2019 35
Παράδειγμα: Alpha 21264 • Meta-predictor – 4 K εγγραφές – κάθε εγγραφή είναι ένας 2 -bit predictor – προσπέλαση με βάση το PC της εντολής διακλάδωσης • Pred 0 : Local-history two-level predictor – BHT: 1 K 10 -bit εγγραφές – PHT: 1 K 3 -bit predictors • Pred 1 : Global-history two-level predictor – PHT: 4 K 2 -bit predictors • Σύνολο : 29Κ bits • SPECfp 95 : misprediction = 1 / 1000 instructions • SPECint 95 : misprediction = 11. 5/1000 instructions cslab@ntua 2018 -2019 38
Branch-Target Buffer cslab@ntua 2018 -2019 42
Χρήση ΒΤΒ cslab@ntua 2018 -2019 43
Return Address Stack (RAS) cslab@ntua 2018 -2019 46
- Slides: 46