Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

SEEP: Proactive Methodology for Energy-Aware Programming


The SEEP project focuses on the research and development of new approaches to create energy-aware systems.

Computing systems at various scales (embedded systems, mobile computing systems, distributed systems) require effective energy-saving techniques to exploit energy resources in the most efficient manner. To spend energy more efficiently, various energy saving techniques have been established over the past years. Most of these techniques focus on exploiting available hardware energy saving features (e.g. dynamic voltage and frequency scaling, sleep states).

In contrast to these established energy saving techniques, SEEP proposes a new paradigm for energy-aware programming. Energy-aware programming guides developers during the development of system software and software components (e.g. applications) to make programming decisions in the awareness of their impact on energy consumption.

Until now only few tools are available that assist developers to optimize their code at hand for energy efficiency. Beyond that, due to the complexity of systems, examining applications for energy hogs is a very time-consuming task. The SEEP approach turns the modus operandi of energy-aware programming into a forward-looking process. Taking advantage of symbolic execution engines and platform-specific energy profiles, SEEP assists software developers in making application design decisions in the awareness of the decisions' impact on the energy footprint of the code under development. This allows the purposeful design of energy-efficient programs.

Key Aspects

    Three key aspects are pursued by the SEEP project. First, the framework provides energy estimates for heterogeneous target platforms. Second SEEP exploits different profiles to speed up both, the examination of program code and the calculation of energy estimates. Third, energy estimates are being calculated iteratively.
  • Heterogeneous and Proactive Approach

  • Energy-aware programming requires reliable and accurate tools that support developers during development. Instead of reacting on energy hotspots reported by users of an application, SEEP turns this process into a forward-looking process to avoid such energy bugs before the application is being deployed. Furthermore, SEEP aims at not being restricted to specific architectures but to be adaptable to a variety of heterogeneous target platforms. As the framework does not make any restrictions here, new hardware components and technologies can be incorporated.
  • Profile-Driven Approach

  • One of SEEP's main principles is the extensive use of profiles. Once an energy model has been defined for a specific target architecture, energy measurements are performed to create a concrete target-specific profile. Such profiles must be created only once, i.e., on the one hand, during the energy profiling process no active measurements (e.g., voltage, current, time) have to be taken, and on the other hand, profiles can be reused and shared among developers. Furthermore, using profiles speeds up the complete energy estimation process while still providing accurate energy values. SEEP provides energy profiles for low-level instructions but also for complete functions.
  • Iterative Approach

  • The aforementioned function profiles are created while the framework is actually used. Specific applications can be prepared whose execution is intended for creating as many function profile entries as possible. We consider this as an iterative, bottom-up approach: at first, low-level functions that do not use any other functions are analyzed. Once they have been analyzed, their callers can be analyzed, then the callers of these callers, and so on. Analysis means in this case that energy profiling has to be applied, which first needs to use low-level instruction profiles. Applications that use previously analyzed libraries benefit from this approach since deeper, low-level analyses can be skipped and the number of paths that have to be explored decreases tremendously.


SEEP Framework Overview

The framework is designed as a three-tier approach. In the first component, the path explorer, all paths of a program under test are analyzed. For this we exploit symbolic execution techniques, which is effective at exploring program paths automatically. In the second component, the complexity explorer, path entities are created, i.e., concrete binaries with predefined input data for each path. In the third component, the profile merger, by means of predefined instruction and function profiles, concrete energy values are being calculated and energy hotspots can be unveiled. This requires to create native target code, which can either be executed using virtualization on the development platform (where SEEP is running) or directly on the respective target platform (for best accuracy). The latter method requires profilers, which can output the number of executions of each target instruction. For instance, this can be achieved by injecting basic block counters directly into target binaries. Basic blocks are code sequences with no branches.

The framework can also be divided into three different layers. The first layer is responsible for the path exploration process. Interaction with the symbolic execution engine (KLEE) takes place here. The second layer is responsible for actual energy profiling exploiting both instruction and function profiles. Hardware-dependent classes are implemented in the target-dependent sub layer.



Timo Hönig, Heiko Janker, Christopher Eibel, Oliver Mihelic, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. Proactive Energy-Aware Programming with PEEK. In Proceedings of the 2014 Conference on Timely Results in Operating Systems (TRIOS '14), 2014.

OSR (Vol. 45/3)

Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. SEEP: Exploiting Symbolic Execution for Energy-Aware Programming. In Best Papers from SOSP 2011 Workshops, pages 58–62, 2012.


Timo Hönig, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. ProSEEP: A Proactive Approach to Energy-Aware Programming. In Proceedings of the 2012 USENIX Annual Technical Conference (ATC 2012), Poster Session, 2012.


Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. Energy-Aware Programming Utilizing the SEEP Framework and Symbolic Execution. In Proceedings of the 23rd ACM Symposium on Operating Systems Principles (SOSP 2011), Poster Session, 2011.


Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. SEEP: Exploiting Symbolic Execution for Energy-Aware Programming. In Proceedings of the 4th Workshop on Power-Aware Computing and Systems (HotPower 2011), 2011.

People Involved in SEEP


TU Braunschweig TU Braunschweig,
Institute of Operating Systems and Computer Networks