In this article I will try to answer the following question: is it worth upgrading to the new Apple M2 Pro Mac Mini having an old M1 Mac Mini? All this from the perspective of a software developer, and in order to have data with which to answer this question I am going to run performance tests compiling native iOS and native Android applications, I am also going to compile Flutter apps both in Android and iOS. Also, I'll build the Godot open-source game engine to see how this new Mac handles building C++ projects, and to finish I'll build a small Unity project.
I am going to run all these batteries of tests and give you the performance values on both the old Mac Mini with the M1 chip and the new Mac Mini with the M2 Pro chip. I hope the data that you will find in this article will help you understand better the difference between the two devices.
Before we start, let me detail the specifics of the two machines that are going to be tested. On one hand, we have the old Mac Mini:
Processor: Apple M1
CPU: 8 cores (4 performance cores and 4 efficiency cores)
GPU: 8 cores
Neural engine: 16 cores
OS: macOS 13.2
And on the other hand, we have the new Mac Mini, specifically the base model that incorporates the M2 Pro chip:
Processor: Apple M2 Pro
Cores: 10 cores (6 performance cores and 4 efficiency cores)
GPU: 16 cores
Neural engine: 16 cores
OS: macOS 13.2
I am going to divide the tests into three large groups:
First I will run several synthetic tests. I will do it very briefly and condensed; since these types of tests do not always accurately represent the performance of a machine.
In the second part, I will run compile tests on different platforms.
Finally, in the miscellaneous section I will execute some additional tests.
To execute the tests accurately I have observed the following methodology:
The mac has been turned on from its off state. In case the surface showed signs of being hot, I have let it sit until it came back to room temperature.
Each test has been done in isolation, with only the system and its applications running to avoid interferences.
In some cases I have been able to use the
timetool to accurately measure times, in others where this has not been possible I have used an external stopwatch. In this second case, the measurement contains a small margin of error, since I have done the start and stop of the stopwatch manually.
I also consider it appropriate to tell you that both the result and the improvement values that I show in each test are rounded. It is not my intention to give an absolutely precise result for each test but to show an approximate value. This means that a value of 50.3 will be rounded to 50 and a value of 80.7 to 81.
We start the round of synthetic tests testing the CPU with Cinebench:
Cinebench R23 single-core:
Mac Mini M1: 1523
Mac Mini M2 Pro: 1649
These data indicate an improvement of approximately 8% in single-core operations.
Cinebench R23 multi-core:
Mac Mini M1: 7829
Mac Mini M2 Pro: 11801
Here we see a huge improvement of around 50% in multi-core operations.
We continue with more CPU tests with Geekbench:
Geekbench 5 single-core:
Mac Mini M1: 1765
Mac Mini M2 Pro: 1963
This represents an improvement of 11%.
Geekbench 5 multi-core:
Mac Mini M1: 7764
Mac Mini M2 Pro: 12161
Here we see again an interesting improvement of 57%.
We continue with Geekbench, this time with its compute test with the Metal API:
Mac Mini M1: 21643
Mac Mini M2 Pro: 47308
The improvement in this case is 118%. It's at this point where you can see the largest number of GPU cores in the new Mac Mini with an M2 Pro chip.
Now we move on to Speedometer, which is basically a bunch of tests all running in a web browser:
Mac Mini M1: 293
Mac Mini M2 Pro: 334
Here we can see an improvement of 14%.
Next, we test what framerate each machine can reach by running a three-dimensional simulation with GFX Bench, specifically the Aztec Ruins test in 4K:
Mac Mini M1: 35FPS
Mac Mini M2: 79FPS
We see a remarkable improvement of 126%.
To finish with the synthetic tests, I am going to execute a disk reading and writing test with AmorphousDiskMark:
Mac Mini M1:
Mac Mini M2 Pro:
We can clearly see that in this sense this Mac has also improved.
Code compilation tests
Let's start the benchmarks with real projects with XcodeBenchmark, which is nothing more than a huge Xcode project built specifically for benchmarking Apple computers. In this case we will obtain a value in seconds, with which the lower the value, the better the performance has been:
Mac Mini M1: 129 seconds
Mac Mini M2 Pro: 93 seconds
Here we can see a nice improvement of 28%, which can give you clues as to how much you could improve your workflow in case you are an iOS developer.
Continuing with Xcode, I wanted to also try running a project within the IDE. Specifically, I have executed the well-known encrypted messaging application, Signal. The measurement goes from the moment the play button is pressed until the first frame appears in the simulator:
Mac Mini M1: 152 seconds
Mac Mini M2 Pro: 125 seconds
In this case we have an improvement of 18%.
Now we move to the world of Android development. In this case, I have run a debug build of Signal, but this time the native Android version. The command used has been
./gradlew assembleDebug, I have used debug and not release since it is the most used command when developing:
Mac Mini M1: 241 seconds
Mac Mini M2 Pro: 162 seconds
A total improvement of 33%, is quite interesting if you dedicate yourself to the development of Android applications.
Just like I did with iOS, I wanted to try running an app from Android Studio. For this I have executed Infinity, which is an alternative open-source client for Reddit:
Mac Mini M1: 48 seconds
Mac Mini M2 Pro: 20 seconds
This test shows an impressive improvement of 58%.
Now we move to cross-platform development with Flutter. For this, I am going to make a compilation in release of the Wonderous app. I use release since in this way I force Flutter to optimize the Dart code, and in this way we obtain a slightly denser test:
Results for building an Android APK:
Mac Mini M1: 48 seconds
Mac Mini M2 Pro: 38 seconds
We see an improvement of 21%.
Results when compiling for iOS:
Mac Mini M1: 67 seconds
Mac Mini M2 Pro: 51 seconds
In this case the improvement is 24%.
These numbers are certainly a nice improvement for all Flutter developers.
We are now going to test the performance of this new machine by compiling a C++ project. Specifically for this test I have chosen the Godot open-source engine. This project is medium in size and quite easy to build, so here we go:
Mac Mini M1: 136 seconds
Mac Mini M2 Pro: 85 seconds
We see a noticeable improvement of 38% when compiling Godot. Definitely a good number if you're interested in this kind of low-level code builds.
To finish all this battery of tests we are going to see how each of the machines performs executing a project in the Unity engine. Specifically, the Third-Person sample, which is an official 3D sample. The test is to create a clean, self-running build for Mac:
Mac Mini M1: 82 seconds
Mac Mini M2 Pro: 59 seconds
We see that in this case the improvement is 28%.
And to finish I bring you the result of running the Blender benchmark. This benchmark consists of 3 different scenes:
Mac Mini M1: 62.039165
Mac Mini M2: 98.028404
Mac Mini M1: 37.583881
Mac Mini M2: 57.667289
Mac Mini M1: 28.222546
Mac Mini M2: 44.594728
We're certainly seeing those extra graphics cores perform much better on the new Mac Mini with the M2 Pro chip than the old one with the M1 chip.
Analysis of the results
As a final conclusion, it remains to be seen if the improvement is substantial enough to justify the purchase of this new Mac. In the case of workflows that include graphical processes, I think the general improvement of this machine with the M2 Pro chip has been evident. In case you are a developer and depend on compilations executed by the CPU, you may be interested in doing the upgrade if you work with large codebases that take several minutes to compile.
In any case, here are the results that I have been able to obtain and only you know your workflow and the type of projects you usually work with.
I hope this article has been useful to you and that it has allowed you to draw interesting conclusions.
Thank you for reading this far.
Happy coding :)