I mentioned to a friend of mine, the other day, that power is a system consideration. The traditional thinking in computer systems is that power is dependent on fabrication process, which is very true. However, it should not stop there. Hardware and software both play a role in optimising for low-power operation.
I can imagine some people going – what? While it makes sense that hardware affects power directly, it may not be so simple to imagine how software can affect power consumption until you realise that the operation of hardware is controlled by software. So, in order for hardware to optimise power usage, the software needs to be power aware.
Personally, I’m still waiting for the day when software compilers would be able to automagically compile software optimised for power. At present, they generally compile for either higher speed of execution or smaller memory footprint. It would be cool if there was a “-Op” compilation flag for GCC to tell it to power optimise the software.
Of course, the amount of power consumption used by modern microprocessors is often minimal, when compared against the power consumed by the entire system, including any analogue front-ends and display devices. However, if power budgets are tight, even saving a uA of current can help.
There are possibly more ways to do things but these are just off the top of my head. The ways in which software can apply power savings are several fold:
- It can choose to use substitute instructions with ones that consume less power. For example, a multiply can sometimes be substituted with a shift, which uses less power.
- It can optimise the use of memory so that less memory is needed and less memory transactions are performed. This goes beyond just optimising the use of cache memory.
Hopefully, someone will one day consider building a C compiler that is power aware. This may be a wonderful project for someone’s PhD. It would take a lot of experimentation to build up a profile of power consumption of each instruction. Then, it would take some thinking to find alternative algorithms to perform things with minimal power.