When More Is Less: Photoshop Slower With 12 Cores Than 6
See the diglloydMedium benchmark.
For several years, I’ve lamented the scalability issues with Photoshop. Yet nothing has changed with CS5; the 2010 12-core Mac Pro at 3.33GHz shows severely impaired performance compared to the 6-core model. It’s not only not better, it’s worse—a lot worse (see graph below). And 12 cores are slower than the 4-core model too!
More cores and more memory?
Giving CS5 twice the memory (48GB) and twice the cores (12) causes its performance to decline by 32%. Throwing money at a problem is not always the solution!
Photoshop is the problem; it does not scale beyond 4 cores
While the 6-core model is slightly faster than the 4-core model, it also has a 50% larger on-chip cache. And don’t confuse the small gain seen with 6 cores (vs 4) with scalability; that marginal increase means that it does not scale from 4 to 6 cores.
As further confirmation, the 8-core 2.93GHz model is faster than the 12-core 3.33GHz model in this test; all the results are consistent: more than 4 cores means marginal improvement, followed by degraded performance.
Below is a graph with more machines at other speeds. The rule holds— too many cores is a drag on performance (the iMac is slow because of only 16GB memory).
Disabling hyperthreading is easy, but you’ll have to download Apple’s developer tools to get the Processor control panel (maybe there is some other program that I’m unaware of). But it’s good for a 25% performance gain with the 3.33GHz 12-core Mac Pro!
CPU cores can be disabled, making it possible to analyze the behavior with and without hyperthreading (hyperthreading = virtual cores) and various numbers of real hardware CPU cores.
That a user should have to disable CPU cores to improve CS5 performance is not funny.
The graph below show a number of variants with varying numbers of cores with and without hyperthreading. All machines at 3.33GHz.
HT-off means that hyperthreading is off (no virtual cores) N/6 means that N cores of 6 are used, N/12 means N cores of 12 Which particular cores are disabled can also affect the results, but the pattern holds.
The 2010 3.33GHz 6-core is the easy winner, with the 12-core 3.33GHz machine far behind. Note that with hyperthreading disabled, the 3.33GHz 6-core gains 7% more performance.
That the 12-core 3.33Ghz model is 31% slower than the 3.33GHz 6-core model is surprising. More suprising is that with a single CPU core, the hexacore still outperforms. This makes no sense, but I re-ran the tests multiple times with very consistent results. Some is screwball in Photoshop land.
Why does Photoshop CS5 perform so much worse with 12 CPU cores?
In general, more threads incur scheduling and synchronization overhead in attacking the problem (e.g., shared mutex locks and similar synchronizers). Such issues are a well-understood challenge in multi-threaded architectures, and often a serious problem in scaling to more CPU cores. I’ve written quite a lot of such high-contention computer code in multi-threaded server software, so those statements are based on the realities of software design as a professional software engineer.
My reckoning is that the internal CS5 code architecture was designed for 2-4 cores some years ago, and is algorithmically inappropriate for systems with more than 4 cores—hence minimal improvement when going from 4 to 6 cores, and a sharp degradation beyond that. Will Adobe fix this? We can hope, but past actions are a strong predictor of the future.
Here is what I observed for thread allocation in CS5. Oddly, 12 cores with and without hyperthreading show the same number of threads allocated (12 hardware cores or 24 virtual cores). Perhaps a hard-coded limit exist.
1 core: 30 threads 2 cores: 34 threads 4 cores: 42 threads 8 cores: 58 threads 12 cores: 68 threads 24 cores: 68 threadsAll the internal reasons that CS5 degrades are known only to Adobe;, but the tests speak for themselves.