94 lines
4.9 KiB
Markdown
94 lines
4.9 KiB
Markdown
# Простой бенчмарк HDL симуляторов (версия альфа)
|
||
|
||
Для оценки скорости запускается симуляция 1024 софт-процессоров
|
||
[PicoRV32](https://github.com/YosysHQ/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](https://github.com/cambridgehackers/open-src-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 |
|
||
```
|