Xiaoming Li, Associate Professor
My research focuses on the development of compiler and code generation techniques. The main objective is to make programs run faster, perform more reliably, and use resources more efficiently on current and future computing architectures. Compiling and code generating can be conceived as a transformation from programs to the form that makes the best use of computing architectures. However, the interaction among architectures, programs and inputs is poorly understood. The emerging faster and more complex architectures are more challenges than solutions for compiler research. If we want to squeeze the last bit of performance from computers, we must respond to two major challenges. First, architectures are increasingly complex. In particular, speculative features blur the picture how a program runs. We are deprived of the luxury to use simple models to formulate the interaction between programs and architectures. We need new methods that can give us insight how programs run in speculative environments. Second, we are asked more and more about the reverse question of compiling - what is the best architecture for a program. The essence of this question is how to co-design software and architecture. It demands methods to figure out program behaviors on versatile platforms. The two challenges are being answered by our research, which includes the study of how to optimize important applications, such as sorting, and how to map programs into efficient architectures, such as FPGA. In particular, we leverage machine-learning technique to dig out optimization opportunities that are not explored before. Our long-term goal is to provide a fundamental understanding of program behaviors, and develop methods that generate efficient code from this understanding.