Energy efficiency is becoming increasingly important in today's world of battery-powered mobile devices and power limited servers. While performance optimisation is a familiar topic for developers, few are even aware of the effects that source code changes will have on the energy profiles of their programs. Without knowledge of these effects, compiler and operating system writers cannot create automatic energy optimisers. To realise the needed energy savings, we require the capability to track energy consumption and associate it to code and data at a fine granularity. Furthermore, compilers and operating systems must exploit this capability to optimise applications automatically. This project presents a novel approach to software-centric modelling, measurement, accounting and optimisation of energy-efficiency on many-core systems. Energy consumption will be matched against programming language abstractions, from basic-blocks to functions, loops, and parallel constructs, and from variables to data structures, providing developers with the information that they need. The project will use this fine-grained accounting to build novel compiler optimisations that target energy consumption. It will create low energy runtime systems that adapt to environmental changes. It will develop energy-efficient operating system scheduling that manages multitasking for heterogeneous many-cores.