Manufacturers increasingly make tradeoffs in the name of energy use when designing products. Soon the same thing could happen in the field of computer architecture thanks partly to the efforts of a group at the University of Washington.
Computer architects have realized for some time that factors such as the update rate of dynamic RAM and the voltage levels used to maintain data in static RAM can have an impact on the energy a computer uses. But there has been no systematic way of taking advantage of these affects in the name of energy efficiency.
But a research group headed by Luis Ceze, a University of Washington assistant professor of computer science and engineering, has devised a computer language that could do just that. Called EnerJ, it is an adjunct to the Java programming language. The group hopes to release it as an open source resource this summer.
The group looked at the fact that aggressive voltage scaling of computer circuits has been shown to reduce energy consumption. The problem is that reducing the voltage to computer circuits also boosts the calculation error rate. For example, reducing circuit energy consumption by 30% makes the calculation error rate rise by 1%. Reducing it by only 22% induces a 0.01% rise in error rate. So the group approached the energy consumption problem by finding a way to divide computer tasks into those which can tolerate such errors and those that cannot.
The group accomplishes this separation of tasks using type qualifiers in EnerJ to declare data that can use less accurate calculations. The group's term for these sorts of calculations is approximate computation. Once a programmer has declared these types, the system automatically maps approximate variables to low-power storage and uses low-power operations. There are also facilities for programmers to apply energy-efficient algorithms such as those working with floating-point numbers.
EnerJ also builds in facilities through which the system can statically guarantee isolation of the precise program component from the approximate component. This lets a programmer control explicitly how information flows from approximate data to precise data. But the programmer needn't get involved in the details of energy efficiency. The EnerJ compiler, runtime system, and the hardware it runs on is entirely responsible for choosing the energy-saving mechanisms to employ and when to do so, guaranteeing correctness for precise data and “best effort” for the rest, the group says.
This idea works, the group says, because systems spend a significant amount of energy guaranteeing correctness. And in some cases correctness is imperative. An error in a jump table, for example, could lead to a crash, and even small errors in the image file format might make the output unreadable.
But small errors are OK in a lot of cases. For example, an image renderer can tolerate errors in the pixel data it outputs — a small number of erroneous pixels may be acceptable or even undetectable.
Though EnerJ could become available this summer, it is not clear how useful it could be for energy efficiency without computer hardware optimized for the sort of low-energy operations it envisions. No word yet on compatible platforms for EnerJ.
The group wrote a paper on EnerJ which was recently presented at Programming Language Design and Implementation annual meeting:
http://sampa.cs.washington.edu/public/uploads/1/12/Enerj-pldi2011.pdf