Бенчмарки std::set и std::map
Задумался я соорудить простой тест для сравнения скорости процессоров. Чтобы чуть более практичный, чем Dhrystone. И сдаётся мне, что красно-черные деревья ровно то, что надо. Многие системные программы, скажем компиляторы, занимаются примерно тем же: выполняют разные манипуляции над графами. В языке Си++ на сбалансированных деревьях построены стандартные классы std::set и std::map. Cкорость их работы и будем замерять. А в качестве генератора данных приспособим лоренцов аттрактор.
Сделал я такие тестики: set.cpp и map.cpp. Тесты создают 2 миллиона записей, а затем эти записи по одной удаляют. Общий размер данных выходит порядка 100 мегабайт. Процесс однопоточный, то есть задействуется только одно ядро процессора. Тест выдаёт две величины: скорость (количество записей в миллисекунду) и занятую память (в байтах на одну запись).
Прогнал я эти тесты на имевшихся под рукой компьютерах:
Сделал я такие тестики: set.cpp и map.cpp. Тесты создают 2 миллиона записей, а затем эти записи по одной удаляют. Общий размер данных выходит порядка 100 мегабайт. Процесс однопоточный, то есть задействуется только одно ядро процессора. Тест выдаёт две величины: скорость (количество записей в миллисекунду) и занятую память (в байтах на одну запись).
Прогнал я эти тесты на имевшихся под рукой компьютерах:
- макбук на процессоре Apple M2 - MacOS, clang
- мак мини на процессоре Apple M1 - MacOS, clang
- iMac на процессоре Intel i9 - MacOS, clang
- ноутбук Lenovo на процессоре Intel i7 - Ubuntu, gcc
- Raspberry Py 5 - Ubuntu, gcc
- Raspberry Py 4 - FreeBSD, clang
- олинуксино на процессоре ARM32 - Debian, gcc
--------Rate-------- -------Memory------- Processor, Computer std::set std::map std::set std::map ---------------------------------------------------------------------------------------- Apple M2 Max (12) @ 3.70 GHz 3856.1 2997.5 32.7 48.7 MacBook Pro (16-inch, 2023) ---------------------------------------------------------------------------------------- Apple M1 (8) @ 3.20 GHz 2608.3 2091.6 32.7 48.7 Mac mini (M1, 2020) ---------------------------------------------------------------------------------------- Intel Core i9-9900K (16) @ 3.60 GHz 2302.4 1953.3 32.4 48.5 iMac (Retina 5K, 27-inch, 2019) ---------------------------------------------------------------------------------------- Intel Core i7-8750H (12) @ 4.10 GHz 1656.6 1654.2 49.8 49.8 Lenovo ThinkPad P1 ---------------------------------------------------------------------------------------- Cortex-A76 (4) @ 2.40 GHz 775.7 788.1 49.6 49.6 Raspberry Pi 5 Model B Rev 1.0 ---------------------------------------------------------------------------------------- ARM Cortex-A72 r0p3 (4) @ 1.5 GHz 527.7 490.3 34.7 50.3 Raspberry Pi 4 Model B Rev 1.2 ---------------------------------------------------------------------------------------- Allwinner sun7i (A20) Family (2) @ 960MHz 149.7 141.3 25.2 33.1 Olimex A20-OLinuXino-LIME2
no subject
Set:
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.487 seconds
Resident memory: 65.356 Mbytes
Records per millisecond: 4104.7
Bytes per record: 32.7
Map:
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.638 seconds
Resident memory: 97.468 Mbytes
Records per millisecond: 3133.6
Bytes per record: 48.7
no subject
no subject
-------------------
OS: macOS 15.1 24B2082 arm64
Host: Mac16,7
Kernel: 24.1.0
Uptime: 7 days, 11 hours, 5 mins
Packages: 308 (brew)
Shell: zsh 5.9
Resolution: 1728x1117, 3440x1440
DE: Aqua
WM: Quartz Compositor
WM Theme: Blue (Light)
Terminal: iTerm2
Terminal Font: Monaco 12
CPU: Apple M4 Pro
GPU: Apple M4 Pro
Memory: 8079MiB / 49152MiB
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.546 seconds
Resident memory: 65.438 Mbytes
Records per millisecond: 3659.8
Bytes per record: 32.7
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.528 seconds
Resident memory: 65.454 Mbytes
Records per millisecond: 3790.5
Bytes per record: 32.7
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.585 seconds
Resident memory: 65.421 Mbytes
Records per millisecond: 3417.0
Bytes per record: 32.7
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.759 seconds
Resident memory: 97.567 Mbytes
Records per millisecond: 2633.9
Bytes per record: 48.8
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.722 seconds
Resident memory: 97.550 Mbytes
Records per millisecond: 2769.3
Bytes per record: 48.8
====
Last 8.42386 8.03421 27.4317
Sum 292628
Elapsed time: 0.701 seconds
Resident memory: 97.550 Mbytes
Records per millisecond: 2854.5
Bytes per record: 48.8
no subject
no subject
no subject
no subject
no subject
no subject
no subject
До того ж, здається, що код має бути ідентичним до того, що на Intel i9 рядком вище.
no subject
no subject
як воно впливає). Але тоді що цей бенчмарк вимірює?
no subject