Practical Programming of FPGAs with Open Source Tools
This project has evolved from the Practical programming of FPGAs in the data center and on the edge project. Please see that project page for the additional details.
As artificial intelligence and the collection and processing of vast amounts of data continue to revolutionize every aspect of technology, data centers are moving from being “compute-centric” to “data-centric”; from processing data in place, to “compute everywhere” — whether data is stationary (in memory) or on the move (in network). A type of computing device known as the Field Programmable Gate Array (FPGA) is integral to this transformation: FPGAs are simultaneously communication and computation devices. They are also reconfigurable: rather than fitting the application to the hardware, the hardware is modified to best run the application. Currently, however, programming FPGAs requires particular expertise not present with most programmers. In this project we are augmenting common software development tools with machine learning capability so that the tool can learn to transform ordinary programs into high-quality FPGA configurations.
Project Team
Principal Investigator: Martin Herbordt
Red Hat Collaborators: Uli Drepper and Ahmed Sanaullah
PhD Students: Robert Munafo, Hafsah Shahzad, Reza Sajjadi
Undergraduate students: Xiteng Yao, BSEE
Repositories
- Dataflow Evaluator: predicts code performance from dataflow graph: https://github.com/mrob27/hls
- GCC Pass Ordering Interface: modification to GCC compiler to support valid pass reorderings: github.com/mrob27/gcc-reorder
- Preoptimization code fingerprinting: Using syntax trees to create a fixed vector encoding: github.com/mrob27/gcc-ast-print
- An Open Source High Level Synthesis Tool Chain: Advanced Compatibility: github.com/mrob27/panda
- AnnotationGym: Aiding Target Compiler to Increase Performance Potential through Simple Code Annotations: https://github.com/HafsahShahzad/AnnotationGym
- Smith_waterman AVX implementation and Compiler tuning: https://github.com/RS9977/Smith-Waterman-SWAVX
- Gimple (GCC intermediate representation) encoding using GNN: https://github.com/TreeinRandomForest/gnnexamples/tree/main/gnn
Presentations
- Enhancing Programmable Hardware Capability and Usability across HPC, Cloud, and Edge,” NSF IUCRC: i-Scale Planning Workshop; Boston, MA; March 21, 2023
- “Practical Programming of FPGAs with Open-Source Tools: Optimizing High-level Synthesis Using Machine Learning”; Red Hat Student Research Project Presentation, November 2022
- H2RC Workshop at SC22 The Eighth Workshop on Heterogeneous High-performance Reconfigurable Computing, November 2022
- LLVM-HPC Workshop at SC22, “The Eighth Workshop on the LLVM Compiler Infrastructure in HPC (LLVM-HPC),” November 2022
- Reinforcement Learning Based Compiler Tuning for Custom Hardware Generation,” Red Hat DevConf., August 2022
- DISL: Dynamic Infrastructure Services Layer for Reconfigurable Hardware,” Red Hat DevConf., August 2022
- FPGAs Everywhere in Large Scale Computer Systems,” International Supercomputing Conference; Hamburg, Germany, May 2022
Posters
- “Optimizing Custom Hardware Generation for FPGA Using Machine Learning,” UROP Research Presentation, Boston University, October 20, 2022.
Project Poster