The focus of my research is in the areas of compilers, optimization and the interaction between compilers and other system software -- in particular virtual machines. It is my view, and one shared by increasing numbers of people, that higher performance of application programs should not be the primary goal of compilers. As Proebsting's Law states: "advances in compiler optimizations double computing power every 18 years.", whereas Moore's law increases performance every 18 months. The goal, as I see it, for many of us in the field of optimizing compilers should be how to use optimizing compiler technology to make easier to use, and safer, programming languages fast enough to be useful -- and not to eke another 3% of performance from Fortran, C++, or even Java.
One area of hardware and programming language design that has always been thought to have definite trade-offs in terms of usability and performance is consistency models. Consistency models define how threads view the ordering of memory operations in other threads, and thereby define the flexibility threads have in reordering their memory optimizations. The common wisdom is that more relaxed models allow significantly more reordering, and thereby allow significantly more opportunities for optimization, and significantly better performance. These differences have never been quantified, however. With the Pensieve Project, we are building the infrastructure to measure these differences for programming language consistency models. Built using the Jikes RVM virtual machine and dynamic compiler infrastructure, our compiler will allow the consistency model for a class to be specified using a programming language, with optimizations honoring the orderings (which can be thought of as dependences or hazards) being maintained by optmiizations within the compiler. With this work we hope to gain insights into the relative costs of different consistency models, and to design appropriate consistency models for an applications performance and safety requirements.
As part of the Pensieve Project, we are also working on automating the generation and optimization of hardware synchronization instructions, whose semantics have been described using the aforementioned memory consistency model.
My group is also beginning to investigate compilation for energy, and new programming language constructs to make it harder to write buggy programs. When our thoughts are better formed on these topics, we will provide more information here.
Return to Sam Midkiff's Home Page