I have been asked this question in-person and online before. I have seen “experts” argue about this at academic conferences and people debate this on forums. The answer is not a yes/no. It requires some analysis. My short answer is: mutli-core does not save energy unless you simplify each individual core to make it more energy-efficient. I explain this with an example and provide insights to back my assumptions.
I will use two metrics for this study: speed and energy.
Assume a FAST core that runs at 10Watts and completes a program in 10 seconds. Total energy consumed = 10 x 10 = 100J.
Now suppose we put two FAST cores together. Power will double to be 20 Watts, execution time will halve to be 5 seconds (I am giving multicore extra credit here), energy will still be 100 J. Note: There are no savings in energy by going multi-core alone. In fact, if multi-core did not halve my execution time (which it often fails to), multi-core would be less energy-efficient.
Now lets say we have a SLOW core. It consumes 5W of power, and finishes the program in 15 seconds. Energy = 75J.
Lets build a dual SLOW core. 10 Watts of power, 7.5 seconds execution time, 75J of energy. Now this is the best balance between energy and speed, assuming the workload can leverage two cores efficiently.
One can envision a SLOWER core which will make it even more energy-efficient. Thus, energy-efficiency is not a property of the multi-core, multi-core seems energy-efficient only because each individual core is efficient. Multi-core just allows us to get decent speed with low energy. Don’t forget that multi-core is no free lunch. Leveraging multi-core requires effort from the programmers. They have to find parallelism in the programs which can offset this efficiency benefit.
By the way, the fundamental reason the above maths works is because I assumed that the SLOW core burned half the power of a FAST core but finished the program in less than twice the time, i.e., it took only 15 seconds, not 20. This is what makes the SLOW core more efficient. If you are curious, the SLOW cores tend to be more efficient due the following three reasons:
1. Lower frequency. Since power is proportional to frequency cube
square **, halving the frequency reduces speed by 2x but power by 8x, making it 4x energy efficient.
**Note: This is actually cube, with some reservations which is why I wrote square as a first order approximation. Thanks to Harrkev for calling me out and giving me an opportunity to explain in depth. See our conversation below.
2. Less speculation. FAST, aggressive cores tend to be more speculative because they never waste time in waiting for data, they just predict the value and do the work in the hope that their prediction will be correct. This does improve performance but incorrect predictions lead to wasted work.
3. Lower flip-flop power. This one is a bit subtle. FAST cores tend to have deeper pipelines for high performance. The more the pipeline stages, the higher the number of flip-flops in the core, which leads to higher wasted energy in flops.
Summary: Multi-cores have the potential to be more energy-efficient. They can be a big win if architects can strike the right balance between the energy-efficiency benefit of multi-cores and the programmer effort required to write multi-threaded code. Unfortunately, this is not the case for todays multi-cores. Architects need to factor in the cost of programmer effort when designing these multi-core; after all, the mother of all metrics is the dollar.