  There is growing interest in lowering the energy consumption of computation.
Energy transparency is a concept that makes a program's energy consumption
visible from software to hardware through the different system layers. Such
transparency can enable energy optimizations at each layer and between layers,
and help both programmers and operating systems make energy aware decisions.
The common methodology of extracting the energy consumption of a program is
through direct measurement of the target hardware. This usually involves
specialized equipment and knowledge most programmers do not have. In this
paper, we examine how existing methods for static resource analysis and energy
modeling can be utilized to perform Energy Consumption Static Analysis (ECSA)
for deeply embedded programs. To investigate this, we have developed ECSA
techniques that work at the instruction set level and at a higher level, the
LLVM IR, through a novel mapping technique. We apply our ECSA to a
comprehensive set of mainly industrial benchmarks, including single-threaded
and also multi-threaded embedded programs from two commonly used concurrency
patterns, task farms and pipelines. We compare our ECSA results to hardware
measurements and predictions obtained based on simulation traces. We discuss a
number of application scenarios for which ECSA results can provide energy
transparency and conclude with a set of new research questions for future work.
