Application Autotuning and Autonomic Computing

A large class of applications expose several software-knobs that alter extra-functional properties of the elaboration ( e.g. execution time or resource usage) and of the output (e.g. size of the result or its accuracy). A change on the configuration of those knobs, may lead to drastic changes in the value of the properties of interest for the end user. In fact, application requirements involve several properties that are usually in contrast with each others. For example, in the context of a video surveillance scenario, the end-user would like to minimize the energy consumption, given a constraint on a minimum level of quality of the output and a lower bound on the frame per second processed by the application. While in the context of an HPC application, the end-user would like to maximize the quality of results, with a constraint on the time to solution, for a given input set. Since the extra-functional properties depends on the underlying architecture and on the evolution of the system, finding a one-fits-all configuration is not a trivial task. For instance, the resources allocated to the application might change due to workload fluctuation or the application might be heavily input- dependent. Moreover, the application requirements might change at runtime to respond to external stimuli. For instance, while the surveillance system described in the previous example detects a threat, the application requirement might ignore the energy consumption of the application. In the context of autonomic computing, this group aims at enhancing an application with a dynamic adaptation layer, to provide self-optimization capabilities, according to application requirements and to the available resources.