Много съм впечатлен от резултатите от тестовете на Apple M1. Това е един наистина бърз и мощен чип, който се проявява много добре при важните ежедневни задачи, при прегледа на всякакви уеб страници, при работата с x86 приложения и с инструментите за разработчиците. Да, тази екосистема все още не е развита и това може да отнеме известно време, но си струва, като се има предвид феноменалната производителност на M1.
М1 е наистина бърз и редица бенчмаркове доказаха неговата ефективност. Но на мен ми бе интересно да проверя каква е производителността на този чип при използването на различни езици за програмиране. Ето защо реших да го тествам с помощта на най-различни популярни алгоритми, които се използват в ежедневното уеб програмиране.
Трябва да се има предвид, че някой от тези тестове натоварват паметта, други зависят от производителността на централния процесор, в някои случаи се проявяват преимуществата от многоядрената работа, а при други реализирането на многонишкова работа е по-трудно. Всичко това означава, че M1 в редица случаи може да покаже по-добър резултат в сравнение с десктоп версиите на Ryzen, дори и при по-малък брой на процесорните ядра. Но най-главното, върху които се фокусирах при тези тестове e, че използвах реални ежедневни задачи, а не синтетични бенчмаркове.
Суровите данни за моите бенчмаркове са представени ето тук.
Забележка: броят на ядрата на 3900X е безполезен за тестовете, които не показват реалната производителност в предприятията и изобщо, в производството. Но самите програмисти и разработчици, през по-голямата част от времето си работят с лаптопи, десктоп компютри и т.н. – ето защо от тези тестове има смисъл. Разбира се, в производството Ryzen 3900X работи многократно по-добре и по-бързо в сравнение с M1 и процесорите на Intel, предимно заради разпаралелването на алгоритмите.
Тестовото оборудване
- Apple M1: Mac Mini (16 GB RAM), MacBook Air (8 GB RAM) / macOS Big Sur 11.0.1 (всички изпълними двоични файлове са компилирани за чиповете на 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 GB / macOS Big Sur 11.0.1
- Intel i9-9880H: MacBook Pro 16″ / 32 GB / macOS Big Sur 11.0.1
Да напомним, че фирменият ARM чип на Apple за Mac се произвежда чрез 5 нанометров технологичен процес и разполага с четири бързи и четири икономични процесорни ядра, осем графични ядра и невронния модул Neural Engine, който има 16 собствени ядра.
Java Renaissance
Колкото са по-малки резултатите, толкова е по-добре
Renaissance е един съвременен, отворен и диверсифициран комплект от тестове за JVM, базира на тестовете на JIT компилаторите, оптимизаторите, профайлърите, анализаторите и другите подобни инструменти.
Тъй като JVM изисква много памет, а паметта е едно от основните тесни места за всички Java приложения, то производителността на Apple M1 поразява в сравнение с Ryzen 3900X.
Java SciMark 2.0 (NIST)
Колкото повече, толкова по-добре
SciMark 2.0 Java Benchmark е за научни изчисления. Той измерва производителността на няколко изчислителни ядра и показва една обща оценка в приблизителни мегафлопа (милиони операции с плаваща запетая в секунда).
Java DaCapo
Колкото по-малко, толкова по-добре
Комплектът тестове DaCapo е съставен от няколко приложения с отворен код, които масово се използват в реалния живот и използват немалко памет.
Python PyPerformance
Колкото по-малко, толкова по-добре
Проектът PyPerformance е авторитетен източник за бенчмаркове за всички реализации на програмния език Python. Обърнато е основно внимание на реалните, а не на синтетичните тестове. Където е възможно се използват цялостни реални приложения.
Go (golang.org/x/бенчмаркове)
Колкото по-малко, толкова по-добре
Обърнете внимание, че в този бенчмарк, реализиран на програмния език Go, се използват всички ядра.
Go (golang-benchmarks)
Измерванията са наносекунди на операция. Колкото по-малко, толкова по-добре
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
Колкото по-малко, толкова по-добре
Redis
Колкото повече, толкова по-добре
JavaScript Web Tooling Benchmark (v8)
Колкото повече, толкова по-добре
V8 Web Tooling Benchmark е комплект от тестове за измерване на JavaScript работните натоварвания при уеб програмирането, като например работното натоварване в популярните софтуерни инструменти от рода на Babel и TypeScript.. Целта е да се измери конкретната производителност на JavaScript, на която по-голямо влияние оказва JavaScript енджина, а не входно/изходните операции и някои други аспекти.
Ето тук е дадено подробното описание на тестовете в този комплект.
JavaScript Octane 2.0
Колкото повече, толкова по-добре
Webpack Build
Колкото по-малко, толкова по-добре
Целевият проект на компилацията: antd-admin.
Извод
Производителността на чипа Apple M1 впечатлява изключително много. В реалните задачи по уеб програмиране той се представя по-добре от сегашните x86 чипове. Ненапразно с всеки изминал ден излизат все повече обикновени и професионални приложения с нативната поддръжка на процесорните инструкции на чипа Apple М1.