|
Work Culture and Your Role in the Company
Project Description
The goal of the project is to improve the performance of native compilers until they mature to the state of producing high performance executables alone. New hardware architectures demand
new compilers to conform to the ever changing instruction set architecture. However, it can take up to 10 years for a compiler to mature. This project attempts to assist the native compiler
by analyzing resource characteristics of the platform through the lens of the compiler and transform the user's source code into code that performs better when compiled by the native
compiler. For example, if the native compiler cannot do tiling, this software performs the appropriate tiling by considering the cache hierarchy and sizes. Or, if the compiler has poor
register allocation, it does the register allocation and emits code that "fits" the register map of the target platform by explicitly handling the spills and loads.
There are
4 major sections to the compiler: Resource Characterization (RC), Application Aware Partitioner (AAP), Platform Aware Optimizer (PAO), and Target Aware Optimizer (TAO). The job of the RC is
to determine the characteristics of the hardware (i.e., cache sizes, latencies, etc) and the compiler (i.e. effective registers available, loop unrolling capability, polyhedral transformation
capability, etc). The AAP parses the user source code, refactorizes it into coherent units to allow greater optimization opportunities for the underlying compiler. The PAO and TAO consider
each unit separately, whereas the AAP considers the program as a whole. The PAO's job is to do source-to-source transformation at a high level such as loop transformations to address the
hardware platform characteristics. The TAO does low level transformations using the resource characterization of the target compiler such as register allocation, feedback to PAO on ILP and
register pressure, etc. All of these components are designed to interact with each other and provide feedback up and down the chain.
|
Required Knowledge, Skills, and Credentials
- MS in Computer Science or Engineering and 2-5 years in software development, or Ph.D. in Computer Science or Engineering
- Master's thesis or doctoral dissertation in a compiler research topic, or other demonstrable compiler research experience;
background in dynamic compilation is considered a plus
- Demonstrable experience undertaking and succeeding in innovative research projects
- Experience developing software systems using standard software engineering practices
- C/C++ and Linux/Unix experience
- Strong analytical and problem solving skills
- Good written and verbal communication skills
- Ability to work independently to solve difficult problems and implement solutions
-
|