Research¶
Effective Performance Programming by Re-Connecting Developers and Compilers
My research uses strong theoretical reasoning to bring innovations to real-world compilation and programming language problems. My current objective is to rethink performance programming by re-connecting developers and compilers. Today, performance programming is no longer limited to the optimization of low-level code but often includes the use of domain-specific compilers, constraint programming libraries, complex performance models, and automatic (potentially learned) strategies to search for optimal code transformations.
My primary objectives are:
- making compilation more modular, predictable, automatic, and trustworthy
- bringing open-source compiler innovation to an increasingly broad set of targets from GPUs over FPGAs to custom hardware, and
- breaking down the barriers between compilers and programmers by enabling their interaction via the programming language environment.
I dream of a future where performance programming is an intuitive play between the programmer and the compiler. A game that smoothly moves between manual as well as automatic techniques and works across software and hardware.
I am particularly interested in the following areas:
- Compilers
- Static & dynamic analysis
- Abstract interpretation based program analysis
- Performance and cache models
- Test case generation
- Human-compiler interface
- Domain-specific compilation
- Deep learning
- Climate science
- High-performance computing
- Loop optimization & polyhedral compilation
- Vectorization
- Compilation for accelerators: GPU, FPGA
- Open-source hardware
- Compiler support for RISC-V
- Software/hardware co-design
- SMT and constraint solving
- Mixed integer linear programming
- SAT solving
- Parametric counting using Barvinok’s algorithm
- Automatic theorem proving for compiler verification and constraint solving
- Effective compilation from functional languages to imperative code
- Artificial intelligence for compilers and constraint solvers