In the bad old days, the two major performance concerns in CPU selection were whether a CPU had enough processing power and memory to get the job done. Although these are still issues, it’s a rare problem that requires more bandwidth and memory than can be provided by the CPU vendors.
By contrast, today, well over half of the systems I work on are battery powered, and so I find the major question I have when designing an embedded system is ‘how long will the battery last?’ If you can work this out from studying the data sheets of the various CPU vendors then you’re a better engineer than me.
Thus to solve this problem, I propose that we introduce a new performance metric – namely how much energy (Joules) does it take to perform a set of standard tasks. Rather than the usual bunch of quasi meaningful benchmarks, I’d like to see benchmarks such as:
- How much energy does it take to receive and transmit one thousand characters through an asynchronous serial port running at 38400 baud?
- How much energy does it take to perform a task switch using a standard RTOS such as uCOS-II?
- How much energy does it take to perform one thousand A2D conversions?
- How much energy does it take to execute a 64 tap FIR filter?
With metrics such as these, the task of choosing the best CPU (and compiler for that matter) would be made much easier. I’m quite prepared to let off the hook those vendors that aren’t selling CPUs aimed at the portable market. For the other guys (TI, Atmel, ARM etc) it’s time to step up to the wattmeter and be measured.