Non-functional properties, including, for example, energy, are becoming increasingly and critically important for programming embedded devices. These devices, typically rely heavily on battery power, and have restrictive constraints (or energy budgets) within which to operate. Devices such as tablets, phones, drones, medical devices and the Internet of Things, all of which are becoming ever more commonplace in society, are driving the pressing demand for optimisation of energy usage in applications that execute on them.
Furthermore, as the global climate change crisis becomes critical, our carbon footprints are accelerating at an alarming rate, partly due to increased energy consumption from computing devices in the modern world. New green-computing techniques are needed in order to reduce the overall energy consumption of computing devices, without decreasing their overall performance.
Despite this, dealing with energy consumption is often treated as a secondary concern, and when addressed, something of a black-art to the average developer, where energy budgets are often met by developers randomly changing source code or applying optimisations in the hope that energy budgets will be achieved indirectly. Furthermore, these embedded devices are becoming increasingly parallel, with multi-core hardware now commonplace in e.g. smart phones and tablets. However, dealing with energy properties at the language level usually requires developers to have highly specialised skills, and use low-level tools and techniques.
Even small devices, such as the Raspberry Pi and the Jetson Nano, offer high-performance low-energy models of hardware, at very affordable prices. Parallel hardware can offer hardware manufacturers a route to low-energy consumption, as multi-core typically increases the performance of the software, while also decreasing its energy usage.
Consequently, there is a very clear and timely need to provide the typical non-specialist programmer with the necessary software development tools and programming abstractions required to develop applications that are able to conform to specified energy requirements, thereby making software developers more lean, agile and productive; and software, and the devices they run on, more greener.
To date, there has been very little effort on the fundamental and essential problems of:
- providing suitable abstractions to the programmer, allowing them to program with energy as a target goal; and,
- determining how to correctly transform code structure so that it yields optimal energy results, or targets the software to stay within a pre-defined energy budget.
The Energise project will directly tackle these fundamental problems by building on and complementing current research into both program transformation and algorithmic skeletons. Unusually, and very importantly, \TheProject{} \emph{tackles the energy crisis from a software-engineering perspective}, employing software-development techniques such as refactoring, and high-level programming abstractions using novel energy-optimised skeletons.
This is a critical and fundamental goal to solving the energy ---and, therefore, the green-computing--- crisis in general.
|