the design of user-schedulable languages so that decades of wisdom from traditional programming languages can be brought to bear. The key insight underlying it all is the idea that, instead… Click to show full abstract
the design of user-schedulable languages so that decades of wisdom from traditional programming languages can be brought to bear. The key insight underlying it all is the idea that, instead of implementing schedules as parameters on a monolithic lowering from highto low-level code, user-guided optimizations can instead be implemented as rewrites within a single (functional) language. Adding new types of optimization to prior user-schedulable languages requires extending the compiler’s core lowering process, and worrying about the potential interaction of the new feature with every other—an often herculean task. Rewrites, in contrast, are naturally composable, extensible, and easy to reason about: the definition and correctness of each new rewrite is independent of all the others. Building on this, the authors show how classic ideas from functional programming can then directly be applied to abstract and compose rewrites into higher-level rewriting strategies. In contrast to earlier scheduling languages, we now have a way to specify optimizations and build high-performance libraries at ever-higher levels of abstraction. What is the result? Using this approach, the authors finally show that it’s possible to describe the same optimizations as state-of-the-art userschedulable languages, and achieve the same blistering performance, using no complex domain-specific schedule compiler, just rich compositions of simple, extensible rewrites. By finally putting user-schedulable languages on solid PL foundations, this is a big step towards making high-performance programming easy, productive, and safe.
               
Click one of the above tabs to view related content.