tgoop.com/reverse13/739
Create:
Last Update:
Last Update:
1. Давно хотел померять std::function альтернативы, так как бенчмарки которые видел были очень outdated.
Взял микробенчмарк из abseil и адаптировал.
Не ноутная amd железка, clang 19, libc++ 19 (abi v2!), около транк для остальных либ
Benchmark Time CPU Iterations
-----------------------------------------------------------------------------
BM_TrivialStdFunction 1.11 ns 1.11 ns 622220945
BM_TrivialAbslFunctionRef 1.10 ns 1.10 ns 637419510
BM_TrivialAbslAnyInvocable 1.85 ns 1.85 ns 377698611
BM_TrivialFollyFunctionRef 1.10 ns 1.10 ns 635925877
BM_TrivialFollyFunction 2.03 ns 2.03 ns 345277532
BM_TrivialBoostFunction 1.31 ns 1.31 ns 535099651
BM_TrivialFu2Function 5.27 ns 5.27 ns 133167133
BM_TrivialFu2UniqueFunction 5.07 ns 5.07 ns 137751417
BM_LargeStdFunction 11.0 ns 11.0 ns 63490131
BM_LargeAbslFunctionRef 1.10 ns 1.10 ns 635590925
BM_LargeAbslAnyInvocable 9.20 ns 9.20 ns 76082731
BM_LargeFollyFunctionRef 1.10 ns 1.10 ns 635390697
BM_LargeFollyFunction 11.1 ns 11.1 ns 62981528
BM_LargeBoostFunction 11.9 ns 11.9 ns 58833683
BM_LargeFu2Function 10.5 ns 10.5 ns 66229864
BM_LargeFu2UniqueFunction 10.7 ns 10.7 ns 65711158
BM_FunPtrStdFunction 1.42 ns 1.42 ns 472854986
BM_FunPtrAbslFunctionRef 1.28 ns 1.28 ns 545957263
BM_FunPtrAbslAnyInvocable 3.77 ns 3.77 ns 185835648
BM_FunPtrFollyFunctionRef 1.28 ns 1.28 ns 545872297
BM_FunPtrFollyFunction 2.03 ns 2.03 ns 345335520
BM_FunPtrBoostFunction 1.49 ns 1.49 ns 470280007
BM_FunPtrFu2Function 5.98 ns 5.98 ns 117100264
BM_FunPtrFu2FunctionView 1.29 ns 1.29 ns 541223933
BM_FunPtrFu2UniqueFunction 6.35 ns 6.35 ns 110392385
BM_TrivialArgsStdFunction 0.930 ns 0.930 ns 752811771
BM_TrivialArgsAbslFunctionRef 0.934 ns 0.934 ns 752592908
BM_TrivialArgsAbslAnyInvocable 1.11 ns 1.11 ns 630181056
BM_TrivialArgsFollyFunctionRef 0.952 ns 0.952 ns 743261325
BM_TrivialArgsFollyFunction 0.938 ns 0.938 ns 753110708
BM_TrivialArgsBoostFunction 1.12 ns 1.12 ns 627254290
BM_TrivialArgsFu2Function 2.24 ns 2.24 ns 312131551
BM_TrivialArgsFu2UniqueFunction 2.24 ns 2.24 ns 312115556
BM_NonTrivialArgsStdFunction 4.30 ns 4.30 ns 162679265
BM_NonTrivialArgsAbslFunctionRef 4.65 ns 4.65 ns 150336051
BM_NonTrivialArgsAbslAnyInvocable 4.29 ns 4.29 ns 162800037
BM_NonTrivialArgsFollyFunctionRef 4.65 ns 4.65 ns 150487034
BM_NonTrivialArgsFollyFunction 4.29 ns 4.29 ns 163183216
BM_NonTrivialArgsBoostFunction 7.48 ns 7.48 ns 93603218
BM_NonTrivialArgsFu2Function 5.94 ns 5.94 ns 117998045
BM_NonTrivialArgsFu2UniqueFunction 6.12 ns 6.12 ns 118745273
Чтобы понимать погрешность можно смотреть на absl vs folly FunctionRef, там по сути одинаковый код
Удивило что
В случае abi v1, оно все еще неплохо, но уже похуже abseil/folly
2. fu2 такой фу фу (зато умеет в overload-ы, fu2::function_view работает только для function pointer?)
3. absl::AnyInvocable в случае function pointer, хотя вроде бы в их коде есть special case под это
BY Loser story
Share with your friend now:
tgoop.com/reverse13/739