ABSTRACT

In Chapter 10, we described a set of features of a practical auto-tuning framework. We consider in this chapter how language and compiler technology can support these features, particularly in the triage process, and in generating alternative implementations of a key computation. Application programmers are typically accustomed to interacting with compilers only through optimization flags, and then observing performance behavior of the resulting code. There is a rich history of compiler technology automatically generating highperformance code that targets specific architectural features, including vector machines, VLIW and superscalar architectures, and effective management of registers. However, the rapid changes and diversity in today’s architectures, along with the complex interactions between different optimization strategies, have made it increasingly difficult for compiler technology to keep pace with application developers’ needs. To enhance the role of compilers in generating high-performance code for high-end applications, we consider in this chapter new compiler technology and interfaces into the compiler that enable a more

collaborative relationship with the application programmer in the autotuning process.