Seems like I am not alone in thinking that power-efficiency is a system issue that includes both hardware and software. A recent article at ACM shows that other leading processor architects are also thinking along the same lines. So, I ask myself what am I going to do about it. Due to recent events, I now find myself with a bit of free time. Therefore, I think that I will put my free time to some work by trying to do some interesting things.
Firstly, I will rework my existing processor into a more power friendly design. What I mean by this is not that I will make it lower in power, but I will try to make some changes to it so that the processor’s power distribution and consumption can be intelligently controlled by software. At the barest minimum, this would mean adding a programmable power and clock manager into the core. It could also potentially include lower power but slower computational units that can be used for less critical operations.
Secondly, I will try to modify Icarus Verilog to output some power information. It would not be possible to output accurate power results because power is highly dependent on manufacturing technology. However, regardless of technology, it could possibly output relative power information. So, I could possibly use it to test out different code paths that produce the same results in a similar time period but with different power profiles.
Thirdly, if I have the resources, I will try to make changes to LLVM to facilitate power information. This will probably take a bit of doing as the LLVM compiler is a pretty complicated piece of software. Using the information garnered from the simulator, I could possibly output relative power measures for different types of code. This will be a good first step towards generating power efficient code. Of course, the ultimate aim would be to have a -Op power-optimised flag that will automagically trade-off speed for lower power.
Fourthly, now this is stretching it, I will try to write a nano-kernel that is power optimised. This may just be as simple as automatically putting the processor to low power mode when the running task is idle and waiting on user input. It may also be as complicated distributing tasks over a bunch of heterogeneous cores taking power considerations into account such as sending less critical tasks to cores running at lower power configurations.
Now, if anyone thinks that this indicates that I have succumbed to being an eco-mentalist – you’re absolutely wrong. I still belong squarely in the skeptic camp. However, I do believe that efficiency is important – actually any engineer can tell you that the whole purpose of engineering is to increase production efficiency. I do believe in being more efficient, not for the purpose of saving the planet, but for the purpose of engineering elegance.
So, let me start this today.