I. Introduction
High performance computing (HPC) applications, runtimes, and platforms have become highly configurable. The high configurability enables applications to extract maximal performance. Unfortunately, for users, the same configurability has led to an increasingly large combinatorial search space of application-specific as well as platform-level parameters. These configurable parameters can be compiler flags, runtime system settings, application-specific parameters, hardware-level options etc. A particular choice of values for all the parameters, often called a configuration, can significantly impact various application performance metrics, such as execution time, power consumption, and system throughput among other things.