[Перевод] Бенчмарки Apple M1 в реальной разработке
Я очень впечатлён результатами тестов Apple M1. Это действительно быстрый и мощный чип в важных повседневных задачах, таких как просмотр веб-страниц, работа с приложениями x86 и инструментами разработчика. Да, экосистема ещё не развита, и это может занять некоторое время, но эта работа стоит того, с учётом феноменальной производительности M1.
М1 действительно быстрый, и многие бенчмарки доказали его эффективность. Однако мне было любопытно посмотреть на производительность языков программирования. Поэтому я решил протестировать чип в самых популярных рабочих нагрузках в разработке.
Следует иметь в виду, что некоторые наборы тестов нагружают память, другие зависят от производительности CPU, а в некоторых задачах нет преимущества от многоядерной обработки из-за накладных расходов или сложности использования многопоточности. Это означает, что M1 может показать лучший результат, чем десктопный Ryzen даже с меньшим количеством ядер. Самое главное, что я сосредоточился на тестах реальных задач разработки, а не на синтетических тестах продакшна.
Исходные данные бенчмарка здесь.
Примечание: количество ядер 3900X бесполезно для тестов, которые не показывают реальную производительность в продакшне. Но сами разработчики большую часть времени работают на ноутбуках, настольных компьютерах и т. д., поэтому такие тесты имеют смысл. Конечно, в продакшне Ryzen 3900X будет работать намного лучше, чем M1 и Intel, в основном, за счёт распараллеливания.
Тестовое окружение
- Apple M1: Mac Mini (16 ГБ RAM), MacBook Air (8 ГБ 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 ГБ / macOS Big Sur 11.0.1
- Intel i9-9880H: MacBook Pro 16″ / 32 ГБ / macOS Big Sur 11.0.1
Java Renaissance
Чем меньше, тем лучше
Renaissance — это современный, открытый и диверсифицированный набор тестов для JVM, направленный на тестирование JIT-компиляторов, сборщиков мусора, профайлеров, анализаторов и других инструментов.
Поскольку JVM требует большого объёма памяти, а память является одним из главных узких мест для любых Java-приложений, производительность Apple M1 ошеломляет по сравнению с Ryzen 3900X.
Java SciMark 2.0 (NIST)
Чем больше, тем лучше
SciMark 2.0 — это Java-бенчмарк для научных и численных вычислений. Он замеряет производительность несколько вычислительных ядер и сообщает сводную оценку в приблизительных мегафлопсах (миллионы операций с плавающей запятой в секунду).
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 М1 очень впечатляет. В реальных задачах он проявляет себя лучше, чем нынешние x86.
ИИ находит вдвое больше программных уязвимостей, но хакеры их почти не используют
Rocket Lab открыла четвёртый космодром на Аляске для расширения сети запусков
Китайские астрономы открыли уникальный пульсар с аномальным замедлением и нулевым гамма-излучением
Раскрыты характеристики глобальной версии Redmi Note 17 Pro Max: батарея 9210 мА·ч, зарядка 100 Вт, защита IP69K и чип Snapdragon 6 Gen 5
Запущен первый спутниковый флот для обнаружения лесных пожаров на ранней стадии
Россия открывает доступ к квантовому процессору SnowDrop 8Q на 8 кубитов
Смартфон Samsung Galaxy A37 перевели на квартальные обновления спустя всего четыре месяца после релиза
Кабмин увеличит финансирование достройки первых серийных Ил-114-300