I am very impressed with the Apple M1 benchmark results. It is a really fast and powerful chip in important day to day tasks like web browsing, working with x86 applications, and developer tools. Yes, the ecosystem is still underdeveloped and it may take a while, but the work is worth it given the phenomenal performance of the M1.
The M1 is really fast and many benchmarks have proven its effectiveness. However, I was curious to see the performance of programming languages. So I decided to test the chip in the most popular development workloads.
Keep in mind that some test suites are memory intensive, others depend on CPU performance, and some tasks do not benefit from multicore processing due to the overhead or complexity of using multithreading. This means the M1 can perform better than the desktop Ryzen with even fewer cores. Most importantly, I focused on testing real-world development problems, not synthetic production tests.
Benchmark raw data here .
Note: The 3900X core count is useless for benchmarks that do not show actual performance in production. But the developers themselves work most of the time on laptops, desktops, etc., so such tests make sense. Of course, the Ryzen 3900X will perform much better in production than the M1 and Intel, mainly due to the parallelism.
Test environment
- Apple M1: Mac Mini (16 GB RAM), MacBook Air (8 GB RAM) / macOS Big Sur 11.0.1 (all benchmark binaries are natively compiled for Apple chips).
- Ryzen 3900X: ASRock Rack X570D4I-2T / 16GB DDR4-3200 × 2 / Ubuntu 20.04.1 LTS ( ) — , 3900X Ryzen 5000: . , .
- Intel i7-9750H: MacBook Pro 16" / 16 / macOS Big Sur 11.0.1
- Intel i9-9880H: MacBook Pro 16" / 32 / macOS Big Sur 11.0.1
Java Renaissance
Less is Better
Renaissance is a modern, open and diversified JVM test suite aimed at testing JIT compilers, garbage collectors, profilers, analyzers, and other tools.
Since the JVM requires a lot of memory and memory is one of the main bottlenecks for any Java application, the performance of the Apple M1 is staggering compared to the Ryzen 3900X.
Java SciMark 2.0 (NIST)
More is Better
SciMark 2.0 is a Java benchmark for scientific and numerical computing. It measures the performance of multiple cores and reports a summary estimate in approximate megaflops (millions of floating point operations per second).
Java DaCapo
Less is more
The DaCapo test suite consists of a set of open source real world applications with non-trivial memory usage.
Python PyPerformance
Less is Better
The PyPerformance project should serve as the authoritative benchmark source for all Python implementations. The focus is on real benchmarks, not synthetic benchmarks. Full applications are used where possible.
Go (golang.org/x/benchmarks)
Less is Better
Note that in this benchmark, Go uses all cores.
Go ( golang-benchmarks )
(Units of measurement: nanoseconds per operation, less is better)
Apple M1 (Mac Mini) | Apple M1 (MacBook Air) | Ryzen 3900X | Intel i7-9750H | |
---|---|---|---|---|
BenchmarkBase64decode-24 | 68,65 | 69,77 | 137,1 | 103 |
BenchmarkBase64regex-24 | 12001 | 12001 | 32803 | 18255 |
BenchmarkNumberRegEx-24 | 7759 | 7931 | 23379 | 12206 |
BenchmarkFulltextRegEx-24 | 6388 | 6388 | 18627 | 10014 |
BenchmarkNumberParse-24 | 48,69 | 50,19 | 66,83 | 58 |
BenchmarkFulltextParse-24 | 726,3 | 726,3 | 933,2 | 839 |
BenchmarkConcatString-24 | 21949 | 22810 | 65498 | 43343 |
BenchmarkConcatBuffer-24 | 4,338 | 4,648 | 6,258 | 6,24 |
BenchmarkConcatBuilder-24 | 2,37 | 3,1 | 2,934 | 3,02 |
BenchmarkContains-24 | 5,007 | 5,204 | 7,467 | 7,94 |
BenchmarkContainsNot-24 | 6,322 | 6,322 | 7,693 | 8,9 |
BenchmarkContainsBytes-24 | 5,33 | 5,511 | 7,5 | 8,49 |
BenchmarkContainsBytesNot-24 | 6,57 | 6,773 | 9,188 | 10,3 |
BenchmarkCompileMatch-24 | 70,66 | 75,09 | 110,1 | 83 |
BenchmarkCompileMatchNot-24 | 31,65 | 32,08 | 62,42 | 42,1 |
BenchmarkMatch-24 | 800,2 | 804,6 | 2376 | 1313 |
BenchmarkMatchNot-24 | 758,1 | 779,3 | 2311 | 1262 |
BenchmarkForMap-24 | 18,89 | 18,92 | 20,37 | 20,6 |
BenchmarkRangeMap-24 | 47,66 | 48,59 | 53,25 | 56,7 |
BenchmarkRangeSlice-24 | 3,446 | 3,47 | 2,022 | 3,4 |
BenchmarkRangeSliceKey-24 | 4,072 | 4,121 | 2,906 | 3,15 |
BenchmarkAdler32-24 | 699 | 719,4 | 644,4 | 700 |
BenchmarkBlake2b256-24 | 2340 | 2415 | 2026 | 1932 |
BenchmarkBlake2b512-24 | 2343 | 2400 | 1985 | 1945 |
BenchmarkBlake3256-24 | 5753 | 5854 | 2489 | 2634 |
BenchmarkMMH3-24 | 374,3 | 383,2 | 294 | 377 |
BenchmarkCRC32-24 | 255,5 | 260,4 | 152,9 | 122 |
BenchmarkFnv128-24 | 4468 | 4502 | 5540 | 4210 |
BenchmarkMD5-24 | 3193 | 3211 | 2464 | 2534 |
BenchmarkSHA1-24 | 900,4 | 910,9 | 1898 | 1961 |
BenchmarkSHA256-24 | 913,5 | 927,6 | 4016 | 4525 |
BenchmarkSHA512-24 | 6999 | 7033 | 2883 | 3249 |
BenchmarkSHA3256-24 | 4213 | 4231 | 5957 | 5878 |
BenchmarkSHA3512-24 | 7329 | 7429 | 10233 | 10394 |
BenchmarkWhirlpool-24 | 32042 | 32624 | 35714 | 39205 |
BenchmarkMapStringKeys-24 | 68,14 | 70,66 | 87,62 | 100 |
BenchmarkMapIntKeys-24 | 43,6 | 48,49 | 42,51 | 60 |
BenchmarkJsonMarshal-24 | 1240 | 1261 | 2258 | 1720 |
BenchmarkJsonUnmarshal-24 | 4969 | 5102 | 9597 | 6484 |
BenchmarkMathInt8-24 | 0,3128 | 0,3235 | 0,2298 | 0,24 |
BenchmarkMathInt32-24 | 0,3145 | 0,3166 | 0,2324 | 0,239 |
BenchmarkMathInt64-24 | 0,3131 | 0,3158 | 0,2367 | 0,237 |
BenchmarkMathAtomicInt32-24 | 6,9 | 6,965 | 4,02 | 4,33 |
BenchmarkMathAtomicInt64-24 | 6,898 | 7.051 | 4,044 | 4.27 |
BenchmarkMathMutexInt-24 | 13.51 | 13.63 | 8.118 | 12.1 |
BenchmarkMathFloat32-24 | 0.3142 | 0.3142 | 0.3142 | 0.241 |
BenchmarkMathFloat64-24 | 0.313 | 0.313 | 0.313 | 0.239 |
BenchmarkParseBool-24 | 1,427 | 1.43 | 0.2252 | 0.308 |
BenchmarkParseInt-24 | 10.97 | 11.15 | 11.84 | 13.5 |
BenchmarkParseFloat-24 | 64.52 | 65.74 | 90.89 | 87 |
BenchmarkMathRand-24 | 13.55 | 13.55 | 17.27 | 21.5 |
BenchmarkCryptoRand-24 | 106.6 | 112 | 1311 | 145 |
BenchmarkCryptoRandString-24 | 107.6 | 110.7 | 222 | 138 |
BenchmarkMatchString-24 | 4957 | 5148 | 13869 | 7616 |
BenchmarkMatchStringCompiled-24 | 475.5 | 496.2 | 499.2 | 464 |
BenchmarkMatchStringGolibs-24 | 479.3 | 496.3 | 491.3 | 480 |
SQLite Bench
Less is better
Redis
The bigger, the better
JavaScript Web Tooling Benchmark (v8)
Bigger is Better
V8 Web Tooling Benchmark is a suite of benchmarks for measuring JavaScript workloads in web development, such as core workloads in popular tools like Babel and TypeScript. The goal is to measure specifically JavaScript performance (which is affected by the JavaScript engine), not I / O or other unrelated aspects.
For a detailed description of the tests in this suite, see here .
JavaScript Octane 2.0
The bigger, the better
Webpack Build
Less is better
Target build project: antd-admin .
Conclusion
The performance of the Apple M1 chip is very impressive. In real tasks it performs better than the current x86.