Apple M1 benchmarks in real development





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.



All Articles