Modern scientific applications are built out of numerous libraries, spanning a variety of domains. Finding the most efficient way to use and compose the abstractions provided by libraries to solve a problem is a difficult, tedious task. Traditional compilers do not understand library semantics and cannot optimize across abstraction boundaries.
Domain-specific approaches mitigate these issues by incorporating semantic knowledge about domains into languages, compilers and runtimes. This allows properties of domain abstractions to be leveraged when optimizing an application. However, most domain-specific approaches are too
specific: each domain has its own languages and compilers, its own representations of abstractions and its own optimization strategies. This makes it difficult to target applications that span multiple domains, including emerging computational science applications such multi-scale, multi-physics simulations.
What is needed are approaches that allow generic compilers and runtime systems to incorporate domain knowledge without being specialized to a single domain.