Research Overview

Themes

Projects

Whitepaper

Illinois Impact

 

 

 

Parallel at Illinois

Translation Environment

Principal Investigators: Vikram Adve, Matt Frank, María Garzarán, Wen-mei Hwu, David Padua


The Illinois UPCRC compiler infrastructure sits between the disciplined parallel programming languages and frameworks research discussed earlier and the runtime system and hardware architecture described later. The requirements and systems views presented by these two interfaces differ, and it is the responsibility of the compiler to translate between the two interfaces. The challenge, and opportunity, is to make use of the new information available from these two interfaces to find more parallelism, improve cache locality, reduce runtime overheads, and assist programmers in porting existing sequential or parallel codes to the new programming models. The runtime system and front-end type system can provide information about code reachability and aliasing relationships that static compiler analyses cannot otherwise derive.

We are basing the new dynamic compilation infrastructure on the existing open-source LLVM compiler infrastructure. We are designing a new program dependence graph (PDG) based internal representation to support static and dynamic analysis and transformations. On this internal representation, we are implementing a variety of traditional PDG-based loop transformations (strip-mining, interchange, unswitching, scalar expansion, distribution, reassociation, fusion), together with a range of interprocedural program analyses (pointer analysis, escape analysis, dependence analysis). These techniques are useful for a variety of purposes: extracting parallelism from loops that are not already fully parallel, extracting sharing information between tasks to optimize parallel performance, and restructuring loops for better memory locality.

We believe that it will be necessary for the transformation engine to leverage information from a wider set of sources than traditional pointer and array alias analyses. In addition to transforming programs to expose more parallelism and to improve locality, the compiler will be responsible for passing information to the runtime software and hardware that can be used for more efficient decisions.