wormhole branch prediction using multi dimensional
play

Wormhole branch prediction using multi-dimensional histories Jorge - PowerPoint PPT Presentation

Wormhole branch prediction using multi-dimensional histories Jorge Albericio, Joshua San Miguel , Natalie Enright Jerger, and Andreas Moshovos 2 Motivation foreach frame: foreach object: if distance( object , p ) < threshold: { /* do


  1. Wormhole branch prediction using multi-dimensional histories Jorge Albericio, Joshua San Miguel , 
 Natalie Enright Jerger, and Andreas Moshovos

  2. 2

  3. Motivation foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 3

  4. Motivation foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 3

  5. Motivation foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 3

  6. Motivation foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 3

  7. Multidimensional histories 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  8. Multidimensional histories 0 1 2 3 4 0 1 2 3 4 0 1 2 3 t t t t t t t t t t t t t t c c c c c c c c c c c c c c e e e e e e e e e e e e e e j j j j j j j j j j j j j j b b b b b b b b b b b b b b O O O O O O O O O O O O O O 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  9. Multidimensional histories 0 1 2 3 4 0 1 2 3 4 0 1 2 3 t t t t t t t t t t t t t t c c c c c c c c c c c c c c e e e e e e e e e e e e e e j j j j j j j j j j j j j j b b b b b b b b b b b b b b O O O O O O O O O O O O O O 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 Frame 0 Frame 1 Frame 2 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  10. Multidimensional histories 0 1 2 3 4 0 1 2 3 4 0 1 2 3 t t t t t t t t t t t t t t c c c c c c c c c c c c c c e e e e e e e e e e e e e e j j j j j j j j j j j j j j b b b b b b b b b b b b b b O O O O O O O O O O O O O O 1 0 1 0 0 1 0 1 0 0 1 0 1 0 ? 0 Frame 0 Frame 1 Frame 2 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  11. Multidimensional histories 0 1 2 3 4 0 1 2 3 4 0 1 2 3 t t t t t t t t t t t t t t c c c c c c c c c c c c c c e e e e e e e e e e e e e e j j j j j j j j j j j j j j b b b b b b b b b b b b b b O O O O O O O O O O O O O O 1 0 1 0 0 1 0 1 0 0 1 0 1 0 ? 0 Frame 0 Frame 1 Frame 2 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  12. Multidimensional histories 0 1 2 3 4 0 1 2 3 4 0 1 2 3 t t t t t t t t t t t t t t c c c c c c c c c c c c c c e e e e e e e e e e e e e e j j j j j j j j j j j j j j b b b b b b b b b b b b b b O O O O O O O O O O O O O O 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 Frame 0 Frame 1 Frame 2 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  13. Multidimensional histories 0 1 2 3 4 t t t t t c c c c c e e e e e j j j j j b b b b b O O O O O 1 0 1 0 0 Frames 1 0 1 0 0 1 0 1 0 0 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  14. Multidimensional histories 0 1 2 3 4 t t t t t c c c c c e e e e e j j j j j b b b b b O O O O O 1 0 1 0 0 Frames 1 0 1 0 0 1 0 1 0 0 foreach frame: foreach object: if distance( object , p ) < threshold: { /* do something */ } 4

  15. Summary • Wormhole predictor : 
 ISL-TAGE Side-predictor on top of Wormhole ISL-TAGE pred. • Able to capture columns, diagonals, and other patterns predictions • 3.995 , 2.498 , and 2.014 MPKI in the 4KB, 32KB, and unlimited competition tracks 5

  16. Detecting diagonals for j in N: for k in N: if j != k: /*Calculation*/ 6

  17. Detecting diagonals for j in N: for k in N: if j != k: /*Calculation*/ 6

  18. Detecting diagonals for j in N: for k in N: if j != k: /*Calculation*/ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 6

  19. Detecting diagonals for j in N: for k in N: if j != k: /*Calculation*/ 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 j=0 j=1 j=2 6

  20. Detecting diagonals 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 j=0 j=1 j=2 for j in N: //Loop 1 for k in N: //Loop 2 if j != k: /*Calculation*/ 7

  21. Detecting diagonals Inner loop (k) Iterations 1 0 0 0 0 0 0 Outer loop (j) 0 1 0 0 0 0 0 Iterations 0 0 1 0 0 0 0 for j in N: //Loop 1 for k in N: //Loop 2 if j != k: /*Calculation*/ 7

  22. Multidimensional histories 1 0 0 0 0 0 0 Outer loop (j) 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  23. Multidimensional histories 1 0 0 0 0 0 0 Outer loop (j) ? 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  24. Multidimensional histories Saturating counters 1 0 0 0 0 0 0 Outer loop (j) ? 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  25. Multidimensional histories Saturating counters 1 0 1 0 0 0 0 0 0 0 Outer loop (j) ? 0 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  26. Multidimensional histories Saturating counters 0100 x 1 0 1 0 0 0 0 0 0 0 Outer loop (j) ? 0 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  27. Multidimensional histories Saturating counters 0100 x 1 0 1 0 0 0 0 0 0 0 Outer loop (j) 1 ? 0 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  28. Multidimensional histories Saturating counters 0100 x 1 1 0 1 0 0 0 0 0 0 0 Outer loop (j) 1 ? 0 0 1 0 0 0 0 0 Iterations Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 8

  29. Multidimensional histories Saturating counters x 1 0 1 0 0 0 0 0 0 Outer loop (j) 0 0 0 0 1 0 0 0 Iterations 0 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  30. Multidimensional histories Saturating counters x 1 0 1 0 0 0 0 0 0 Outer loop (j) 0 0 0 0 1 0 0 0 Iterations 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  31. Multidimensional histories Saturating counters x 1 0 1 0 0 0 0 0 0 Outer loop (j) 1 0 0 0 0 0 0 1 0 0 0 Iterations 0 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  32. Multidimensional histories Saturating counters 0100 x 1 0 1 0 0 0 0 0 0 Outer loop (j) 1 0 0 0 0 0 0 1 0 0 0 Iterations 0 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  33. Multidimensional histories Saturating counters 0100 x 1 Prediction: 1 0 1 0 0 0 0 0 0 Outer loop (j) 1 0 0 0 0 0 0 1 0 0 0 Iterations 0 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  34. Multidimensional histories Saturating counters 0100 x 1 Prediction: 1 0 1 0 0 0 0 0 0 Outer loop (j) 1 0 0 0 0 0 0 1 0 0 0 Iterations 1 0 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  35. Multidimensional histories Saturating counters 0100 x 1 Prediction: 1 0 1 0 0 0 0 0 0 Outer loop (j) 1 0 0 0 0 0 0 1 0 0 0 Iterations 1 0 0 ? 0 0 1 0 0 0 Inner loop (k) for j in N: Iterations for k in N: if j != k: /*Calculation*/ 9

  36. Wormhole predictor and ISL-TAGE • On top of ISL-TAGE 
 ISL-TAGE (Best performer from last CBP) Loop Wormhole tagged pred. pred. comp. bimodal • TAGE: bimodal + tagged Stat. pred. corr. • Statistical corrector predictions • Loop predictor 10

  37. Wormhole predictor and ISL-TAGE • On top of ISL-TAGE 
 ISL-TAGE (Best performer from last CBP) Loop Wormhole tagged pred. pred. comp. bimodal • TAGE: bimodal + tagged Stat. pred. corr. • Statistical corrector predictions • Loop predictor Detect difficult branches 10

  38. Wormhole predictor and ISL-TAGE • On top of ISL-TAGE 
 ISL-TAGE (Best performer from last CBP) Loop Wormhole tagged pred. pred. comp. bimodal • TAGE: bimodal + tagged Stat. pred. corr. • Statistical corrector predictions • Loop predictor Detect difficult branches Loop dimensionality 10

Recommend


More recommend