Предисловие


Попытка сравнить производительность процессоров на разнородных архитектурах x86-64, e2k (Эльбрус), mips и arm.


Все тесты написаны на языке C (взяты из исходных кодов, которые я не модифицировал и не оптимизировал) и компилируются под конкретную архитектуру с использованием конкретного компилятора для данной архитектуры и тесты производятся на различных дистрибутивах операционных систем на ядре Linux. На результаты может влиять как тип так и версия компилятора, а также режим оптимизаций. Хотя даже таким способом можно примерно сравнить производительность процессоров на разных архитектурах.


P.S.: Знаю, что большинство тестов для очень старых компьютеров, но они работают везде. Что даже очень неплохо.


Типы архитектур сравниваемых процессоров


CISC


CISC (Complex instruction set computing) — архитектура, в которой небольшой набор регистров, команды различной длины, операции кодируются одной командой.


RISC


RISC (Reduced instruction set computing) — процессорная архитектура, в которой инструкции упрощены и имеют фиксированную длину (например, 32 бита), что позволяет повысить производительность. Имеет большое число регистров.


VLIW


VLIW (very long instruction word) — архитектура процессоров с очень большой инструкцией. Одна инструкция содержит в себе много простых инструкций, которые могут исполняться разными блоками процессора. Всё это сильно упрощает архитектуру, но усложняет компилятор. Неэффективный код может порождать не полностью заполненные инструкции, что сильно снижает производительность программы.


Описание архитектур сравниваемых процессоров


x86-64 (ia32/x86/i386/amd64/EM64T/Intel/AMD)


x86 — CISC архитектура, созданная компанией Intel, о которой знают все. Современный вариант архитектуры пошёл со времён 32-битного процессора Intel 386. Крупные игроки: Intel, AMD и VIA (а ещё тут появился какой-то Zhaoxin).


ARM


ARM — RISC архитектура разрабатываемая компанией ARM Limited с середины 80х годов. Текущие версии 32-битных ARM ядер: armv6 (ARM1136J(F)-S), armv7 (Cortex A9, Cortex A15), armv8 (CortexA53, CortexA57, Cortex A72 и выше). Процессоры данной архитектуры широко используются в мобильных телефонах, планшетах, встраиваемых устройствах, одноплатных компьютерах. Процессоры энергоэффективные и достаточно производительные.


MIPS


MIPS — RISC система команд и микропроцессорных архитектур, разработанных компанией MIPS Computer Systems. Процессоры данной архитектуры как и ARM используются в мобильных телефонах, планшетах, встраиваемых устройствах и т.д. Но почему-то больших объёмов устройств по сравнению с ARM она не достигла. Но процессоры на архитеткуре MIPS часто можно встретить в роутерах, ну и в медиа проигрывателях, а ещё она использовалась в процессоре приставки Play Station 1. Текущие реализации: 32-битная MIPS32 и 64-битная MIPS64.


E2K (Elbrus 2000/Эльбрус)


VLIW


Список тестов



Dhrystone


Dhrystone — синтетический тест, который был написан Reinhold P. Weicker в 1984 году.
Данный тест не использует операции с плавающей запятой, а версия 2.1 написана так, чтобы исключить возможность сильных оптимизаций при компиляции.
Бенчмарк выдаёт результаты в VAX Dhrystones в секунду, где 1 VAX DMIPS = Dhrystones в секунду делить на 1757.

Whetstone


Whetstone — синтетический тест, который был написан Harold Curnow в 1972 году на языке Fortran.
Позже был переписан на языке C Roy Longbottom. Данный тест выдаёт результаты в MWIPS,
также промежуточные результаты в MOPS (Миллионов операций в секунду) и MFLOPS (Миллионы вещественных операций с плавающей запятой в секунду).
Данный тест производит различные подсчёты: производительность целочисленных и операций с плавающей запятой,
производительность операций с массивами, с условным оператором, производительность тригонометрических функций и функций возведения в степень, логарифмов и извлечения корня.

Также мной был написан тест Whetstone на языках JS (Для тестирования браузера и NodeJS) и C# (Для тестирования Mono, .Net Framework и Dotnet Core), а также я нашёл реализацию на Java.


Whetstone MP — многопоточный вариант Whetstone.

LINPACK


LINPACK — тест, который был написан Jack Dongarra на языке Fortran в 70х годах, позже переписан на язык C.
Тест считает системы линейных уравнений, делает различные операции над двумерными (матрицами) и одномерными (векторами).
Используется реализация Linpack 100x100 с числами типа float. Реализация теста хорошо используется для оценки производительности
различных суперкомпьютеров.

Coremark


Набор тестов написанных на языке C. Создан в 2009 году Shay Gal-On из компании EEMBC
Содержит реализации таких алгоритмов: обработка связных списков (поиск и сортировка), обработка матриц (несколько матричных операций), машина состояний (определение, что входной символьный поток содержит действительные числа в десятичной записи), подсчет суммы CRC.

Memspeed


Memspeed — выполняет 3 различные операции, над 64-битными числами с плавающей запятой двойной точности, 32-битными с плавающей запятой одинарной точности and 32-битными целыми над 2мя массивами:
  • Сумма с регистром r = r + x [m] * y[m] (Integer + y [m])
  • Сумма в память x[m] = x[m] + y[m]
  • Память в память x[m] = y[m]


Livermore Loops


тест для суперкомпьютеров, появился в 1970, изначально содержал 14 тестов на языке Fortran. Далее тестов было увеличено до 24 в 1980'е. Производительность измеряется в Миллионах Операций Чисел с Плавающей Точкой в Секунду или MFLOPS.
тест проверяет точно вычислений в конце. Основная цель — избежать простых операций над числами, 24 теста выполняются 3 раза в цикле Do-loop и вычисляют производительность на короткими, средними и большими последовательностями чисел.

MP MFLOPS


MP MFLOPS — многопоточный тест, который считает большое число операций над большими массивами.
Выполняет операцию вида x[i] = (x[i] + a) * b - (x[i] + c) * d + (x[i] + e) * f с 2, 8 или 32 на 1 инструкцию. Размер массива 0.1, 1 или 10 миллионов 4 байтовых слов с плавающей точкой с одинарной точностью.
Грузит ваш процессор по полной.

Scimark 2


SciMark 2 — набор тестов на языке C измеряющий производительность кода встречающегося в научных и профессиональных приложениях. Содержит в себе 5 вычислительных тестов: FFT (быстрое преобразование Фурье), Gauss-Seidel relaxation (Метод Гаусса — Зейделя для решения СЛАУ), Sparse matrix-multiply (Умножение разреженных матриц), Monte Carlo integration (Интегрирование методом Монте-Карло), и LU factorization (LU-разложение).

Тестовые стенды и их процессоры


Стенды на процессорах x86 (i386) х86-64 (amd64):



Стенды на процессорах armv6 (armel), armv7 (armhf), armv8 (aarch64):



Стенды на процессорах e2k (Elbrus 2000) (v3, v4, v5):



Стенды на процессорах MIPS :



Таблица с тестовыми стендами


Стенд Модель процессора Всего ядер (потоков) Частота (МГц) Архитектура
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 12 (6/12) 3,400.00 amd64
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 (4/8) 2,400.00 amd64
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 (4/8) 3,400.00 amd64
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2,530.00 amd64
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 (2/4) 2,133.00 amd64
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1,440.00 amd64
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2,600.00 amd64
Pentium M725 Intel® Pentium(TM) M 725 @ 1600 1 1,600.00 i386
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3,066.00 i386
Pentium III Intel® Pentium(TM) III CPU 1 1,000.00 i386
AWS Graviton Alpine AL73400 16 2,300.00 aarch64
Odroid N2 Amlogic S922X 6 1,800.00 aarch64
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1,700.00 arm
Orange Pi PC2 Allwinner H5 (aarch64) 4 1,152.00 aarch64
Orange Pi Win Allwinner A64 (aarch64) 4 1,344.00 aarch64
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1,200.00 aarch64
Raspberry PI Broadcom BCM2835 1 700.00 arm
E16C-APPROX! Elbrus 16 [Планируемый] 16 2,000.00 e2k
E8C2-1550 Elbrus 8C2 (E8C2) 8 1,550.00 e2k
E8C2-1200 Elbrus 8C2 (E8C2) 8 1,200.00 e2k
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1,300.00 e2k
E8C-E8C4 Elbrus 8C (4 CPU) 32 (8 x 4 cpu) 1,300.00 e2k
E2S-EL2S4 Elbrus 4C (EL2S4) (4 CPU) 16 (4 x 4 cpu) 750.00 e2k
E2S-PC401 Elbrus 4C (E2S) (pc401) 4 800.00 e2k
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985.00 e2k
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1,200.00 mips

Настройки компиляторов


Для всех тестов пробовались разные комбинации флагов, для того чтобы определить наилучшее значение тестов.


Компилятор Флаги Архитектура
gcc -O2, -O3, -Ofast; -march X86-64
gcc -O2, -O3, -Ofast, -mfpu=neon; -march ARM
lcc -O2, -O3, -O4, -ffast -fwhole; -march E2K

Результаты тестов


Dhrystone


Таблица с результатами Dhrystone в 1 поток:


Platform CPU Cores Frequency (MHz) Architecture Dhrystones (VAX) Dhrystones на 1 Мгц Относительно Core i7-2600
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 2370 1.76 0.11
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 2469 2.06 0.11
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 2949.12 2.56 0.13
Odroid N2 Amlogic S922X 6 1800 aarch64 8230 4.57 0.37
AWS Graviton Alpine AL73400 16 2300 aarch64 11377.63 4.95 0.52
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 4677.3 3.25 0.21
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 10919.4 5.12 0.49
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 11455.81 4.41 0.52
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 13308.91 5.26 0.6
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 22076.97 6.49 1
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 22987.48 9.58 1.04
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 25195.31 7.41 1.14
Raspberry PI Broadcom BCM2835 1 700 arm 847 1.21 0.04
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 4495.03 2.64 0.2
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 2471.97 1.65 0.11
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 3329.51 4.44 0.15
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 3548.8 4.44 0.16
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 3554.46 2.96 0.16
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 4302.53 4.37 0.19
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 5357.45 3.46 0.24
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 5844.82 4.5 0.26
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 5865.19 4.51 0.27
E16C-APPROX! Elbrus 16 16 2000 e2k 9023.37 4.51 0.41
Pentium M725 Pentium M725 1 1600 i386 1085.68 0.68 0.05
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 1595 1.6 0.07
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 4012 1.31 0.18
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 3650 3.04 0.17

Dhrystone, все процессоры:
Dhrystone Benchmark, Version 2.1


Dhrystone, на 1 МГц:
Dhrystone Benchmark, Version 2.1, Per 1 MHz


Dhrystone, относительно Core i7-2600:
Dhrystone Benchmark, Version 2.1, Relative


Здесь видно, что в тесте Dhrystone процессоры x86 заметно быстрее arm и Эльбрус процессоров. Производительность 1 ядра Эльбрус 8С (E8C) сравнима с ядром Cortex A72, если сравнивать относительно Dhrystones на 1 МГц, Эльбрус 8С чуть быстрее Atom Z8350 относительно Dhrystones на 1 МГц. Производительность Baikal T1 сравнима с ядром Arm Cortex A9. Странно себя показал Эльбрус 8СВ, который с большой частотой оказался медленнее Эльбрус 8С. В МЦСТ мне ответили, что этот экземпляр тестовый и компилятор немного не доработан под данную версию, возможно с другим экземпляром тесты окажутся гораздо лучше.


Whetstone


Platform CPU Cores Frequency (MHz) Architecture MWIPS MWIPS MP MWIPS на 1 Мгц (однопоточный) MWIPS на 1 Мгц (многопоточный) Относительно Core i7-2600 Относительно Core i7-2600 (mp)
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 700.6 1854 0.52 1.38 0.12 0.06
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 980.26 3798 0.85 3.3 0.17 0.12
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 997.2 2779.8 0.83 2.32 0.17 0.09
Odroid N2 Amlogic S922X 6 1800 aarch64 2136.98 9931 1.19 5.52 0.37 0.32
AWS Graviton Alpine AL73400 16 2300 aarch64 2851.8 44741 1.24 19.45 0.5 1.43
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 2085.24 6636 1.45 4.61 0.36 0.21
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 2824.97 8837 1.32 4.14 0.49 0.28
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 2910.33 5195 1.15 2.05 0.51 0.17
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 3718.16 12113 1.43 4.66 0.65 0.39
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 5326.9 35234 2.22 14.68 0.93 1.13
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 5729.52 31319 1.69 9.21 1 1
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 5850.41 123854 1.72 36.43 1.02 3.95
Raspberry PI Broadcom BCM2835 1 700 arm 270.5 270.5 0.39 0.39 0.05 0.01
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 1305.16 4291 0.77 2.52 0.23 0.14
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 938.12 2455 1.17 3.07 0.16 0.08
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 970.8 15790 1.29 21.05 0.17 0.5
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 1277.55 1312 1.3 1.33 0.22 0.04
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 1517.62 12980 1.17 9.98 0.26 0.41
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 1545.92 12420 1.29 10.35 0.27 0.4
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 1647.51 53563 1.27 41.2 0.29 1.71
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 1703.75 14571.94 1.1 9.4 0.3 0.47
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 1703.75 14571.94 1.14 9.71 0.3 0.47
E16C-APPROX! Elbrus 16 16 2000 e2k 2198.39 37605.01 1.1 18.8 0.38 1.2
Pentium M725 Pentium M725 1 1600 i386 506.94 506.94 0.32 0.32 0.09 0.02
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 816 816 0.82 0.82 0.14 0.03
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 1119 1119 0.36 0.36 0.2 0.04
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 613.5 1227 0.51 1.02 0.11 0.04

Whetstone Single Precision, все процессоры
Whetstone Single Precision


Whetstone Single Precision, многопоточные результаты
MP Whetstone Precision Multi Core


Whetstone Single Precision, на 1 МГц
Whetstone Single Precision


Whetstone Single Precision, многопоточные результаты, на 1 МГц
MP Whetstone Precision Multi Core, Per 1 MHz


Whetstone Single Precision, относительно Core i7-2600
Whetstone Single Precision


Whetstone Single Precision, многопоточные результаты, относительно Core i7-2600
MP Whetstone Precision Multi Core Relative


Мы видим, что процессоры ARM v7 на архитектуре ядра Cortex A9 сопоставимы с процессорами Pentium III, если сравнивать частоту на 1 Мгц.
Далее, процессоры ARM v8 на архитектуре ядра Cortex A72 сравнимы с процессорами Core 2 Duo T9400 на 1 ядро и 1 МГц, но немного не дотягивают
до Atom Z8350. А ещё очень хорошо видно, что архитектура процессора Pentium 4 (NetBurst) была очень слабой и чтобы им быть более
менее производительными, нужно было иметь высокую частоту (Pentium III был более производительным на 1 МГц).
Все процессоры Эльбрус сопоставимы с Core 2 Duo T9400 на 1 ядро и относительно 1 МГц и ARM v7 Cortex A72, что уже лучше.


Whetstone: разные рантаймы и языки программирования


Platform CPU Cores Frequency (MHz) Architecture MWIPS MWIPS MP MWIPS mono MWIPS netcore MWIPS java MWIPS js
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 700.6 1854 359 102.18
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 980.26 3798 349.357 400.242 172.81
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 997.2 2779.8 183.43
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 2910.33 5195 1565.27 1992.405
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 3718.16 12113 1607.52 1823.615 2127.9 2098.08
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 5729.52 31319 2751.545 3262.258
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 1305.16 4291 256.837 650.114
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 1277.55 1312 388.324 390.89
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 1517.62 12980 522.988 1036.59 35.3
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 1647.51 53563 521.697 1022.26 35.1

LINPACK 100x100 DP (однопоточный)


Существуют LINPACK 1000x1000, High Performance LINPACK, LINPACK 100x100.
Но был выбран LINPACK 100x100 DP, почему? Причина проста: данный тест легко собирается на разных архитектурах и время тестирования очень небольшое.


И тут сразу переходим к результатам тестирования:


Platform CPU Cores Frequency (MHz) Architecture Linpack На 1 Мгц Относительно Core i7-2600 (однопоточный) Относительно Core i7-2600 (1 Мгц)
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 1750.03 0.67 1.71 0.95
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 1021.44 0.71 1 1
AWS Graviton Alpine AL73400 16 2300 aarch64 1548.65 0.67 1.52 0.95
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 0 0 0 0
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 1816.02 0.72 1.78 1.01
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 2155.62 1.01 2.11 1.42
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 4302.89 1.27 4.21 1.78
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 4915.84 2.05 4.81 2.89
E16C-APPROX! Elbrus 16 16 2000 e2k 1675.41538461538 0.84 1.64 1.18
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 632.51 0.84 0.62 1.19
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 674.677333333333 0.84 0.66 1.19
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 1257.2375 0.84 1.23 1.18
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 1005.79 0.84 0.98 1.18
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 1269.79 0.82 1.24 1.15
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 1089.02 0.84 1.07 1.18
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 1075.27 0.83 1.05 1.17
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 814.76 0.83 0.8 1.17
Odroid N2 Amlogic S922X 6 1800 aarch64 845.09 0.47 0.83 0.66
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 268.73 0.16 0.26 0.22
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 163.44 0.14 0.16 0.2
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 174.04 0.13 0.17 0.18
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 840.27 0.27 0.82 0.39
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 316.67 0.32 0.31 0.45
Pentium M725 Pentium M725 1 1600 i386 338.82 0.21 0.33 0.3
Raspberry PI Broadcom BCM2835 1 700 arm 42 0.06 0.04 0.08
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 180 0.15 0.18 0.21
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 6105.95 1.8 5.98 2.53

LINPACK 100x100 Double Precision, все процессоры
Linpack 100x100 Double Precision


LINPACK 100x100 Double Precision, на 1 МГц
Linpack 100x100 Double Precision, Per 1 MHz


LINPACK 100x100 Double Precision, относительно Core i7-2600
Linpack 100x100 Double Precision, Relative to Core i7-2600


Cнова сравним Mflops'ы на 1 МГц на 1 ядро.


Ядра ARM v7 Cortex A9 (Odroid X2), ARM v8 Cortex A53 (Raspberry PI 3, Orange Pi Win, Orange Pi PC2 ) показывают слабый результат, даже слабее Pentium III, что даже кажется немного странным. Ядра ARM v8 Cortex A72 (Odroid N2, AWS Graviton [Alpine AL73400]) держатся почти на уровне Core 2 Duo T9400 и Atom Z8350 и это отлично.


Эльбрусы E2K (Все модели: E1C+, E4C, E8C1, E8C2 ) показывают одинаковый результат и сильно обгоняют ARM процессоры, даже ядра Cortex A72, но проигрывают в 1,5 — 2 раза современным процессорам Intel, хотя они обгоняют AMD A6-3650 и Core 2 Duo T9400. Эльбрусам не хватает высокой тактовой частоты, чтобы приблизиться к процессорам Intel.


Coremark


Platform CPU Cores Frequency (MHz) Architecture Coremark (однопоточный) Coremark (многопоточный) Coremark на 1 Мгц (однопоточный) Coremark на 1 Мгц (многопоточный) Относительно Core i7-2600 (однопоточный) Относительно Core i7-2600 (многопоточный)
AWS Graviton Alpine AL73400 16 2300 aarch64 0 0 0 0 0 0
Odroid N2 Amlogic S922X 6 1800 aarch64 0 0 0 0 0 0
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 3840.98 15370.82 2.86 11.44 0.17 0.13
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 3841 15363.93 3.2 12.8 0.17 0.13
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 3869.72 14901.28 3.36 12.94 0.17 0.12
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 6893.09 23814.68 4.79 16.54 0.3 0.2
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 9980.95 24252.71 4.68 11.37 0.44 0.2
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 11810.56 41666.67 4.54 16.03 0.52 0.35
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 12481.28 23950.66 4.93 9.47 0.55 0.2
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 22692.89 119670.91 6.67 35.2 1 1
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 24295.43 123260.23 10.12 51.36 1.07 1.03
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 28210.73 670625.22 8.3 197.24 1.24 5.6
Raspberry PI Broadcom BCM2835 1 700 arm 1303.78 1303.78 1.86 1.86 0.06 0.01
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 6109.07 24162.55 3.59 14.21 0.27 0.2
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 2216.48 34457.87 2.96 45.94 0.1 0.29
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 2364.24 36755.06 2.96 45.94 0.1 0.31
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 2901.49 2848.32 2.95 2.89 0.13 0.02
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 3413.36 26396.83 2.84 22 0.15 0.22
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 3711 28846.15 2.85 22.19 0.16 0.24
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 3813.64 117885.43 2.93 90.68 0.17 0.99
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 4266.7 33165.69 2.84 22.11 0.19 0.28
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 4359.51 34485.24 2.81 22.25 0.19 0.29
E16C-APPROX! Elbrus 16 16 2000 e2k 5625.18 88994.16 2.81 44.5 0.25 0.74
Pentium M725 Pentium M725 1 1600 i386 2018.44 2018.44 1.26 1.26 0.09 0.02
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 2246.57 2246.57 2.25 2.25 0.1 0.02
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 5941.45 5941.45 1.94 1.94 0.26 0.05
Baikal T1 Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 6182 12364 5.15 10.3 0.27 0.1

Coremark, однопоточные результаты, все процессоры
Coremark


Coremark, многопоточные результаты, все процессоры
Coremark Multi Thread


Coremark, однопоточные результаты, на 1 МГц
Coremark, Per 1 MHz


Coremark, многопоточные результаты, на 1 МГц
Coremark Multi Thread, Per 1 MHz


Coremark, однопоточные результаты, относительно Core i7-2600
Coremark, Relative to Core i7-2600


Coremark, многопоточные результаты, относительно Core i7-2600
Coremark Multi Thread, Relative to Core i7-2600


В этом тесте ядра Эльбрус на 1 МГц оказываются немного слабее ядер ARM (Cortex A9, Cortex A53) и в 3 раза слабее современных ядер Intel (Core i7-2600 ),
ядра ARM (Cortex A9, Cortex A53) почти что на уровне Atom Z8350, Core 2 Duo T9400 и AMD A6-3650. Процессор Baikal T1 немного обгоняет Atom Z8350, Core 2 Duo T9400 и AMD A6-3650,
а в реальных частотах он на уровне Atom Z8350.


Memspeed (однопоточный)


(x[i] = x[i] + a * y[i])

(x[i] = x[i] + y[i])

(x[i] = y[i])

Platform CPU Cores Frequency (MHz) Architecture 16 KB, x[m]=x[m]+s*y[m] Sngl 512 KB, x[m]=x[m]+s*y[m] Sngl 8192 KB, x[m]=x[m]+s*y[m] Sngl 16 KB, x[m]=x[m]+y[m] Sngl 512 KB, x[m]=x[m]+y[m] Sngl 8192 KB, x[m]=x[m]+y[m] Sngl 16 KB, x[m]=y[m] Sngl 512 KB, x[m]=y[m] Sngl 8192 KB, x[m]=y[m] Sngl
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 aarch64 1311 1224 1039 2872 1179 1009 4902 2284 1261
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 aarch64 1324 1598 1019 2240 1906 954 3136 2783 871
Orange Pi Win Allwinner A64 (aarch64) 4 1344 aarch64 1598 1752 1019 2771 1787 1028 3483 3146 1374
Odroid N2 Amlogic S922X 6 1800 aarch64 8452 8214 3888 9876 8463 3966 8261 7260 3582
AWS Graviton Alpine AL73400 16 2300 aarch64 21353 17418 7336 7344 18328 21796 12118 12120 4422
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 17395 14596 5208 17415 14356 5219 10075 5598 1365
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 20403 14189 8249 18113 9344 8153 3232 5196 2131
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 22267 12837 4636 22396 13193 4996 10774 8340 2387
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 40906 37749 8578 40988 36529 8523 13655 9154 2154
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 52992 29816 17618 59299 30982 18371 40254 16127 9605
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 57653 51351 26334 57982 52292 26638 45452 37370 13360
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 75172 53366 32794 75334 54605 32432 26348 16541 8317
Raspberry PI Broadcom BCM2835 1 700 arm 127 127 127 731 127 127 426 111 111
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 2364 1464 1261 2543 1472 1271 3856 1324 627
E16C-APPROX! Elbrus 16 16 2000 e2k 0 0 0 0 0 0 0 0 0
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 13327 31305 5856 10999 11421 9663 5073 10442 1163
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 21463 22714 7975 20662 23032 7809 10535 11483 4263
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 22896 22106 8491 10053 6591 2092 8415 6145 1468
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 34626 34168 28890 30016 34232 28920 16709 18654 17513
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 37065 27882 23315 35758 27681 23172 18273 16898 13798
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 37092 29195 24130 37806 29193 24114 19096 17431 14045
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 41032 41708 33881 19815 12399 9617 6124 4376 3318
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 44195 41990 36299 39990 42034 36355 21901 23589 21518
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 0 0 0 0 0 0 0 0 0
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 0 0 0 0 0 0 0 0 0
Pentium M725 Pentium M725 1 1600 i386 1915 1530 844 2348 1670 850 1866 1145 420
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 0 0 0 0 0 0 0 0 0

Memspeed, Умножение-сложение с присвоением, все процессоры
Memspeed Multiply Add Assign


Memspeed, Сложение с присвоением, все процессоры
Memspeed Add Assign


Memspeed, Присвоение, все процессоры
Memspeed Assign


Как мы знаем, на скорость работы с памятью играют частота работы с памятью, размеры кеша и латентность.


Процессоры ARM (Cortex A9, Cortex A53) имеют медленную подсистему памяти, AWS Graviton обгоняет их в несколько раз (что и логично, так как это серверный процессор).
Процессоры Эльбрус немного отстают от современных процессоров Intel так как имеют намного меньшую тактовую частоту (в 3 раза). Также можно заметить что процессор Эльбрус 8СВ немного быстрее
процессора Эльбрус 8С за счёт того, что используется память DDR4-2400.


MP MFLOPS


Примеры операций, которые выполняет данный тест:


2 операции


x[i] = (x[i]+a)*b;

8 операций


x[i] = (x[i]+a)*b-(x[i]+c)*d+(x[i]+e)*f;

32 операции


x[i] = (x[i]+a)*b-(x[i]+c)*d+(x[i]+e)*f-(x[i]+g)*h+(x[i]+j)*k-(x[i]+l)*m+(x[i]+o)*p-(x[i]+q)*r+(x[i]+s)*t-(x[i]+u)*v+(x[i]+w)*y;

Platform CPU Cores Frequency (MHz) Architecture 2 ops/w – 102400 4B words 2 ops/w – 1024000 4B words 2 ops/w – 10240000 4B words 8 ops/w – 102400 4B words 8 ops/w – 1024000 4B words 8 ops/w – 10240000 4B words 32 ops/w – 102400 4B words 32 ops/w – 1024000 4B words 32 ops/w – 10240000 4B words Geom Mean Relative geom mean
Atom Z8350 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 amd64 5725 1303 1052 11934 5077 4204 10665 10456 10419 5097.15 0.58
Core 2 Duo T9400 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 amd64 6614 6501 949 16025 16043 3813 24236 24129 13724 8813.97 1
Core i3-m330 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 amd64 7256 3089 2177 22321 12217 8613 25115 23494 17535 10191.13 1.16
AMD A6-3650 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 amd64 16325 4294 2226 31623 17883 8640 42202 34047 26819 14558.51 1.65
Core i7-2600 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 amd64 43309 35180 4454 83624 84536 17643 81936 82606 68539 41836.45 4.75
Core i7-4700MQ Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 amd64 44608 39682 4836 81235 80026 19272 77071 77474 72623 42630.84 4.84
Xeon 6128 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 amd64 120605 141059 104776 274886 306624 283395 329607 343556 339301 227553.87 25.82
Orange Pi Win Allwinner A64 (aarch64) 4 1344 arm 0 0 0 0 0 0 0 0 0 0 0
Raspberry PI Broadcom BCM2835 1 700 arm 44 43 31 96 88 79.5 192 176 159 84.15 0.01
Raspberry PI 3 Broadcom BCM2837B0 (armv8) 4 1200 arm 1375 441 435 4621 1699 1737 2081 2131 2141 1480.41 0.17
Odroid X2 Samsung Exynos 4412 (armv7l) 4 1700 arm 893 598 620 2077 1987 2015 3276 3230 3224 1656.53 0.19
Orange Pi PC2 Allwinner H5 (aarch64) 4 1152 arm 2737 482 475 6597 1909 1896 6033 5797 5826 2438.51 0.28
Odroid N2 Amlogic S922X 6 1800 arm 9859 1360 1328 23657 5398 5318 21407 18311 18102 7612.03 0.86
AWS Graviton Alpine AL73400 16 2300 arm 61397 47660 5169 90387 94494 20880 113635 117449 81767 52331.76 5.94
MBE1C-PC Elbrus 1C+ (MBE1C-PC) 1 985 e2k 7804 2103 2089 10453 7041 7003 15676 15626 15641 7414.24 0.84
E2S-PC401 Elbrus 4C [E2S] (pc401) 4 800 e2k 16319 17495 2998 22592 17738 12125 35782 35757 24169 17153.89 1.95
E2S-EL2S4 Elbrus 4C [EL2S4] (4 CPU) 16 750 e2k 55325 81983 3706 100732 121570 16075 116234 133304 58729 52463.62 5.95
E8C-SWTX Elbrus 8C (E8C-SWTX) 8 1300 e2k 46965 65423 4505 98423 93145 17994 146865 160334 68001 53607.67 6.08
E8C2-1200 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 e2k 53065 72849 9159 141270 197423 36293 272517 302580 136836 90429.35 10.26
E8C2 Elbrus 8C2 (E8C2) 8 1500 e2k 78414.1935483871 87892.2580645161 8612.90322580645 236270.322580645 209708.709677419 35186.1290322581 319533.870967742 325615.161290323 136266.774193548 104351.91 11.84
E8C2-1550 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 e2k 81028 90822 8900 244146 216699 36359 330185 336469 140809 107830.3 12.23
E8C-E8C4 Elbrus 8C (4 CPU) 32 1300 e2k 134841 121759 116454 193019 279431 279598 402357 461200 378806 233035.8 26.44
E16C-APPROX! Elbrus 16 16 2000 e2k 209104.516129032 234379.35483871 22967.7419354839 630054.193548387 559223.225806452 93829.6774193548 852090.322580645 868307.096774194 363378.064516129 278271.75 31.57
Pentium III Intel® Pentium(TM) III CPU 1 1000 i386 0 0 0 0 0 0 0 0 0 0 0
Pentium M725 Pentium M725 1 1600 i386 309 304 243 309 304 243 408 409 406 320.12 0.04
Pentium 4 Intel® Pentium(TM) 4 CPU 1 3066 i386 355.81 360.64 328.44 1344.35 1315.37 1230.04 1867.6 1872.43 1875.65 945.04 0.11
Baikal T1 BFK Baikal-T1 (MIPS P5600 V3.0) 2 1200 mips 0 0 0 0 0 0 0 0 0 0 0

MP MFLOPS, все процессоры
MP MFLOPS


MP MFLOPS, все процессоры, 2 ops/w
MP MFLOPS, 2 ops/w


MP MFLOPS, все процессоры, 8 ops/w
MP MFLOPS, 8 ops/w


MP MFLOPS, все процессоры, 32 ops/w
MP MFLOPS, 32 ops/w


MP MFLOPS, все процессоры, относительно Core i7-2600
MP MFLOPS


Вот здесь процессоры Эльбрус показывают свою превосходство над всеми другими архитектурами: способность выполнять большое число операций за такт (архитектура VLIW).
Процессор 8СВ набирает 378 ГФлопс (Теоретически 576) на 32х операциях. Core i7-2600 — 82.6 ГФлопс.
Процессоры на ARM выдают всего 23.7 ГФлопс (Для Cortex A72, Odroid N2), AWS Graviton — 117 ГФлопс, за счёт 16ти ядер.


Scimark 2 (однопоточный)


Platform Composite Score FFT SOR MonteCarlo Sparse matmult LU CPU Cores Frequency (MHz) На 1 Мгц Относительно Core i7-2600 (однопоточный) Относительно Core i7-2600 (1 Мгц) Architecture
Orange Pi Win 169.22 150.49 276.78 76.72 166.98 175.11 Allwinner A64 (aarch64) 4 1344 0.13 0.33 0.36 aarch64
Orange Pi PC2 191.59 147.36 283.1 64.07 185.46 277.94 Allwinner H5 (aarch64) 4 1152 0.17 0.38 0.47 aarch64
Atom Z8350 509.44 267.6 719.12 178.04 497.19 885.27 Intel® Atom(TM) x5-Z8350 CPU @ 1.44GHz 4 1440 0.35 1 1 amd64
Core i3-m330 1002.61 759.27 967.15 290.85 933.71 2062.08 Intel® Core(TM) i3 CPU M 330 @ 2.13GHz 4 2133 0.47 1.97 1.33 amd64
AMD A6-3650 1028.44 775.83 989.81 344.97 1272.17 1759.44 AMD A6-3650 APU with Radeon(tm) HD Graphics 4 2600 0.4 2.02 1.12 amd64
Core 2 Duo T9400 1051.93 720.56 1201.02 307.36 1119.72 1911 Intel® Core(TM) 2 Duo CPU T9400 @ 2.53GHz 2 2530 0.42 2.06 1.18 amd64
Core i7-2600 1800 1517.97 1636.33 515.34 1981.74 3348.64 Intel® Core(TM) i7-2600 CPU @ 3.40GHz 8 3400 0.53 3.53 1.5 amd64
Core i7-4700MQ 2071.26 1693.12 1599.69 568.17 2148.4 4346.91 Intel® Core(TM) i7-4700MQ CPU @ 2.40GHz 8 2400 0.86 4.07 2.44 amd64
Xeon 6128 2427.42 2011.19 1564.17 753.09 2878.47 4930.18 Intel® Xeon® Gold 6128 CPU @ 3.40GHz (2 CPU) 24 3400 0.71 4.76 2.02 amd64
MBE1C-PC 379.23 174.82 364.42 97.02 132.92 1126.98 Elbrus 1C+ (MBE1C-PC) 1 985 0.39 0.74 1.09 e2k
E8C2-1200 469.46 212.71 446.05 118.25 166.34 1403.94 Elbrus 8C2 (Broken 8MB Cache 1.2 GHz) 8 1200 0.39 0.92 1.11 e2k
E8C2-1550 472.24 266.7 501.81 84.95 304.82 1202.94 Elbrus 8C2 (E8C2 1550 MHz) 8 1550 0.3 0.93 0.86 e2k
E8C-SWTX 511.43 235.71 481.74 132.23 186.18 1521.26 Elbrus 8C (E8C-SWTX) 8 1300 0.39 1 1.11 e2k

Scimark 2, однопоточные результаты, все процессоры
Scimark 2


Выводы


Performance, Relative to Core i7-2600


ARM процессоры уровня Cortex A9, Cortex A53 на уровне слабого Intel Atom, Pentium 4.
ARM процессоры уровня Cortex A72 уже приближаются к процессорам Intel Core.


Процессоры Эльбрус в основном быстрее процессоров ARM, но медленнее Intel Core из-за
маленькой тактовой частоты и могут работать намного быстрее, если программа под них хорошо оптимизированна, но в будущем надеемся, что компилятор lcc будет ещё лучше доработан.


P.S.


Спасибо команде из Телеграм чата: e2k_chat и людям с форума ixbt, которые помогли мне протестировать недостающие Эльбрусы.


Спасибо своим коллегам, которые предоставили мне некоторые одноплатные компьютеры на процессорах ARM.


Исходники и результаты


Не стесняйтесь, присылайте мне свои результаты.


Ссылки


Таблица ODS с результатами


  1. Исходники, результаты и диаграммы
  2. Сайт Роя Лонгботтома, откуда было взято большинство исходников и часть результатов
  3. Набор ссылок на бенчмарки Эльбрусов от Михаила Шигорина
  4. Independent Tests of Baikal-T1

Бонус


Код MP MFLOPS на ассемблере Эльбрус


Список мнемоник Эльбрус'а