Redundancy is a fundamental system characteristic that improves productivity and resilience. Each such system has multiple, redundant configuration options with their specific resource requirements and cost/quality tradeoffs. This project targets applications with three types of redundancies, namely approximation, replication, and implementation. Applications are expressed as collections of interdependent services that operate under varying resource availabilities, particularly energy. Each service may offer outcomes/answers of different quality at different costs, potentially using different hardware/software resources. The key insight is that (1) quality and cost requirements have to be balanced across all application services, and that (2) users need to be able to specify and explore application cost/quality tradeoffs. The project implements a new programming architecture that effectively manages the three types of redundancies to produce the best application outcomes under limited energy/cost budgets and possible service failure conditions. The project targets battery-operated smart phones and autonomous robotic systems, but extends to cloud, enterprise and high-performance computing domains.
Applications are modeled as dual-weighted, directed graphs where nodes represent different services and their quality levels, and edges represent resource or input/output dependencies between these services and their levels. Dual weights model the energy/cost of a service and the importance of the service and its levels for the user. The optimal solution of the service selection problem picks services and their levels such that the importance metric is maximized under a given energy/cost budget. This NP-complete problem is solved using a 0-1 integer programming formulation and state-of-the-art integer programming tools.