  Scientific software applications are increasingly developed by large
interdiscplinary teams operating on functional modules organized around a
common software framework, which is capable of integrating new functional
capabilities without modifying the core of the framework. In such environment,
software correctness and modularity take precedence at the expense of code
performance, which is an important concern during execution on supercomputing
facilities, where the allocation of core-hours is a valuable resource. To
alleviate the performance problems, we propose automated performance tuning
(autotuning) of software to extract the maximum performance on a given hardware
platform and to enable performance portability across heterogeneous hardware
platforms. The resulting code remains generic without committing to a
particular software stack and yet is compile-time specializable for maximal
sustained performance.
