numerical program optimization for high level synthesis
play

Numerical Program Optimization for High-Level Synthesis Xitong Gao, - PowerPoint PPT Presentation

Numerical Program Optimization for High-Level Synthesis Xitong Gao, George A. Constantinides xi.gao08@imperial.ac.uk, g.constantinides@imperial.ac.uk Imperial College London Introduction Floating-point operations... are easy to use High


  1. Numerical Program Optimization for High-Level Synthesis Xitong Gao, George A. Constantinides xi.gao08@imperial.ac.uk, g.constantinides@imperial.ac.uk Imperial College London

  2. Introduction Floating-point operations... • are easy to use High dynamic range • are ubiquitous Altera introduced new FPGAs (Arria 10 and Stratix 10) with hardened floating-point DSP elements

  3. Introduction Floating-point operations... • are easy to use High dynamic range • are ubiquitous Altera introduced new FPGAs (Arria 10 and Stratix 10) with hardened floating-point DSP elements However, floating-point operations • use a lot of resources • have round-off errors

  4. Introduction Our tool exploits the rules of equivalence to automatically optimize the structure of numerical programs, for example: • (a + b) + c ≣ a + (b + c) • (a + b) * c ≣ a * b + a * c • and many more Error LUTs

  5. Introduction • Simple transformations GCC / LLVM / Vivado HLS • What about accuracy? -ffast-math

  6. Introduction • Simple transformations GCC / LLVM / Vivado HLS • What about accuracy? -ffast-math • Deep transformations SOAP Arithmetic • Resource usage & Expressions Accuracy!

  7. Introduction • Simple transformations GCC / LLVM / Vivado HLS • What about accuracy? -ffast-math • Deep transformations SOAP Arithmetic • Resource usage & Expressions Accuracy! SOAP2 • Full program Full transformations Programs

  8. Example Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  9. Example Specification float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  10. Example Specification float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  11. Example Specification float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  12. Example Specification float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  13. Example Specification float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); Transform Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  14. Example Specification Error float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); LUTs Transform • Pareto optimal • Pareto suboptimal Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  15. Example Specification Error float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); LUTs • Pareto optimal • Pareto suboptimal Program if (x < 20) { x = x + (y + 500) ; } else { x = (x + y) + 500; }

  16. Example Specification Error float x, y; assume(0 <= x <= 500); assume(err(x) == 0); assume(0 <= y <= 30); assume(err(y) == 0); LUTs • Pareto optimal • Pareto suboptimal Most accurate Program if (x < 20) { if (x < 20) { x = (x + y) + 500; x = x + (y + 500) ; } else { } else { x = x + (y + 500); x = (x + y) + 500; } }

  17. Example Specification Fewest resources but less Error float x, y; accurate assume(0 <= x <= 500); assume(err(x) == 0); x = x + (y + 500); assume(0 <= y <= 30); assume(err(y) == 0); LUTs • Pareto optimal • Pareto suboptimal Most accurate Program if (x < 20) { if (x < 20) { x = (x + y) + 500; x = x + (y + 500) ; } else { } else { x = x + (y + 500); x = (x + y) + 500; } }

  18. Example Specification Fewest resources but Error float x, y; less accurate assume(0 <= x <= 500); assume(err(x) == 0); x = x + (y + 500); assume(0 <= y <= 30); assume(err(y) == 0); Fewest resources but more accurate LUTs x = (x + y) + 500; • Pareto optimal • Pareto suboptimal Most accurate Program if (x < 20) { if (x < 20) { x = (x + y) + 500; x = x + (y + 500) ; } else { } else { x = x + (y + 500); x = (x + y) + 500; } }

  19. And there is more... There are a lot of things we did not cover: • how we do that a more complex example program • work flow how it fits in the traditional HLS work flow • results ~60% better accuracy All of these above are in the poster!

  20. Thank you! Join us in the poster session

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend