tgoop.com/hft_dev/12
Last Update:
Некоторое время назад начал записывать результаты бенчмарков в базу знаний в Obsidian. Спустя год-два ты ведь уже не вспомнишь что быстрее std::to_string
или fmt::to_string
или my_to_string
, и насколько, и почему, и какие инсайты это тебе дало. А если записано, то позже вернёшься и освежишь в памяти.
Для корректности стоит так же записать используемые:
- железо (CPU, RAM, caches)
- окружение (os distribution, kernel, версия используемого компилятора, версия std lib)
- флаги процесса, с котороми запускал бенч (например, для google benchmark использую --benchmark_min_warmup_time=0.1 --benchmark_repetitions=5 --benchmark_report_aggregates_only=1
, но со временем привычки могут меняться, и это должно быть записано)
- версии библиотек
- флаги компилятора и линковщика
Например:
--------------------------------
Benchmark Time CPU
--------------------------------
bench_libfmt_mean 45.4 ns 45.4 ns
bench_libfmt_median 45.3 ns 45.3 ns
bench_libfmt_stddev 0.455 ns 0.402 ns
bench_fmt_to_string_mean 23.7 ns 23.7 ns
bench_fmt_to_string_median 23.6 ns 23.6 ns
bench_fmt_to_string_stddev 0.340 ns 0.340 ns
bench_std_to_string_mean 132 ns 132 ns
bench_std_to_string_median 132 ns 132 ns
bench_std_to_string_stddev 0.460 ns 0.445 ns
libfmt: v8.1.1
c++23
g++: v11.4.0
CPU: AMD Ryzen 7 5800U
RAM: DDR4
CPU Caches:
L1 Data 32 KiB (x8)
L1 Instruction 32 KiB (x8)
L2 Unified 512 KiB (x8)
L3 Unified 16384 KiB (x1)
OS: 23.04, kernel 5.15.0-89-generic
Run: `--benchmark_min_warmup_time=0.1 --benchmark_repetitions=5 --benchmark_report_aggregates_only=1`
По сему получается, fmt::to_string заметно шустрее.
Чего не хватает в моей реализации записок:
- Иногда не храню исходник самого бенча. Через год уже и не вспомнишь, что подавал на вход, что конкретно мерил, и не сделал ли ошибок.
- Не автоматизирован сбор данных об окружении.
- На записаны флаги компиляции.
BY Один микросек - C++, low latency, concurrency, HFT
Share with your friend now:
tgoop.com/hft_dev/12