The travails of multi-core in Apple desktop land
Even with the release of Mac Pro, the question of developer-oriented Mac does not go away. I think it became far more glaring than it ever was. What’s happening here?
As someone running a contracting agency, I have an opportunity to work on some fairly large projects. They involve a fair number of dependencies (which I am constantly trying to minimize) which lower initial development time. I pay for that along the way, as archiving, compiling and code-signing for each release we do takes…a while.
The problem
Most apps we happen to work on are front-ends covering just about any way a customer can engage with the given client’ service. That could (should) involve:
- base iOS app
- multiple app extensions (iMessage, custom notifications, various widgets)
- accompanying watchOS app + its extension
- even tvOS and/or macOS app
- plus all the mentioned dependencies (linked frameworks and libraries)
So when you make a version release of such a project, you are faced with a rather intensive process which completely saturates all the available cores on your development machine or build server. 1 Which is actually a good thing – I am very happy that Xcode and its Build system are architected so well, they can successfully parallelize this process across all available cores. The more cores you have, that much faster archive & export will finish.
When you need to do a dozen of releases (big company, many markets) for each version, this…well, like I said, it takes some time. This is primary use-case for multi-core monster in my workflow.
Second, less critical issue is general day to day work. Performance considerations here are related around maximum single-core performance. It’s common that CPUs with less cores have higher single-core performance thus you need to find proper balance for your workflow. My experience tells me that all modern CPUs (from 2016+) will do just fine in single-core.
There are some aspects of the daily workflows where multi-core performance comes into play:
- Throughout the day, you’ll regularly be making builds of the app you are working on; thankfully, that’s incremental.
- In order for code completion to work, Xcode needs to index all the source files in the workspace / project, which is thankfully also incremental.
Still, as larger those projects are, more work will need to be done. If you jump between projects 2 and/or work in a team of developers, you are bound to see this progress bar daily.
Those 5000 RPMs that MacBook Pro fans are spinning at, those are very noticeable.
If you need to clear DerivedData folder for whatever reason 3 than you’ll be seeing this for half an hour or more:
During all that time, your CPU cores will be fairly busy but thankfully fans usually stay under 3k RPMs which is inaudible even in a quiet office space. I am honestly impressed how Xcode is able to deal with all this and how well it scales up and down, adapting to the Mac it’s running on.
With practical examples like those above, I want to emphasize a very important point: for Mac/iOS developers using Xcode, number of CPU cores is one of the most important parameters of their development machine. The more cores you have, the better it works. Amount of memory influences the experience up to a point; after you put 16GB inside, jumping to 32GB will not yield much benefit.4
It’s all about the CPU. Everything else in the machine is not really relevant. Expandability, storage, graphics card - these can all be as basic as possible and it would not matter. Thus what developers need (or at least I do) is Mac mini with double-digit cores.
Why is Apple not offering that?
The available solutions from Apple
I’ll compare models with 16GB RAM and 1TB SSD. I believe that’s the minimum a professional developer machine should have. I ignore graphic cards, picked whatever is offered as minimum.
-
You can buy MacBook Pro. In 2016, I bought the top model with 4-core i7 Intel CPU, which in the US was about $3,000 at the time. In 2019, same amount of money gets you top model but with 8-core i9 Intel CPU.
-
In most modern Mac mini, from 2018, top model gets you 6-core i7 Intel CPU for about $1,900.
-
Top of the line iMac gets you 8-core i9 Intel CPU, for $3,200.
Now, all of these CPUs are from the same CPU family: Mobile Core series. This is important to remember as these CPUs do not go above 8 cores. None of them. Even if you jump from mobile to desktop Core CPUs, maximum number of cores stays 8, you just have more TDP headroom. Higher TDP, more serious cooling solution you need to apply. Given that all 3 mentioned Mac lines are thin, mobile CPUs with up to 45W TDP is all Apple can offer.
One step above that is Intel’s Core X-series. These are awesome as you can have up to 18 cores. Yay! But they generate a lot of heat which require massive tower coolers or water-cooling and similar stuff. Sadly, Apple does not use these CPUs, anywhere.
One (huge) step above that are Intel’s Xeon Processors. They have 3 major lines and once you move into Apple’s Pro land, you’ll find they exclusively use Xeon W CPUs which cost a lot (multiple $1000s just for CPU). It’s no wonder then that Pro desktops from Apple are expensive:
- iMac Pro starts with 8-core model at $5,000 and go as high as 18 cores for $7,300.
- Mac Pro starts with 8-core model at $6,400 and goes up to 28 cores for $13,400
That’s huge amount of money for a professional developer workstation. Apple loves to brag how they democratized professional software distribution with App Store. But the machines they offer still clearly separate hobbyist and small indie dev shops from big companies.
The missing link
The problem with Intel’s CPU lineup is if you – as system manufacturer – want to move between CPU series, you need to design it around different CPU architectures.
Mobile Core CPUs use BGA1440 socket you put them in. Desktop Core CPUs use LGA1151 socket. Desktop Core-X CPUs and Xeon CPUs use LGA2066 socket. There’s different chipset and memory / bus requirements for each. Given all that, it is not possible to simply switch CPUs from different series. One has to architect and maintain multiple models and production lines with those differences in mind.
Apple being Apple, they scoped down to two lines: mainstream customers would have to settle for Mobile CPUs while Pro customers would get the very top of the line and that’s it. They completely skipped the desktop sweet-spot in the middle.
The ideal developer-oriented Mac using Intel CPUs could be built:
- around mini-ITX motherboard
- with or without integrated graphics
- with optional (very powerful) discreet graphics
- all housed in chassis of 10-15L volume
- using Core-X CPUs
It would be larger but way, way more powerful than Mac mini with those TDP-constrained mobile CPUs can ever be.
Is this a pipe-dream then?
Hell, no!
SFF5 enthusiasts are crowd-sourcing and crowd-funding such cases with ingenious internal layouts and cooling solutions. I’m certain that Apple could design something amazing in this space, if they wanted to.
It’s worth noting that even if such an offer from Apple existed, it would not be very affordable in large part because of Intel’s prices. I can easily see it starting at $3000 and going up to double that. Because for so many years back, Intel did not have serious competition and they were dragging their feet in performance while keeping high prices. Until early last year when Apple’s favorite graphics partner called AMD unleashed Ryzen CPUs with Zen2 architecture. Those cost less than Intel’s while offering significantly more performance.
Here’s the hook: would you buy a 12L aluminum case with 16-core CPU inside it? What if I tell you this costs less than $2,000, today? What if I also tell you this CPU demolishes price-comparable (or more expensive) Intel CPUs?
I would be perfectly happy to pay $3,000+ for a machine with that CPU housed in Apple-designed case and cooling. If only Apple offered it.