> Your average user is going to prefer double the clock rate of your processors to doubling the number of processors.
I disagree. The reality is that these days people are running multi-threaded workloads even if they don't know it. Running a dozen chrome tabs, Slack, Teams, Zoom, some professional tools like IDE's, Adobe creative suite, etc. adds up very quickly to a lot of processes that can use a lot of cores.
It’s wild to see that in print.
If your code is bottlenecked on a single thread, or if it doesn't scale well to higher thread counts, Apple is actually great right now. The downside is that you can't get higher core counts, but that's where the Pro and Ultra SKUs come in.
(The real, real downside is that right now you can't get higher core counts on M1 without being tied to a giant GPU you may not even use. What would be really nice is an M1 Ultra-sized chip with 20C or 30C and the same iGPU size as A14 or M1, or a server chip full of e-cores like Denverton or Sierra Forest, but that's very much not Apple's wheelhouse in terms of products unfortunately.)
That's the problem, though -- if you clock yourself much lower, of course you can get higher IPC; you can pack more into your critical paths.
Now, certainly Apple has some interesting and significant innovations over Intel here, but quoting IPC figures like that is highly misleading.
https://images.anandtech.com/graphs/graph17024/117496.png
That's an absolutely damning chart for x86, at iso-power the M1 Max scores 2.5x as high as a 5980HS in FP and 1.43x as high in integer workloads, despite having just over half the cores and ~0.8x the transistor budget per core. So it's a lot closer to the ~2.5-3x IPC scores than you'd think just from "but x86 clocks higher!". And these results do hold up across the broad spectrum of workloads:
https://images.anandtech.com/graphs/graph17024/117494.png
Yes, Alder Lake does better (although people always insist to me that Alder still somehow "scales worse at lower power levels than AMD"? That's not what the chart shows...) but even in the best-case scenario, you have Intel basically matching (slightly underperforming) AMD while using twice the thread count. And that's a single, cherrypicked benchmark that is known for favoring raw computation and disregarding performance of the front-end, if you are concerned about the x86 front-end, this is basically a best-case scenario for it... high code compactness and extremely high threadability. And it still needs twice the threads to do it.
https://i.imgur.com/vaYTmDF.png
Like your "but x86 uses higher clock rates", you can also say "but x86 uses SMT", so maybe "performance per thread" is an unfair metric in some sense, but there is practical merit to it. If you have to use twice the threads to achieve equal performance on x86 then that's a downside, where Apple gives you high performance on tasks that don't scale to higher thread counts. And if Apple put out a processor with high P-core count and without the giant GPU, it would easily be the best hardware on the market.
I just strongly doubt that "it's all node" like everyone insists. Apple is running fewer transistors per core already, and AMD/Intel are not going to double or triple their performance-per-thread within the next generation regardless of how many transistors they might use to do it (AMD will be on N5P this year, which will be node parity with Apple A15). x86 vendors can put out a product that will be competitive in one of several areas, but they can't win all of them at once like Apple can.
And going forward - it's hard to see how x86 fixes that IPC gap. You can't scale the decoder as wide, Golden Cove already has a pretty big decoder in fact. A lot of the "tricks" have already been used. How do you triple IPC in that scenario, without blowing up transistor budgets hugely? Even if you get rid of SMT, you're not going to triple IPC. Or, how do you triple clockrate in an era when things are actually winding backwards?
Others are very, very confident this lead will disappear when AMD moves to N5P. I just don't see it imo. The gap is too big.
But from some quick searching, excel will split out independent calculations into their own threads. So for that, the answer seems to be: it depends. If you're using 20 cores to calculate a single thing, it seems like the answer is "no". But if you're using 20 cores to calculate 20 different things, it seems like the answer is "yes".
It seems unavoidable that you can get more total performance with larger numbers of slower cores than smaller numbers of faster cores. The silicon industry has spent the entire multi-core era - the last 15 years - fighting this reality, but it finally seems to have caught up with us, so hopefully in the next few years we will start to see software actually start to adapt.
A55 is probably 1/8 the performance, but something like 1/100 of the power consumption and a miniscule die area. I wouldn't want to have all A55 cores on my phone though.
Performance per die area is also relative. For example, Apple clocks their chips around 3GHz. If they redesigned them so they could ramped them up to 5GHz like Intel or AMD, they would stomp those companies, but they would also use several times more power.
What is really relevant is something like the ratio of a given core's performance per area per watt to the same value for the fastest known core.
The only interesting area for ultimate low-power in general purpose computing is some kind of A55 with a massive SIMD unit going with a larabee-style approach for a system that can both do massive compute AND not have performance plummet if you need branchy code too.
Since the Intel e-cores still have a relatively wide decoder, e-core designs may be the part where the bill comes due for x86 in terms of decoder complexity. Sure it's only 3% of a performance core, but if you cut the performance core in half then now they're 6%. And the decoder doesn't shrink that much, Gracemont has a 3-wide decoder vs 4-wide on Golden Cove, and you still have to have the same amount of instruction cache (instruction cache hit rate depends on the amount of "hot code", and programs don't get smaller just because you run them on e-cores). A lot of the x86 "tricks" to keep the cores fed don't scale down much/any.
edit:
Intel Golden Cove: 7.04mm^2 with L2, 5.55mm^2 w/o L2
Intel Gracemont: 2.2mm^2 with L2, 1.7 mm^2 w/o L2
Apple Avalanche: 2.55mm^2. (I believe these are both w/o cache)
Apple Blizzard: 0.69mm^2 (nice)
Note that N7 to N5 has roughly 1.6x logic density scaling - so a Blizzard core would be 1.24mm^2 or roughly 73% of the transistor count of Gracemont for equivalent performance! For the p-cores the number is 82%.
This is one of the reasons I feel Apple is so far ahead. It's not about raw performance, or even efficiency, it's the fact that Apple is winning on both those metrics while using 2/3rds the transistors. It's not just "apple throwing transistors at the problem", which of course they are, but just they're starting from a much better baseline such that they can afford to throw those transistors around. The higher transistor count in total is coming from the GPU, the cores themselves Apple is actually much more efficient (perf-per-transistor) than x86 competitors.
Of course, it doesn't help that Intel lists laptop chip turbo frequencies to use either 95w or 115w and Anandtech's laptop review of one had the 12900H hitting those numbers with sustained power draw at an eye-raising 85w. That's 2-3x the power of M1 Pro and only 20-30% more performance.
That laptop also showed that cutting power from 85w to 30w roughly halved the performance. On the plus side, this means their power scaling is doing pretty well. On the negative side of things, it means their system gets worse multithreaded performance at 30w despite having 40% more cores.
Something I don't often see, but it does come up here and there. One nice thing about the M1 is the performance is consistent as it doesn't have a massive auto-scaling boost involved. An Intel or AMD chip might start off at top speed single thread, but then something else spins up on another core, and you take a MHz hit on your primary thread to keep your TDP in spec. The background task goes away, and the MHz goes back up. Lots of performance jitter in practical use.
Interconnects and IO also consume power. You can't just scale small e-core counts without also hitting power walls there too.
All that said, I'd love to see some E-core only chips come out of intel targeted at thin clients and long battery life notebooks.
they exist, that's called Atom. "e-core" is just a rebranding of Atom because the Atom brand is toxic with a huge segment of the tech public at this point, but Gracemont is an Atom core.
There's no Gracemont-based SKUs yet, but Tremont-based Atoms exist (they're in one of the models of NUC iirc), which is the generation before. Also, the generation before that is Goldmont/Goldmont Plus which are in numerous devices - laptops, thin clients, and NUCs.
Keep an eye on the Dell Wyse thin-client series, there are a lot of Goldmont-based units available if you can settle for a (low-priced surplus) predecessor.
Gracemont is such a huge departure from previous atom offerings I don't really consider them as having the same design goals. These new e-cores would be really nice for my use cases, better density and power efficiency than Ryzen.
Maybe with AMD dragging their feet on the V2000 and V3000 lines of low power offerings, I can get these sooner...
I suspect that rather than 1000 cores we might start to see more levels of cores, and hardware for more things. Already Apple has video encoding support. AI seems an obvious idea and it scales much better than most classical computing.
If I may bring up something that may be more of a wish: I wish that we could give up the idea of shared memory and we could have many more cores that communicated by shared messaging. We are already seeing this spread with webworkers - if it became cheap to create a new thread and computers weren't bottlenecked then maybe more games would use it too.
Web workers are basically the worst case, you have to serialise your data to and from JSON when passing it to and from a worker. It’s not built for performance. There have been many cases where people have tried to improve performance of their apps by offloading work to a web worker but the added cost of serialisation ultimately made it slower than running on the main thread.
If we keep scaling up number of processors rather than clock speed, what is going to be the maximum number useful cores in a laptop or desktop? 20? 100? 1000? At some point adding more cores is going to make no difference to the user experience, but the way we are going we'll be at 1000 cores in about a decade so we better start thinking about it now.
Or to put it another way, what normal workloads will load up all the cores in the new M1 chip?
Being a software developer, compiling things is the obvious choice, except when you come to that rather serial linking phase at the end of the compile job. Already my incremental Go compiles are completely dominated by the linking phase.
There are a few easy to parallelise tasks, mostly to do with media (as it says in the article). However a lot of stuff isn't like that. Will 20 cores speed up my web browser? How about Excel?
Your average user is going to prefer double the clock rate of your processors to doubling the number of processors.
Anyway, I don't want to rain on Apple's parade with these musings - the M1 Ultra is an amazing achievement and it certainly isn't for your average user. I wish I had one in a computer of my choice running Linux!