@@ -7,31 +7,69 @@ Benchmark of the libfly JSON parser against the popular {fmt} library and the ST
7
7
8
8
## Results
9
9
10
- Results below are the median of 1000001 iterations of creating a formatted string. Obviously, libfly
11
- could use some work :)
10
+ All results below are the median of 1000001 iterations of creating a formatted string.
11
+
12
+ ### Formatting with floats
12
13
13
14
| Formatter | Duration (ns) |
14
15
| :-- | --: |
15
- | libfly | 2.337 |
16
- | {fmt} | 0.592 |
17
- | STL IO Streams | 1.857 |
16
+ | libfly | 1.784 |
17
+ | STL IO Streams | 1.877 |
18
+ | {fmt} | 0.586 |
19
+
20
+ ### Formatting without floats
21
+
22
+ | Formatter | Duration (ns) |
23
+ | :-- | --: |
24
+ | libfly | 0.748 |
25
+ | {fmt} | 0.411 |
26
+ | STL IO Streams | 1.011 |
27
+
28
+ ## Profiles
29
+
30
+ ### Formatting with floats
31
+
32
+ ```
33
+ Each sample counts as 0.01 seconds.
34
+ % cumulative self self total
35
+ time seconds seconds calls ms/call ms/call name
36
+ 10.45 0.46 0.07 2000002 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format_value<double, false>(fly::detail::BasicFormatSpecifier<char>&&, double const&)
37
+ 10.45 0.53 0.07 1000001 0.00 0.00 fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>&&)
38
+ 8.96 0.59 0.06 5000005 0.00 0.00 void fly::detail::BasicFormatParameters<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::visit<fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>&&)::{lambda(auto:1&&, auto:2 const&)#1}, 1ul>(fly::detail::BasicFormatSpecifier<char>&&, fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>&&)::{lambda(auto:1&&, auto:2 const&)#1}) const
39
+ 5.97 0.63 0.04 11000011 0.00 0.00 TLS init function for fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::s_stream
40
+ 2.99 0.65 0.02 1000013 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
41
+ 1.49 0.66 0.01 2000004 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~BasicStreamModifiers()
42
+ 1.49 0.67 0.01 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format_value<unsigned char, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned char, bool)
43
+ 0.00 0.67 0.00 2000004 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::BasicStreamModifiers(std::ostream&)
44
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format_value<char [4], false>(fly::detail::BasicFormatSpecifier<char>&&, char const (&) [4])
45
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, false>(fly::detail::BasicFormatSpecifier<char>&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
46
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format_value<unsigned int, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned int, bool)
47
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::append_string<char [4], false>(char const (&) [4], unsigned long)
48
+ 0.00 0.67 0.00 1000001 0.00 0.00 std::enable_if<std::__or_<std::__or_<std::is_same<std::remove_cv<unsigned int>::type, signed char>, std::is_same<std::remove_cv<unsigned int>::type, short>, std::is_same<std::remove_cv<unsigned int>::type, int>, std::is_same<std::remove_cv<unsigned int>::type, long>, std::is_same<std::remove_cv<unsigned int>::type, long long> >, std::__or_<std::is_same<std::remove_cv<unsigned int>::type, unsigned char>, std::is_same<std::remove_cv<unsigned int>::type, unsigned short>, std::is_same<std::remove_cv<unsigned int>::type, unsigned int>, std::is_same<std::remove_cv<unsigned int>::type, unsigned long>, std::is_same<std::remove_cv<unsigned int>::type, unsigned long long> >, std::is_same<char, std::remove_cv<unsigned int>::type> >::value, std::to_chars_result>::type std::__to_chars_i<unsigned int>(char*, char*, unsigned int, int)
49
+ 0.00 0.67 0.00 2131 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
50
+ 0.00 0.67 0.00 1196 0.00 0.00 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release()
51
+ 0.00 0.67 0.00 1016 0.00 0.00 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::vector(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)
52
+ ```
18
53
19
- ## Profile
54
+ ### Formatting without floats
20
55
21
56
```
22
57
Each sample counts as 0.01 seconds.
23
58
% cumulative self self total
24
59
time seconds seconds calls ms/call ms/call name
25
- 26.92 0.56 0.21 1000001 0.00 0.00 fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>&&)
26
- 3.85 0.65 0.03 6000038 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::BasicStreamModifiers(std::ostream&)
27
- 3.85 0.68 0.03 2000002 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::set_numeric_options<double>(fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, fly::detail::BasicFormatSpecifier<char> const&, double const&) const
28
- 2.56 0.73 0.02 6000038 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~BasicStreamModifiers()
29
- 2.56 0.75 0.02 6000006 0.00 0.00 fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::set_generic_options(fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, fly::detail::BasicFormatSpecifier<char> const&) const
30
- 1.28 0.76 0.01 2 5.00 5.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
31
- 1.28 0.77 0.01 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)
32
- 1.28 0.78 0.01 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::swap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)
33
- 0.00 0.78 0.00 1000001 0.00 0.00 void fly::detail::BasicStringStreamer<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::stream_string<char const (&) [4]>(std::ostream&, char const (&) [4], unsigned long)
34
- 0.00 0.78 0.00 1196 0.00 0.00 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release()
35
- 0.00 0.78 0.00 1172 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
36
- 0.00 0.78 0.00 1016 0.00 0.00 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::vector(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)
60
+ 16.42 0.50 0.11 1000001 0.00 0.00 fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>&&)
61
+ 7.46 0.62 0.05 3000003 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::format_value<unsigned int, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned int, bool)
62
+ 4.48 0.65 0.03 3000003 0.00 0.00 TLS init function for fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::s_stream
63
+ 1.49 0.67 0.01 fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>::format(fly::detail::BasicFormatString<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double, int, double, char const (&) [4], decltype(nullptr), char>&&)
64
+ 0.00 0.67 0.00 3000003 0.00 0.00 std::enable_if<std::__or_<std::__or_<std::is_same<std::remove_cv<unsigned int>::type, signed char>, std::is_same<std::remove_cv<unsigned int>::type, short>, std::is_same<std::remove_cv<unsigned int>::type, int>, std::is_same<std::remove_cv<unsigned int>::type, long>, std::is_same<std::remove_cv<unsigned int>::type, long long> >, std::__or_<std::is_same<std::remove_cv<unsigned int>::type, unsigned char>, std::is_same<std::remove_cv<unsigned int>::type, unsigned short>, std::is_same<std::remove_cv<unsigned int>::type, unsigned int>, std::is_same<std::remove_cv<unsigned int>::type, unsigned long>, std::is_same<std::remove_cv<unsigned int>::type, unsigned long long> >, std::is_same<char, std::remove_cv<unsigned int>::type> >::value, std::to_chars_result>::type std::__to_chars_i<unsigned int>(char*, char*, unsigned int, int)
65
+ 0.00 0.67 0.00 1000013 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
66
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::format_value<char [4], false>(fly::detail::BasicFormatSpecifier<char>&&, char const (&) [4])
67
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::format_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, false>(fly::detail::BasicFormatSpecifier<char>&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
68
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::format_value<unsigned char, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned char, bool)
69
+ 0.00 0.67 0.00 1000001 0.00 0.00 void fly::detail::BasicStringFormatter<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, char const (&) [4], decltype(nullptr), char>::append_string<char [4], false>(char const (&) [4], unsigned long)
70
+ 0.00 0.67 0.00 2131 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
71
+ 0.00 0.67 0.00 1196 0.00 0.00 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release()
72
+ 0.00 0.67 0.00 1016 0.00 0.00 std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::vector(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)
73
+ 0.00 0.67 0.00 139 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()
74
+ 0.00 0.67 0.00 120 0.00 0.00 void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char const*>(char const*, char const*, std::forward_iterator_tag)
37
75
```
0 commit comments