Leveraging Energy-Aware Programming (LEAP)

Understanding energy consumption from foundation to programming tools

About the project

The world’s energy consumption has been steadily rising the last seven decades. The Information and Communications Technology (ICT) sector was estimated to be responsible for over 7% of the energy consumed in 2020 and this will likely increase in the upcoming years. An important part of the solution to this will be to make more energy efficient programs. In contrast to efficiency, there is very little emphasis on this as a programming skill.

Energy consumption of systems is a topic that has been investigated. For example, we know in general that memory usage and cache behaviour has an important effect, as fetching data further away from the processor is costly. Similarly, at the practical level, it is well-known that we can measure the cost relating to network communication; also here distance is of importance. These are merely a few of many examples that all give good insight to specific cases. But they are often limited to these cases and gives little fundamental insight to the problem.

Interestingly, it is actually known that there is a fundamental relationship between deletion of information and dissipation of energy. Landauer’s principle defines that only computations that delete information must dissipate heat. Unfortunately, deletion and overwriting of information is inherent to most computations. It is possible to define a reversible computation model, which does not lose information, and implement programming languages for this. This is a relevant starting point when considering the energy consumption of computations and many techniques from this can be applied.

Objectives

In this project, we will investigate if it is possible to develop a model for energy-aware programming and implement the needed tools to support it. The idea of an energy-aware programming model is to support the programmer, such that programming choices for lower energy consumption become more clear. Today, we teach students how to optimise their code for memory and cache behaviour for faster execution; program libraries and algorithms are implemented to follow this. It is not possible to give similar skills for energy consumption.

The project will be underpinned by the existing understanding about energy of computation and current knowledge of programming languages and program transformations (compilers, optimisers, etc.). Modern compilers (both static compilers like the ones for C of C# or just-in-time compiler like the one for Java) implement extensive optimisations to programs, but this does not necessarily result in less energy usage. These optimisations have historically solely focused on making the programs faster.

We will also work with methods to better quantify and evaluate the efficiency of specific and representative programs. To evaluate the programs and different program transformation, we need to understand their behaviour. This is not different from how efficiency of programs is investigated by running the programs. This work will be supported by laboratories at Roskilde University, that have studied several aspects on software’s energy consumption and is working on a testing bench.

Outcomes

In all, the goal of this project is to build a foundation for understanding and quantifying of energy consumption for modern hardware, languages, compilers and run-time system. Having a way of quantifying and evaluating programs enables us to do two things. Firstly, we can start evaluating implementations of different programs. Secondly, we can better evaluate the effect of the different compilers and run-time environments. This is a requirement to build an energy-aware programming model.

Background

<Participating departments/centres, time frame, theoretical basis, scientific method, etc.>

Cooperation

Tools

Published Jan. 12, 2023 12:37 PM - Last modified Sep. 15, 2023 7:46 AM