Repères Apple M1 en développement réel





Je suis très impressionné par les résultats de référence Apple M1. C'est une puce très rapide et puissante dans les tâches quotidiennes importantes telles que la navigation Web, l'utilisation d'applications x86 et les outils de développement. Oui, l'écosystème est encore sous-développé et cela peut prendre un certain temps, mais le travail en vaut la peine compte tenu des performances phénoménales du M1.



Le M1 est vraiment rapide et de nombreux benchmarks ont prouvé son efficacité. Cependant, j'étais curieux de voir les performances des langages de programmation. J'ai donc décidé de tester la puce dans les charges de travail de développement les plus populaires.



Gardez à l'esprit que certaines suites de tests nécessitent beaucoup de mémoire, d'autres dépendent des performances du processeur et que certaines tâches ne bénéficient pas du traitement multicœur en raison de la surcharge ou de la complexité de l'utilisation du multithreading. Cela signifie que le M1 peut fonctionner mieux que le Ryzen de bureau avec encore moins de cœurs. Plus important encore, je me suis concentré sur les tests de tâches de développement dans le monde réel plutôt que sur les tests de production synthétiques.



Comparez les données brutes ici .



Remarque: le nombre de cœurs 3900X est inutile pour les benchmarks qui ne montrent pas les performances réelles en production. Mais les développeurs eux-mêmes travaillent la plupart du temps sur des ordinateurs portables, des ordinateurs de bureau, etc., donc de tels tests ont du sens. Bien sûr, le Ryzen 3900X fonctionnera bien mieux en production que le M1 et Intel, principalement en raison du parallélisme.



Environnement de test



  • Apple M1: Mac Mini (16 Go de RAM), MacBook Air (8 Go de RAM) / macOS Big Sur 11.0.1 (tous les binaires de référence sont compilés nativement pour les puces Apple).

  • 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 est une suite de tests JVM moderne, ouverte et diversifiée destinée à tester les compilateurs JIT, les garbage collector, les profileurs, les analyseurs et d'autres outils.



Étant donné que la JVM nécessite beaucoup de mémoire et que la mémoire est l'un des principaux goulots d'étranglement pour toute application Java, les performances de l'Apple M1 sont stupéfiantes par rapport au Ryzen 3900X.



Java SciMark 2.0 (NIST)



More is Better







SciMark 2.0 est une référence Java pour le calcul scientifique et numérique. Il mesure les performances de plusieurs cœurs et rapporte une estimation récapitulative en mégaflops approximatifs (millions d'opérations en virgule flottante par seconde).



Java DaCapo



Plus petite, meilleure est la







suite de tests DaCapo se compose d'un ensemble d'applications du monde réel opensorsnyh utilisation de la mémoire non triviale.



PyPerformance Python



Less is Better











Le projet PyPerformance devrait servir de source de référence faisant autorité pour toutes les implémentations Python. L'accent est mis sur de vrais benchmarks, pas sur des benchmarks synthétiques. Des applications complètes sont utilisées lorsque cela est possible.



Allez (golang.org/x/benchmarks)



Less is Better







Notez que dans ce benchmark, Go utilise tous les cœurs.



Allez ( golang-benchmarks )



(Unités de mesure: nanosecondes par opération, moins c'est mieux)



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 11h15 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


Banc SQLite



Moins c'est mieux











Redis



Le plus gros le meilleur







Benchmark des outils Web JavaScript (v8)



Bigger is Better







V8 Web Tooling Benchmark est une suite de benchmarks pour mesurer les charges de travail JavaScript dans le développement Web, telles que les charges de travail de base dans des outils populaires tels que Babel et TypeScript. L'objectif est de mesurer spécifiquement les performances JavaScript (qui sont affectées par le moteur JavaScript), et non les E / S ou d'autres aspects non liés.



Pour une description détaillée des tests de cette suite, cliquez ici .



JavaScript Octane 2.0



Le plus gros le meilleur











Construction du Webpack



Moins c'est mieux



Projet de build cible: antd-admin .







Conclusion



Les performances de la puce Apple M1 sont très impressionnantes. Dans les tâches réelles, il fonctionne mieux que le x86 actuel.



All Articles