Бенчмарк Dhrystone — что это такое?

от автора

Бенчмаркингом я занимаюсь уже более 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 

Ссылки


ссылка на оригинал статьи https://habr.com/ru/articles/743702/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *