Бенчмаркингом я занимаюсь уже более 10 лет (заинтересовался, когда приобрёл первый одноплатный компьютер Odroid X2 в 2012 году, тогда только зарождалась субкультура по одноплатным компьютерам), а также мне всегда было интересно сравнить производительность современных процессоров с процессорами 80-х годов (конечно же я использую и современные бенчмарки). Для меня важно, чтобы у бенчмарков был доступен исходный код (особенно на языке C и без заморочек компиляции), легко собираемый и понятный в интерпретации результатов.
В тестах процессоров я применяю следующие бенчмарки: Dhrystone, Whetstone, Linpack 100, Coremark, MP MFLOPS, Scimark 2, STREAM, TLB, HPL. А также Geekbench, Cpu-z bench, Crystal Mark 2004, 7z и другие.
В данной статье рассмотрим Dhrystone.
Что такое Dhrystone?
Dhrystone (Сухой Камень) разработан в 1984 Dr. Reinhold P. Weicker для измерения целочисленной производительности различных компьютерных систем, в 1988 году вышла версия 2.1. Имя Dhrystone было выбрано как противопоставление бенчмарку Whetstone (Влажный камень) измеряющему производительность с плавающей точкой.
Достоинства бенчмарка:
Простой;
Можно сравнить результаты процессоров разных архитектур;
Легко компилируется и переносится (работает даже на микроконтроллерах).
Недостатки:
Использует ограниченный набор функций;
Не позволяет задействовать все возможности процессора;
Странный код;
Результаты очень зависят от оптимизации компилятора;
Оценки версии 1.1 и 2.1 несовместимы;
Не развивается с 1988 года;
Помещается в кэш процессора (снижается нагрузка на подсистему памяти).
Кстати, бенчмарк Dhrystone часто используют для замера производительности ядер ARM.
Пример вывода результатов:
Dhrystone Benchmark, Version 2.1 (Language: C or C++)
Optimisation amd64 x86-64 optimized
Register option not selected
10000 runs 0.00 seconds
100000 runs 0.00 seconds
1000000 runs 0.02 seconds
10000000 runs 0.12 seconds
20000000 runs 0.23 seconds
40000000 runs 0.45 seconds
80000000 runs 0.90 seconds
160000000 runs 1.80 seconds
320000000 runs 3.66 seconds
Final values (* implementation-dependent):
Int_Glob: O.K. 5 Bool_Glob: O.K. 1
Ch_1_Glob: O.K. A Ch_2_Glob: O.K. B
Arr_1_Glob[8]: O.K. 7 Arr_2_Glob8/7: O.K. 320000010
Ptr_Glob-> Ptr_Comp: * 0x55b8eb3fa2a0
Discr: O.K. 0 Enum_Comp: O.K. 2
Int_Comp: O.K. 17 Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob-> Ptr_Comp: * 0x55b8eb3fa2a0 same as above
Discr: O.K. 0 Enum_Comp: O.K. 1
Int_Comp: O.K. 18 Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc: O.K. 5 Int_2_Loc: O.K. 13
Int_3_Loc: O.K. 7 Enum_Loc: O.K. 1
Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING
Nanoseconds one Dhrystone run: 11.43
Dhrystones per Second: 87460726
VAX MIPS rating = 49778.44
Важные данные результатов:
Dhrystones per Second
- Число Dhrystone в секундуVAX MIPS rating
- Производительность относительно машины DEC VAX 11/780 result с результатом 1 MIPS. Получается путём деленияDhrystones per Second
на 1757. Иногда результаты называют какDMIPS
.
Как работает Dhrystone?
Арифметические операции;
Сравнение строк (Задействует функции strcmp() и strcpy());
Операции с указателями и структурами;
Операции с массивами;
Операции с switch, циклы.
Бенчмарк проверяет результаты выполнения на валидность, а результаты могут быть невалидны, если компилятор сломал код при сильных флагах компиляции. Как сказано выше, результаты могут варьироваться от флагов оптимизаций. Например, лаборатория EEMBC рекомендует отказаться от тестов Dhrystone и использовать бенчмарк Coremark.
Кстати, я портировал бенчмарк Dhrystone на другие языки программирования: Python, JavaScript, PHP, Lua, C#, Java. Код здесь: https://github.com/entityfx/entityfx-bench.
Таблица с результатами тестов некоторых процессоров
Таблицы с различными результатами
Dhry1 Dhry1 Dhry2 Dhry2
Opt NoOpt Opt NoOpt
VAX VAX VAX VAX
CPU MHz MIPS MIPS MIPS MIPS
AMD 80386 40 17.5 4.32 13.7 4.53
IBM 486D2 50 26.6 7.89 22.4 7.89
80486 DX2 66 45.1 12.0 35.3 12.4
IBM 486BL 100 53.9 12.0 40.9 11.8
AMD 5X86 133 84.5 9.37 84.5 9.42
Pentium 75 112 19.3 87.1 18.9
Cyrix P150 120 175 27.9 160 28.3
Pentium 100 169 31.8 122 32.2
Cyrix PP166 133 219 38.4 180 39.8
IBM 6x86 150 234 44.1 188 43.9
Pentium 133 239 38.3 181 39.0
Pentium 166 270 43.6 189 43.9
Cyrix PR233 188 286 46.4 232 45.8
Pentium 200 353 47.4 269 48.1
Pentium MMX 200 352 51.4 276 51.0
AMD K6 200 349 43.1 289 43.3
Pentium Pro 200 373 92.4 312 91.9
Celeron A 300 553 133 484 136
Pentium II 300 544 132 477 136
AMD K62 500 778 77.8 606 76.8
AMD K63 450 804 76.3 645 77.4
Pentium II 450 813 199 713 204
Celeron A 450 828 198 720 202
Pentium III 450 846 197 722 203
Pentium III 600 1105 263 959 270
Athlon 600 1316 321 942 316
Duron 600 1382 350 999 349
Pentium III 1000 1858 461 1595 465
PIII Tualatin 1200 2205 546 1907 571
Pentium 4 1700 2262 239 1843 242
Athlon Tbird 1000 2282 634 1659 602
Duron 1000 2288 576 1674 587
Celeron M 1295 2440 640 2273 645
Atom 1600 2462 717 1828 728
Pentium 4 1900 2593 261 2003 269
Atom 1666 2600 772 1948 780
P4 Xeon 2200 3028 300 2265 309
Atom Z8300 1840 3203 904 2686 927
Athlon 4 1600 3707 956 2830 1004
Pentium M 1862 4082 954 3933 975
Ath4 Barton 1800 4181 1061 3172 1099
Pentium 4E 3000 4379 566 3553 566
Athlon XP 2080 4826 1228 3700 1312
Turion 64 M 1900 4972 1186 3742 1150
Pentium 4 3066 5052 432 4012 434
Opteron 1991 5077 1268 3985 1223
Core 2 Duo M 1830 5379 892 4952 966
Athlon XP 2338 5433 1400 4160 1482
Athlon 64 2150 5658 1312 4288 1355
Pentium 4 3678 5787 511 4227 480
Athlon 64 2211 5798 1348 4462 1312
Celeron C2 M 2000 5804 932 5275 1050
Core 2 Duo 1 CP 2400 7145 1198 6446 1251
Core i5 2467M @@@@ 8338 1183 4752 1148
Phenom II 1 CP 3000 9462 2250 7615 2253
Core i7 930 **** 9826 1662 8684 1661
Core i7 860 #### 10094 1789 9978 1847
Core i7 3930K &&&& 13871 1960 11197 1972
Core i7 4820K $$$1 14136 1958 11867 1981
Core i7 4820K $$$2 14776 2006 11978 2014
Core i7 3930K OC 17269 2444 13877 2432
#### Rated as 2800 MHz but running at up to
3460 MHz using Turbo Boost
**** Rated as 2800 MHz but running at up to
3066 MHz using Turbo Boost
@@@@ Rated as 1600 MHz running at up to
2300 MHz using Turbo Boost
&&&& Rated as 3200 MHz but running at up to
3800 MHz, OC OverClocked ~4730 MHz
$$$1 Rated as 3700 MHz but running at up to
3900 MHz, using Turbo Boost
$$$2 Performance not Balanced Power Setting
for 3900 MHz
M = Mobile CPU
To Start
Dhry1 Dhry1 Dhry2 Dhry2
Opt NoOpt Opt NoOpt
VAX VAX VAX VAX
CPU MHz MIPS MIPS MIPS MIPS
Later Results 32 and 64 Bit MS Compilers
Pentium 4 32b1 1900 2613 1795
Athlon 64 32b1 2211 6104 3720
Athlon 64 64b1 2211 8668 5214
Athlon 64 64b2 2211 8549 4654
Core 2 Duo 32b1 2400 8094 5476
Core 2 Duo 64b1 2400 12600 8550
Core 2 Duo 64b2 2400 11726 6248
Core i7 64b1 &&&& 33048 18355
Core i7 64b2 &&&& 27873 15753
Core i7 32b1 $$$1 15470 10302
Core i7 64b1 $$$1 27113 15580
Core i7 64b2 $$$1 22362 13279
Core i7 32b1 $$$2 15587 10347
Core i7 64b1 $$$2 29291 15756
Core i7 64b2 $$$2 23652 13364
Phenom II 32b1 3000 9768 6006
Phenom II 64b1 3000 9862 6878
Phenom II 64b2 3000 11837 8006
b1 = 32 bit integers, b2 = 64 bit integers
&&&& overclocked i7-3930K see above
$$$1 Turbo Boost < 3900 MHz see above
$$$2 Turbo Boost at 3900 MHz see above
Later MS Compilers Version 18.00
Atom Z8300 32b1 1840 3044
Atom Z8300 64b1 1840 3201
Core 2 Mob 32b1 1830 4546
Core 2 Duo 32b1 2400 6587
Core 2 Duo 64b1 2400 5946
Core i7 32b1 $$$1 12090
Core i7 64b1 $$$1 11686
Phenom II 32b1 3000 7321
Phenom II 64b1 3000 8137
To Start
,B.32 Bit and 64 Bit Linux Results from Ubuntu GCC
Dhry1 Dhry1 Dhry2 Dhry2
Opt NoOpt Opt NoOpt
VAX VAX VAX VAX
CPU OS MHz MIPS MIPS MIPS MIPS
Atom N455 32b Ub 1666 5485 1198 2055 1194
Atom N455 64b Ub 1666 5926 1065 2704 1098
Core 2 Mob 32b Ub 1830 9876 2602 4833 2584
Core 2 Mob 64b Ub 1830 15382 2265 8241 2502
Athlon 64 32b Ub 2211 9034 2286 4580 2347
Athlon 64 64b Ub 2211 14783 2243 6873 2580
Core 2 Duo 32b Ub 2400 13599 3428 5852 3348
Core 2 Duo 64b Ub 2400 18738 3643 12265 3288
Phenom II 32b Ub 3000 13406 3368 6676 3470
Phenom II 64b Ub 3000 21996 3908 11982 3826
Phenom II 64b Fe 3000 21841 3882 12000 3798
Core i7 930 64b Ub **** 24396 5361 16435 5302
Core i7 4820K 32b Ub $$$1 29277 7108 16356 7478
Core i7 4820K 64b Ub $$$1 32659 8436 23607 8481
Ub = Ubuntu Linux, Fe = Fedora Linux
**** Rated as 2800 MHz but running at up to
3066 MHz using Turbo Boost
$$$1 Rated as 3700 MHz but running at up to
3900 MHz, using Turbo Boost
To Start
Android Results Compiled By Native Development Kit
Also results for Raspberry Pi & Linux
Opt NoOpt
System ARM MHz Android Vax Vax
MIPS MIPS
T5 MIPS CPU 1000 4.0.1 56 E
T1 926EJ 800 2.2 356 196
T2 v7-A9 800 2.3.4 962 458
P13 v7-A9 1200 4.1.2 1491
T7 v7-A9 1300a 4.1.2 1610 810
T4 v7-A9 1500a 4.0.3 1650 786
P11 v7-A9v3 1400 4.0.4 1937 866
T11*I v7-A15 2000b 4.2.2 2533
T11 v7-A15 2000b 4.2.2 3189 1504
T21*I QU-800 2150 4.4.3 3319
T21 QU-800 2150 4.4.3 3854 1628
A1*C Z3745 1866 4.4.2 1840 1310
A1*I Z3745 1866 4.4.2 2451
A1*I Z8300 1840 5.1.1 2430
ARM v8-A53 1300 5.0.2 1683
ARM*I v8-A53 1300 5.0.2 1423
ARM*I v8-A53 1300 5.1 1493
ARM*I v8-A53 1500 6.0.1 1649
R1=Atom Z8300 1840 6.0.1 2390
R2 Core i7 3900 6.0.1 10489
64 Bit Version
ARM v8-A53*I 1300 5.0.2 2569
ARM v8-A53*I 1300 5.1 2658
R1=Atom Z8300 1840 6.0.1 3769
R2 Core i7 3900 6.0.1 17003
System - T = Tablet, P = Phone, E = Emulator?
a running at 1500, b at 1700
*I Atom Native Intel/ARM version
*C Atom using Intel to ARM conversion
QU = Qualcomm CPU
R1, R2 Android via REMIX for PC
Raspberry Pi Linux
ARM 1176 700 3.6.11 847
ARM 1176 1000 3.6.11 1226
Raspberry Pi 2
ARM V7A 900 3.18.5 1538
ARM v7A 1000 3.18.5 1694
gcc 4.8
ARM V7A 900 3.18.5 1667
ARM V7A 1000 3.18.5 1852
Raspberry Pi 3, 32 Bit
ARM v8-A53 1200 4.1.19 2201
gcc 4.8
ARM v8-A53 1200 4.1.19 2469
Raspberry Pi 3, 64 Bit
OpenSuse
ARM v8-A53 1200 4.4.36 3536
Gentoo
ARM v8-A53 1200 4.10.0 3475
NOTE: ARM's own results are much faster than these
- different compiler and optimisation?
To Start
16 Bit Results
Dhry1 Dhry1 Dhry2 Dhry2
Opt NoOpt Opt NoOpt
VAX VAX VAX VAX
CPU MHz MIPS MIPS MIPS MIPS
80486 DX2 66 29 14 18 8
Pentium 100 89 41 78 42
Pentium Pro 200 176 95 164 94
Celeron M 1295 705
Pentium 4E 3000 754
Athlon 4 2080 1256
Core i7 4820K 3700 1832
OS/2 Results
80486 75 37 9 35 9
IBM 80486BL 100 54 12 41 12
80486 DX2 66 59 12 48 12
Cyrix P150 120 175 28 160 28
Pentium Pro 150 276 53 218 52
Pentium Pro 166 307 59 242 57
Pentium Pro 200 362 69 285 67
Ссылки
P. S.
Для Windows бенчмарк можно скачать отсюда: http://www.roylongbottom.org.uk/benchnt.zip
Для Linux собираете из исходников: https://github.com/sifive/benchmark-dhrystone или из моего репозитория: https://github.com/EntityFX/anybench