Modern applications, especially those intended to run at exascale (i.e., on machines, that can perform one quintillion floating point operations a second), are not written from scratch. Instead, they are built by stitching together various carefully-written, hand-tuned libraries. Correctly composing these libraries is difficult, but traditional compilers are unable to effectively analyze and transform across abstraction layers. Domain specific compilers integrate semantic knowledge into compilers, allowing them to transform applications that use particular domain-specific languages, or domain libraries. But they do not help when new domains are developed, or applications span multiple domains.
SLEEC aims to fix these problems.
We are building a generic, extensible compiler infrastructure that can incorporate semantic information from domain-specific libraries to enable transformations that leverage domain-specific properties of library methods. Rather than building domain-specific compilers for each domain, our extensible compiler becomes a domain specific compiler for a domain when paired with domain-specific libraries.
The SLEEC vision is based around three key principles:
- Domain-specific information should be conveyed by libraries. Domain semantics are best-understood by the scientists writing the domain libraries, so any semantic information should be provided as part of a library's specification or interface. This information is captured by a general annotation language for expressing library properties.
- Compilers should be domain agnostic. Rather than building ad hoc compiler technology for each domain, we should have a generic compiler infrastructure that can incorporate the semantic knowledge provided by domain libraries. The compiler can then transform programs in that domain without having been explicitly specialized for that domain. This is accomplished with a high level intermediate representation that can be transformed according to annotated library properties.
- Compilers should optimize for multiple objectives. The optimization objective of a compiler should not be performance. Rather, a compiler should be parameterized by the optimization target (performance, energy-efficiency, communication-minimization, etc.). This is tackled through domain-specific cost models and search-based compilation that let domains specify cost estimates across a range of metrics and use that information to drive compilation.
High level overview of SLEEC infrastructure
SLEEC is a joint project between Purdue University and Sandia National Laboratories. The team members are:
- Milind Kulkarni (Lead PI, compilers and runtime systems)
milind 'at' purdue 'dot' edu
- Arun Prakash (domain libraries and applications)
aprakas 'at' purdue 'dot' edu
- Vijay Pai (performance modeling)
vpai 'at' purdue 'dot' edu
- Sam Midkiff (compilers and runtime systems)
smidkiff 'at' purdue 'dot' edu
Sandia National Laboratories
- Michael Parks (domain libraries and applications)
mlparks 'at' sandia 'dot' gov
- Nabeel AlSaber
- Greg Bunting
- Jad Hbeika
- Hasan Jamal
- Payton Lindsay
- Chenyang Liu
SLEEC is funded by the DoE office of Advanced Scientific Computing Research (ASCR) under contract DE-FC02-12ER26104. Dr. Sonia Sachs is the program manager and Dr. William Harrod is the director of the ASCR Research Division.