Появилась возможность протестировать инженерный процессор Эльбрус-16С и сравнить его с предыдущим процессором Эльбрус-8СВ.
Эта статья является продолжением моих предыдущих статей по бенчмаркам Эльбрусов:
Эльбрус-16С на архитектуре e2k-v6 является развитием процессора Эльбрус-8СВ (e2k-v5), который имеет 16 ядер на частоте 2 ГГц, поддержку аппаратной виртуализации, поддерживает до 4 ТБ оперативной памяти DDR4-3200, 32 линии PCIe 3.0.
Тестируемый процессор работает на материнской плате 1Э16С-mATX c двумя установленными модулями памяти DDR4 на частоте 2400.
Внимание: тестируется инженерный процессор с частично отключенным кешем, у серийного образца результаты должны быть лучше.
Фото инженерной платы из интернета (на фото плата не моего экземпляра):
К результатам процессоров Эльбрус-16С и Эльбрус-8СВ добавляю процессор Intel Core i7-2600 для относительного сравнения.
Характеристики сравниваемых процессоров:
Эльбрус-16СВ | Эльбрус-8СВ | Core i7-2600 | |
Семейство ISA | VLIW | VLIW | CISC |
Архитектура | e2k | e2k | x86-64 |
Микроархитектура | elbrus-v6 | elbrus-v5 | Sandy Bridge |
Частота (МГц) | 2000 | 1500 | 3400* |
Ядра; Потоки | 16 | 8 | 4; 8 |
Техпроцесс (нм) | 16 | 28 | 32 |
TDP (Вт) | 130 | 80-90 | 95 |
Тип ОЗУ | DDR4-3200 (2400) | DDR4-2400 | DDR3-1333 |
Год | 2021 | 2018 | 2011 |
* — У Intel Core i7-2600 частота бустится, ядер 4, но 8 потоков HT.
Список компилируемых тестов (на языках С и C++):
Dhrystone, Whetstone, Linpack 100, Scimark 2, SuperPI
MP MFLOPS
TLB test, STREAM
HPL (High Performance Linpack)
7zip встроенный бенчмарк
StockFish (встроенный тест шахматного движка)
Cpu Miner (minerd)
Рендеринг в Blender (Файл для теста)
Готовые результаты в SPEC 2006
Кроме того, я запускал тесты на языках программирования Java, C#, Python, PHP, Lua. Результаты: https://github.com/EntityFX/EntityFX-Bench/tree/master/results
Теперь сразу перейдём к сводной таблице с результатами.
Результаты
Компилируемые тесты
ВНИМАНИЕ: Сборка тестов производилась с подбором флагов оптимизации и использования профилировщика и на результаты влияет версия компилятора (я являюсь энтузиастом и собирал код своими силами и, надеюсь, МЦСТ смогут собрать более правильно). Архитектура Эльбруса предполагает, что вы будете оптимизировать производительность не только флагами сборки, но и менять сам код (для бенчмарков это запрещено делать).
Тест | Эльбрус-16C | Эльбрус-8СВ | Core i7-2600 |
Dhrystone [DMIPS] (1 поток) | 8652 | 9077 | 22076 |
Whetstone [MWIPS] (1 поток) | 2667 | 2269 | 5729 |
Whetstone MP [MWIPS] | 42467 | 16495 | 31319 |
Linpack 100 [MFLOPS] | 1831 | 1723 | 4302 |
Scimark 2 [Composite score] (1 поток) | 923 | 908 | 2427 |
Coremark (1T;MT) | 6162; 96873 | 5500; 43008 / 61871* (rtc x86-64) | 22692; 119670 |
MP MFLOPS | 1010040 | 381326 | 81745 |
HPL [GFLOPS] (1T;MT) | 39; 561.6 | 32.3; 232.6 | 93.9 (MT) |
7zip (Comp; Decomp; Tot) (MT) | 19070; 33490; 26280 [v 16.02] 26039; 40040; 33039 [v 21.07] | 8461; 13638; 11049 | 18024; 13363; 18664 |
STREAM (Copy; Scale; Add; Triad) [MB/s] | 70389; 67256; 74444; 20090; 19408;21848;22284 | 23097; 23137; 25578; 25643 (4 modules DDR4) | 20860; 21838; 18512; 20452 |
SPEC 2006 INT | 24 | 18 | 44.6 |
SPEC 2006 FP (1T) | 30 | 22.5 | |
Blender (RyzenGraphic_27) [min:sec] | 1:08 | 2:32 | 1:18 |
StockFish [nodes/sec] | 6193924 | 3123190 | 10860720 |
SuperPI [sec] (1 поток) (меньше – лучше) | 2.77 | 3.76 | 1.81 |
Minerd [sha256d khash/s] (1T;MT) | 8820; 141104 | 6840; 54714 | 5307; 21226 (Core i5-2500K) |
Minerd [scrypt khash/s] (1T;MT) | 11.52; 183.01 | 8.50; 68.24 | 19.54; 78.26 (Core i5-6500) |
* — В нативном режиме Эльбрус-8СВ в тесте Coremark показывает в 1,5 раза хуже результаты чем в режиме бинарной трансляции x86-64 кода (этот бинарный транслятор называется RTC). На Эльбрус-16С такой проблемы больше нет.
Результаты всех тестов здесь: https://github.com/EntityFX/anybench/tree/master/results
Geekbench 5 в бинарной трансляции RTC
ID | Name | Platform | Architecture | Single-core Score | Multi-core Score |
MCST Elbrus 4C (х86 compatibility mode) 4 CPUs Intel Pentium II/III 750 MHz (1 cores) | Linux 64 | x86_64 | 74 | 374 | |
MCST Elbrus 8C (х86 compatibility mode) Intel Pentium II/III 1299 MHz (1 cores) | Linux 64 | x86_64 | 140 | 937 | |
MCST Elbrus 8CB (х86 compatibility mode) Intel Pentium II/III 1549 MHz (1 cores) | Linux 64 | x86_64 | 159 | 1100 | |
MCST Elbrus 16C (х86 compatibility mode) Intel Pentium II/III 2000 MHz (1 cores) | Linux 64 | x86_64 | 203 | 2821 | |
Core i7-2600Intel Core i7-2600 3401 MHz (4 cores) | Windows 64 | x86_64 | 720 | 2845 |
Разбираем результаты
Логи результатов можете смотреть здесь
Dhrystone
Dhrystone достаточно древний тест 80х годов, написан на C. Тестирует целочисленную арифметику и работу со строками. Результаты измеряются в Dhrystone/s и DMIPS. (DMIPS = Dhrystone/s делить на 1757).
Эльбрус-16С немного показал хуже результаты чем Эльбрус-8СВ. Скорее всего, проблема с оптимизациями компилятором LCC, с новой версией будет перепроверяться.
Whetstone
Тестирует арифметику с плавающей/фиксированной запятой, математические функции, ветвления, вызовов функций, присваиваний, работы с числами с фиксированной запятой, ветвлений. Результаты измеряются в MMIPS.
Эльбрус-16С показывает результаты кратные частоте (2000 / 1500).
Coremark
Современный тест, который должен заменить Dhrystone и Whetstone. Написан на C. Считает различные массивы, матрицы, сортировка и т. д. Предназначался для запуска на всём: от микроконтроллеров до мощных процессоров.
Эльбрус-16С показывает гораздо лучшие результаты чем Эльбрус-8СВ. На 8СВ результаты в бинарной трансляции выходили лучше, чем нативные.
MP MFLOPS
Эльбрус-16С значительно обгоняет 8СВ, набирая более 1 ТFlops в числах с плавующей запятой одинарной точности.
HPL
HPL – переносимый высокопроизводительный тест, который используется для суперкомпьютеров. Решает системы линейных уравнений, использует библиотеки BLAS и MPI . Результаты выдаёт в GFLOPS.
Cpu | Year | Freq | Cores | 1 thread (GFLOPS) | Multithread (GFLOPS) |
Elbrus 2C+ | 2011 | 500 | 2 | 3.8 | 6.8 |
Elbrus 4C | 2014 | 800 | 4 | 6 | 21.6 |
Elbrus 1C+ | 2015 | 1000 | 1 | 10 | 10.0 |
Elbrus 8C | 2016 | 1300 | 8 | 13 | 96.00 |
Elbrus 8C | 2016 | 1200 | 8 | 12 | 82.5 |
Elbrus 8CB | 2018 | 1550 | 8 | 32.3 | 232.6 |
Elbrus 16C | 2021 | 2000 | 16 | 39 | 561.6 |
Elbrus 2C3 | 2021 | 2000 | 2 | 39 | 70.2 |
7zip
Встроенный тест архиватора. Тест особо не параллелится, результаты примерно равные на этих процессорах (частота одинаковая).
Cpu | Year | Freq | Cores | Total MT | Comp Avr MT | Dec Avr MT | Total ST |
Elbrus 8CB | 2018 | 1500 | 8 | 12164 | 9975 | 14353 | 1894 |
Elbrus 8CB | 2018 | 1550 | 8 | 11049 | 8461 | 13638 | 1651 |
Elbrus 8C | 2016 | 1300 | 8 | 10865 | 8736 | 12994 | 1697 |
Elbrus 8C | 2016 | 1200 | 8 | 9031 | 6619 | 11442 | 1391 |
Elbrus 16C | 2021 | 2000 | 16 | 26280 | 19070 | 33490 | 1813 |
Elbrus 16C [7z 21.07] | 2021 | 2000 | 16 | 33039 | 26039 | 44040 | 2556 |
Elbrus 2C3 | 2021 | 2000 | 2 | 3448 | 2499 | 4396 | 1894 |
Elbrus 1C+ | 2015 | 1000 | 1 | 1277.5 | 1301 | 1254 | 1277.5 |
Elbrus 4C | 2014 | 800 | 4 | 2793 | 2065 | 3520 | 849 |
Elbrus 2C+ | 2011 | 500 | 2 | 1077 | 878 | 1276 | 645 |
Elbrus R2000 | 2018 | 2000 | 8 | 8728 | 5896 | 11560 | 1246 |
Elbrus R1000 | 2011 | 1000 | 4 | 2514 | 1959 | 3069 | 692 |
Baikal M1000 | 2019 | 1500 | 8 | 9868 | 8483 | 11252 | 1513 |
Baikal S | 2022 | 2000 | 48 | 90039 | 75097 | 1295732 | 2378 |
Huawei Kunpeng 920 | 2019 | 2600 | 48 | 126143 | 112386 | 139899 | 3177 |
Huawei Kunpeng 920 | 2019 | 2600 | 96 | 204155 | 153863 | 254447 | 3177 |
Apple M1 | 2020 | 3100 | 8 | 33034 | 38166 | 27903 | 4458 |
|
|
|
|
|
| ||
Celeron N3350 * | 2016 | 1100 | 2 | 3966 | 3568 | 4364 | 1961 |
Core i7 2600 | 2011 | 3400 | 8 | 16601 | 16179 | 17024 | 3773 |
Core(TM) i7-7820X ** | 2017 | 3600 | 16 | 47733 | 48501 | 46965 | 4982 |
Blender
Cpu | Freq | Cores | Year | Time (seconds) | Time |
Core i7 2600 | 3400 | 8 | 2011 | 80 | 0:01:20 |
Elbrus 4C | 750 | 4 | 2014 | 811 | 0:13:31 |
Elbrus 4C x4 | 750 | 16 | 2014 | 223 | 0:03:43 |
Elbrus 4C | 800 | 4 | 2014 | 600 | 0:10:00 |
Elbrus 1C+ | 1000 | 1 | 2015 | 1916 | 0:31:56 |
Elbrus 8C | 1300 | 8 | 2016 | 172 | 0:02:52 |
Elbrus 8C | 1200 | 8 | 2016 | 216 | 0:03:36 |
Elbrus 8C x4 | 1200 | 32 | 2016 | 57 | 0:00:57 |
Baikal M1000 | 1500 | 8 | 2016 | 161 | 0:02:41 |
Elbrus 8CB | 1550 | 8 | 2018 | 152 | 0:02:32 |
Kunpeng 920 x2 | 2600 | 96 | 2019 | 8 | 0:00:08 |
Elbrus 16C | 2000 | 16 | 2021 | 68 | 0:01:08 |
Elbrus 2C3 | 2000 | 2 | 2021 | 544 | 0:09:04 |
SuperPI (1 млн)
1 поток:
Core(TM)2 Duo CPU T9400 @ 2.53GHz: 2.58 sec
Core i7 2600 3.4 GHz: 1.81 sec
Elbrus 2C+ 0.47 GHz: 18.05 sec
Elbrus 4C 0.75 GHz: 10.18 sec
Elbrus 8C 1.2 GHz: 5.20 sec
Elbrus 8CB 1.55 GHz: 3.76 sec
Elbrus 16C 2.0 GHz: 2.77 sec
Stockfish
Cpu | Freq | Cores | Year | Time (seconds) |
Core i7 2600 | 3400 | 4 (8) | 2011 | 10860720 |
Core(TM)2 Duo CPU T9400 | 2530 | 2 | 2007 | 1254341 |
Elbrus 4C | 750 | 4 | 2014 | 541039 |
Elbrus 8C | 1200 | 8 | 2016 | 1753143 |
Elbrus 8CB | 1550 | 8 | 2018 | 3123190 |
Elbrus 16C | 2000 | 16 | 2021 | 6193924 |
Baikal M1000 | 1500 | 8 | 2016 | 2750526 |
Minerd (Cpu miner)
./minerd --benchmark -a sha256d
Core i5-2500K:
thread 0: 26798032 hashes, 5307 khash/s
Total: 21226 khash/s
Эльбрус 8С (не оптимизирован):
thread 7: 2900420 hashes, 966.98 khash/s
Total: 7736 khash/s
Эльбрус 8СВ (оптимизирован):
thread 7: 34198012 hashes, 6840 khash/s
Total: 54714 khash/s
Эльбрус 16C (оптимизирован):
thread 7: 44098544 hashes, 8820 khash/s
Total: 141104 khash/s
Байкал-М 8 core 1.5 GHz, Cortex-A57:
thread 7: 4443436 hashes, 888.20 khash/s
Total: 7023 khash/s
Intel(R) Celeron(R) CPU N3350 @ 1.10GHz
thread 0: 2097152 hashes, 2403 khash/s
Total: 4808 khash/s
./minerd --benchmark -a scrypt
Core i5-6500 3.20GHz:
thread: 19.54 khash/s
total 78.26 khash/s
Core i7-9700K:
thread 7: 131280 hashes, 26.26 khash/s
Total: 211.68 khash/s
Эльбрус 8С (не оптимизирован +профиль):
thread 7: 6777 hashes, 2.26 khash/s
Total: 18.08 khash/s
Эльбрус 8СВ (оптимизирован):
thread 0: 4096 hashes, 8.50 khash/s
Total: 68.24 khash/s
Эльбрус 16C (оптимизирован под e2k-v5):
thread 0: 4096 hashes, 11.52 khash/s
Total: 183.01 khash/s
Байкал-М 8 core 1.5 GHz, Cortex-A57:
thread 7: 8875 hashes, 1.77 khash/s
Total: 14.03 khash/s
Intel(R) Celeron(R) CPU N3350 @ 1.10GHz
thread 0: 4104 hashes, 4.63 khash/s
Total: 9.25 khash/s
SPEC 2006 INT/FP
SPEC CPU2006 инструмент исследования производительности систем, который основан на коде реальных приложений, поставляются в виде исходного кода. Тест оценивает не только производительность процессора и памяти, но и показывает то, насколько компиляторы могут оптимизировать код.
Имеется 2 группы тестов:
SPEC INT 2006, измеряющий производительность целочисленных вычислительных задач (integer);
SPEC FP 2006, измеряющий производительность вычислительных задач с вещественными числами (числами с плавающей точкой, floating point).
Результаты производительности языков программирования
Логи результатов смотрите тут:
Java
1 поток:
Эльбрус 1С+ в 11 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 4С в 10 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 8С в 5,5 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 8СВ в 4,5 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 16С в 2,5 раз медленнее на 1 поток чем Core i7 2600
На всех потоках:
Эльбрус 1С+ в 18 раз медленнее чем Core i7 2600 на всех потоках
Эльбрус 4С в 12,5 раз медленнее чем Core i7 2600 на всех потоках
Эльбрус 8С в 3 раз медленнее чем Core i7 2600 на всех потоках
Эльбрус 8СВ в 2,5 раз медленнее чем Core i7 2600 на всех потоках
Эльбрус 16С равен Core i7 2600 на всех потоках
PHP
1 поток:
Эльбрус 2С+ в 15,5 раз медленнее чем Core i7 2600
Эльбрус 1С+ в 8 раз медленнее чем Core i7 2600
Эльбрус 4С в 4,5 раза медленнее чем Core i7 2600
Эльбрус 8С в 3 раза медленнее чем Core i7 2600
Эльбрус 8СВ в 2,5 раза медленнее чем Core i7 2600
Эльбрус 16С в 2 раза медленнее чем Core i7 2600
Python
1 поток:
Эльбрус R1000 в 12,5 раз медленнее чем Core i7 2600
Эльбрус 2С+ в 30 раз медленнее поток чем Core i7 2600 на 1 поток
Эльбрус 1С+ в 12,5 раз медленнее поток чем Core i7 2600 на 1 поток
Эльбрус 4С в 15,5 раз медленнее поток чем Core i7 2600 на 1 поток
Эльбрус 8С в 9 раз медленнее поток чем Core i7 2600 на 1 поток
Эльбрус 8СВ в 7,8 раз медленнее поток чем Core i7 2600 на 1 поток
Эльбрус 16С в 7 раз медленнее поток чем Core i7 2600 на 1 поток
На всех потоках:
Эльбрус 2С+ в 58 раз медленнее поток чем Core i7 2600 на всех потоках
Эльбрус 1С+ в 25 раз медленнее поток чем Core i7 2600 на всех потоках
Эльбрус 4С в 13,5 раз медленнее поток чем Core i7 2600 на всех потоках
Эльбрус 8С в 4,2 раза медленнее поток чем Core i7 2600 на всех потоках
Эльбрус 8СВ в 3,8 раза медленнее поток чем Core i7 2600 на всех потоках
Эльбрус 16С в 1,7 раза медленнее поток чем Core i7 2600 на всех потоках
Lua
1 поток:
Эльбрус 2С+ в 16 раз медленнее чем Core i7 2600
Эльбрус 1С+ в 6 раз медленнее чем Core i7 2600
Эльбрус 4С в 10 раз медленнее чем Core i7 2600
Эльбрус 8С в 6 раз медленнее чем Core i7 2600
Эльбрус 8СВ в 5 раз медленнее чем Core i7 2600
Эльбрус 16С в 4 раз медленнее чем Core i7 2600
Эльбрус R1000 в 9 раз медленнее чем Core i7 2600
C# NetCore (В режиме трансляции RTC)
1 поток:
Эльбрус 8С в 3,5 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 8СВ в 3 раз медленнее на 1 поток чем Core i7 2600
Эльбрус 16С в 2 раза медленнее на 1 поток чем Core i7 2600
На всех потоках:
Эльбрус 8С в 2 раза медленнее чем Core i7 2600
Эльбрус 8СВ в 1,5 раз медленнее чем Core i7 2600
Эльбрус 16С в 1,25 раза быстрее Core i7 2600
Выводы
Эльбрус-16С на 33% быстрее Эльбрус-8СВ на 1 поток и имеет в 2 раза больше ядер. Есть задачи, где он очень эффективен, где-то не очень, думаю найдёт свою нишу.
Жду ваши предложения, какие ещё бенчмарки можно прогнать на этих компьютерах (желательно с простой сборкой).
P. S. Принимаю ваши предложения и правки, статья пополняется.
Стикеры Телеграм с Эльбрусами: https://telegram.me/addstickers/Elbrus2000 :-)
UPD 1. Тест подсистемы памяти STREAM на 8ми планках DDR4-2400 по 8 Гб (77 ГБ/с вместо 19 ГБ/с)
Стало ~ 77 Гб/с (на 8 х 8 Гб)
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
This system uses 8 bytes per array element.
-------------------------------------------------------------
Array size = 10000000 (elements), Offset = 0 (elements)
Memory per array = 76.3 MiB (= 0.1 GiB).
Total memory required = 228.9 MiB (= 0.2 GiB).
Each kernel will be executed 10 times.
The *best* time for each kernel (excluding the first iteration)
will be used to compute the reported bandwidth.
-------------------------------------------------------------
Number of Threads requested = 16
Number of Threads counted = 16
-------------------------------------------------------------
Your clock granularity/precision appears to be 1 microseconds.
Each test below will take on the order of 1688 microseconds.
(= 1688 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
-------------------------------------------------------------
WARNING -- The above is only a rough guideline.
For best results, please be sure you know the
precision of your system timer.
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 70389.0 0.002306 0.002273 0.002349
Scale: 67256.8 0.002406 0.002379 0.002446
Add: 74444.1 0.003237 0.003224 0.003256
Triad: 77148.4 0.003144 0.003111 0.003185
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------
Было ~ 19 Гб/с (на 2 х 32 Гб)
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
This system uses 8 bytes per array element.
-------------------------------------------------------------
Array size = 200000000 (elements), Offset = 0 (elements)
Memory per array = 1525.9 MiB (= 1.5 GiB).
Total memory required = 4577.6 MiB (= 4.5 GiB).
Each kernel will be executed 10 times.
The *best* time for each kernel (excluding the first iteration)
will be used to compute the reported bandwidth.
-------------------------------------------------------------
Number of Threads requested = 16
Number of Threads counted = 16
-------------------------------------------------------------
Your clock granularity/precision appears to be 2 microseconds.
Each test below will take on the order of 121592 microseconds.
(= 60796 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
-------------------------------------------------------------
WARNING -- The above is only a rough guideline.
For best results, please be sure you know the
precision of your system timer.
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 16827.5 0.190366 0.190165 0.190579
Scale: 16961.5 0.189098 0.188663 0.189866
Add: 18717.8 0.257251 0.256440 0.257978
Triad: 18653.6 0.257563 0.257323 0.258054
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
------------------------------------------------------------