Performance programming is the design, writing, and tuning of programs to sustain near-peak performance. Techniques such as parallelization, localization, load balancing, and overlapping communication with computation can be applied at many levels, from optimizing the inner loops to choreographing data movement between processors. The Performance Programming Group is pursuing the goal of changing performance programming from an art into a science. By hand-tuning specific scientific codes, we gain insight into what methods that are effective. We study what tools can make performance programming easier and to what extent the techniques can be automated.
Architectural support is another concern.
The most elusive goal is finding methods of developing programs that are truly portable and truly high-performance. Compiler Technology Compiler technology provides the necessary interface between programming languages and architectures, and is intimately tied to new developments in both. The group's research focuses on the development of Compiler Technology, with particular interest in exploiting multiple levels of parallelism and optimizing data movement to achieve high performance. Trends in both high level languages and machines have increased the gap between them, making the compiler's job of bridging this gap increasingly more challenging. For example, a major trend in machine architecture is towards a hierarchy of memory and parallelism.