Skip to content

punzik/simbench

Repository files navigation

Простой бенчмарк HDL симуляторов (версия альфа)

Для оценки скорости запускается симуляция 1024 софт-процессоров PicoRV32 с программой вычисления хэш-суммы MD5 от блока 1кБ. Данные в каждом блоке инициализируются разными значениями. Размер блока по-умолчанию равен 1кБ, но с помощью параметра +dlen=NNN можно установить произвольный размер.

В папке source находятся исходники RTL и программы. Верхний модуль - testbench с единственным входным сигналом clock. Генерация клока во внешнем модуле сделана для совместимости с верилятором, который не позволяет генерировать клок в верилоге.

В папках test-* находятся скрипты для запуска бенчимарка на конкретном симуляторе. Скрипты называются __build.sh (для сборки проекта) и __run.sh (для запуска симуляции).

Скрипт run.sh запускает бенчмарк из выбранной папки или все тесты. В параметрах можно указать количество софт-ядер, размер блока, количество потоков симуляции (пока только для верилятора) и список бенчмарков:

  $ ./run.sh -h
  Usage: ./run.sh [OPTION]... [SIM...]
  Run simulator benchmark. Calculates MD5 hash from a block data
  on an array of soft-cores PicoRV32.

  Options:
    -c [COUNT]    Soft CPU count in simulation. Default: 1024
    -s [SIZE]     Data block size in bytes. Default: 1024 bytes
    -t [COUNT]    Simulation threads count. Default: 1
                  (so far only for Verilator)
    -l            List of available benchmarks
    -h            This help

  The SIM parameter is the name of the simulator from the list of
  option -l. If the parameter is not specified, benchmarks for all
  simulators will be performed. Be careful, some simulators take
  a very long time to benchmark.

Результаты для 1024 процессоров

  • 2 x Xeon E5-2630v3 @ 2.40GHz (no HT), 64GB RAM

  • NixOS 24.11 Linux Kernel 6.6.67

  • GCC 13.3.0

  • Verilator 5.028 2024-08-21 rev v5.028

  • Icarus Verilog 13.0 (devel) (s20221226-127-gdeeac2edf)

  • QuestaSim 64 2021.1 (Revision: 2021.1)

  • Vivado 2021.1

  • OSS CVC (rev. 782c69a)

  • VCS T-2022.06

Время выполнения бенчмарка на блоке 1кБ (чч:мм:сс):

| Симулятор             | Build    | Run      |
+-----------------------+----------+----------+
| CVC                   | 00:00:05 | 00:57:15 |
| Icarus Verilog        | 00:00:23 | 16:15:02 |
| QuestaSim (+acc)      | 00:00:00 | 01:06:54 |
| QuestaSim (-O5)       | 00:00:00 | 00:06:50 |
| VCS                   | 00:00:25 | 00:04:12 |
| Verilator (1 thread)  | 00:09:23 | 00:02:45 |
| Verilator (8 threads) | 00:09:02 | 00:00:50 |
| XSIM                  | 00:00:29 | 02:06:16 |
| Xcelium               | TBD      |          |

Удалось протестировать Xcelium на другом оборудованиии и привести время выполнения бенчмарка к остальным симам. Время сборки на этих симуляторах примерно соответствует времени сборки на XSIM.

В таблице ниже показано относительное время выполнения теста, приведенное к времени выполнения на многопоточном Вериляторе. Вериляторы 5.028 и 4.120 показали практически одинаковую скорость, разность в пределах погрешности. Но в 5.028 была включена опция --timing, а клок формировался в верилоге.

"По просьбе выживших, имена были изменены. Из уважения к погибшим, остальное было рассказано в точности так, как это произошло."

| Симулятор             | Run  |
+-----------------------+------+
| CVC                   |   69 |
| Icarus Verilog        | 1170 |
| QuestaSim (+acc)      |   80 |
| QuestaSim (-O5)       |  8.2 |
| VCS                   |  5.0 |
| Verilator (1 thread)  |  3.3 |
| Verilator (8 threads) |    1 |
| XSIM                  |  152 |
| Xcelium               |   ~4 |

About

Simple HDL simulators benchmark

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published