Android - Why do Android phones have more cores than computers?
As you've already noted, the big.LITTLE combination strategy (technically, HMP, Heterogeneous Multi-Processing clusters) is the primary reason for so many (and sometimes overwhelmingly many) cores. A mobile device often runs into multiple scenarios, both heavy load and light load ones included.
An extreme consumer-class example is MediaTek's Helio X20, which has 2 performance-oriented A72 cores, 4 balanced A53 cores, plus 4 energy-efficient A35 cores. That's very flexible throughout different usage cases. However, I think 8 cores 2 clusters is usually enough.
There's also another desktop-like example, Qualcomm's Snapdragon 800 series (S 800, S 801, and S 805). There are only 4 cores of the same microarchitecture in each SoC, with 2 clocked higher and 2 clocked lower. Qualcomm made these SoCs because they were very confident of their own microarchitecture (Krait 400 and Krait 450).
For games, even if they seemingly demand GPU performance rather than CPU, they still put a heavy load on the CPU. A GPU cannot work alone without something else supplying it with data to be processed, and that's one of the major jobs that the CPU is doing while you're gaming. In most gaming cases, the GPU only renders graphics, while all other jobs like loading data, resources and assets, and calculating in-game mechanics like the system, environment and physics are done by the CPU. You won't observe a higher frame rate if you upgrade your GPU while sticking to a low-end CPU.
A secondary reason is how Android utilizes CPU resources. Android pretty much makes their own application environment. It uses nothing but codes (and APIs) from Java, but it has its own virtual machine named Dalvik, which was later replaced by ART (API Level 21). APKs have their executable codes in a "neutral" format, much like .class
files in Java. Before they're run, the codes get compiled once more into the machine's native instructions[1]. The compilation process is multi-threaded and can utilize multi-cores for a performance boost.
And when an app is running, there are several other processes and mechanics (like the Garbage Collector) that run alongside, or parallel to the app. More cores can let the supportive processes run more efficiently, as well as the main app.
1. If you use a file type identifier, you'll find that "optimized" dex files are in ELF format, while the "neutral" dex files are just in a format of their own.
Another lesser reason is that ARM cores can't work as fast as an Intel x86 chip. The Intel x86 microarchitecture can be dated back to 1976, when the Intel 8086 chip started to be designed, which means that the x86 has developed over a long time. A single modern high-end ARM Cortex-A73 core is only as powerful as an Intel Clarkdale core, taking Core i5-660 as an example (GeekBench, single-core). This is because x86 is a CISC microarchitecture while ARM is a RISC microarchitecture. You surely don't want a phone that becomes laggy with only two or so active apps. More cores will help relieve the pressure. That's why dual-core SoCs are relatively popular only on smart watches. Who needs performance on a smart watch?
Interestingly, more cores will result in less power than a single core at the same load. The relationship between CPU frequency and power consumption is more than linear, so twice the frequency will always result in demanding more than twice, or even 3x or 4x as much power, while delivering less than twice the performance (due to other resource limitations like cache). So 4 cores can easily beat a single core at the same load, providing better performance and simultaneously demanding less power.
Further Reading:
- Why 8 and 10 CPU cores in smartphones are a good idea – a lesson from the kitchen
- Why some phones have two quad core processors and some have similar clocked octa core. Which is better one in terms of performance?
The reason is as simple as much as complicate.
The short answer is "because the mobile phone market has never been and is not driven by Intel".
The long answer is way too long to resume here, but the basic concept is that Intel has dominated the PC market for years with all means possible, to the point of paying and corrupting (and being fined for this) to have his CPUs be the first and only choice for PC manufacturers.
Having the total control of the market has allowed Intel to inflate the CPU prices while artificially deciding which features and how much processing power the users should have wanted, and if you analyse a bit Intel history you'll notice that its main strength is basically in the increase of CPUs frequency, so it mostly never tried to do something really smart or innovative; and it didn't need it, because it can just say to people "you don't need more cores, but I have this juicy new CPUs which runs 100 MHz faster". At the same time, it could sell multicore CPUs in the server market at absurdly high prices (because servers have always needed tons of parallel power, to the point that there is a current trend in trying to realize servers that use...guess what? Hundred of your cheap phone CPUs working in parallel)
This, in turn, has reflected into the developers community which has never caught up with the importance of parallel programming, so that many if not most of the them never bothered using more than one thread at time -or, to express it in a non technical way, having their software do more than one task at time. Which, by the way, makes sense when 99% of your customers base has two cores at max. Sadly, this is had led to the legend that parallel algorithms are really difficult to implement and applies only to a small subset of problems.
Instead, finally, the mobile market has never seen Intel success; quite the contrary, actually, as it happens most of the time that Intel tries to do something different from the usual X86 architecture. So, lacking is influence and control of the market, the other CPUs producer have gone in the direction that has been the normality for ages outside the PC market: parallel computing.
There are two factors going on, one very practical and the other historical.
The practical reason is the use of mixed architectures in phones. Power consumption is critical for phones and phones spend a lot of time in modes where they require very little performance. It makes sense to have some cores optimized for minimal power consumption when little performance is needed while having some cores optimized to provide maximum performance when it's needed.
The other reason is largely historical. Until 2005 or so, desktop CPUs were all single cores. Improving desktop CPU performance consisted almost exclusively in making a core that can execute as many instructions per second as possible. Even today, so much desktop software cannot take full advantage of multiple cores that many would prefer a CPU with 4 cores over an 8 core CPU with cores 20% slower.
Getting as much performance out of a single core as possible requires huge amounts of CPU real estate. This is real estate that could otherwise be used to provide more cores. This is why Intel's newest Kaby Lake CPUs max out at 4 cores and people buy them because each core is faster than their predecessor's cores. For many, they are an upgrade even from CPUs with a higher core count.
Over time, expect to see much more desktop software fully optimized to support more cores. As that happens, the engineering tradeoffs will start to favor more cores over faster cores on desktops. While cores will almost certainly still get faster, you'll start to see people preferring an 8 core CPU over a 4 core CPU even if each core is 20% slower. Chip designers will follow the market.