Skip to content

Commit a9f556f

Browse files
committed
Update floating-point formatting benchmarks
std::to_chars is a big win over IO streams.
1 parent 27d24da commit a9f556f

File tree

1 file changed

+28
-18
lines changed

1 file changed

+28
-18
lines changed

bench/string/README.md

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ All results below are the median of 1000001 iterations of creating a formatted s
1313

1414
| Formatter | Duration (ns) |
1515
| :-- | --: |
16-
| libfly | 1.626 |
17-
| STL IO Streams | 1.877 |
18-
| {fmt} | 0.586 |
16+
| libfly | 1.093 |
17+
| {fmt} | 0.609 |
18+
| STL IO Streams | 1.812 |
1919

2020
### Formatting without floats
2121

@@ -33,21 +33,31 @@ All results below are the median of 1000001 iterations of creating a formatted s
3333
Each sample counts as 0.01 seconds.
3434
% cumulative self self total
3535
time seconds seconds calls ms/call ms/call name
36-
15.49 0.47 0.11 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>&&)
37-
5.63 0.59 0.04 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&)
38-
5.63 0.63 0.04 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 long, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned long, bool)
39-
4.23 0.66 0.03 2000004 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::BasicStreamModifiers(std::ostream&)
40-
2.82 0.68 0.02 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)
41-
1.41 0.70 0.01 1000013 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
42-
1.41 0.71 0.01 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)
43-
0.00 0.71 0.00 2000004 0.00 0.00 fly::detail::BasicStreamModifiers<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~BasicStreamModifiers()
44-
0.00 0.71 0.00 2000002 0.00 0.00 fly::benchmark::Table<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>::~Table()
45-
0.00 0.71 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 char, false>(fly::detail::BasicFormatSpecifier<char>&&, unsigned char, bool)
46-
0.00 0.71 0.00 1000001 0.00 0.00 std::enable_if<std::__or_<std::__or_<std::is_same<std::remove_cv<unsigned long>::type, signed char>, std::is_same<std::remove_cv<unsigned long>::type, short>, std::is_same<std::remove_cv<unsigned long>::type, int>, std::is_same<std::remove_cv<unsigned long>::type, long>, std::is_same<std::remove_cv<unsigned long>::type, long long> >, std::__or_<std::is_same<std::remove_cv<unsigned long>::type, unsigned char>, std::is_same<std::remove_cv<unsigned long>::type, unsigned short>, std::is_same<std::remove_cv<unsigned long>::type, unsigned int>, std::is_same<std::remove_cv<unsigned long>::type, unsigned long>, std::is_same<std::remove_cv<unsigned long>::type, unsigned long long> >, std::is_same<char, std::remove_cv<unsigned long>::type> >::value, std::to_chars_result>::type std::__to_chars_i<unsigned long>(char*, char*, unsigned long, int)
47-
0.00 0.71 0.00 1196 0.00 0.00 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release()
48-
0.00 0.71 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&)
49-
0.00 0.71 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&)
50-
```
36+
17.33 0.50 0.13 1000001 0.00 0.00 void fly::BasicString<char>::format_to<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, double, int, double, char const (&) [4], decltype(nullptr), char>(std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, fly::detail::BasicFormatString<char, std::type_identity<double>::type, std::type_identity<int>::type, std::type_identity<double>::type, std::type_identity<char const (&) [4]>::type, std::type_identity<decltype(nullptr)>::type, std::type_identity<char>::type>&&, double&&, int&&, double&&, char const (&) [4], decltype(nullptr)&&, char&&)
37+
6.67 0.55 0.05 2000003 0.00 0.00 void fly::Formatter<double, char, bool>::format<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(double, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
38+
5.33 0.59 0.04 2000003 0.00 0.00 fly::Formatter<double, char, bool>::format<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(double, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)::{lambda()#3}::operator()() const
39+
4.00 0.66 0.03 1000018 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
40+
4.00 0.69 0.03 1000007 0.00 0.00 void fly::detail::format_standard_value<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>, char>(fly::detail::StandardValue<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&, fly::detail::BasicFormatSpecifier<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>::char_type>&&)
41+
1.33 0.70 0.01 1000016 0.00 0.00 (anonymous namespace)::Base64::encode(std::filesystem::__cxx11::path const&, std::filesystem::__cxx11::path const&)
42+
1.33 0.71 0.01 1000007 0.00 0.00 void fly::Formatter<char, char, bool>::format_as_character<unsigned char, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned char, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
43+
1.33 0.72 0.01 1000006 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long)
44+
1.33 0.73 0.01 1000001 0.00 0.00 void fly::Formatter<int, char, bool>::append_number<unsigned int, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned int, int, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
45+
1.33 0.74 0.01 1000001 0.00 0.00 void fly::Formatter<int, char, bool>::format<unsigned int, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned int, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
46+
1.33 0.75 0.01 1000001 0.00 0.00 fly::Formatter<unsigned long, char, bool>::format<unsigned long, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned long, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)::{lambda()#1}::operator()() const
47+
0.00 0.75 0.00 2000003 0.00 0.00 void fly::detail::format_standard_value<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>, double>(fly::detail::StandardValue<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&, fly::detail::BasicFormatSpecifier<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>::char_type>&&)
48+
0.00 0.75 0.00 1000007 0.00 0.00 void fly::Formatter<char, char, bool>::format<unsigned char, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned char, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
49+
0.00 0.75 0.00 1000006 0.00 0.00 void fly::detail::format_string_value<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>, char>(void const*, unsigned long, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&, fly::detail::BasicFormatSpecifier<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>::char_type>&&)
50+
0.00 0.75 0.00 1000006 0.00 0.00 void fly::Formatter<std::basic_string_view<char, std::char_traits<char> >, char, bool>::format<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(std::basic_string_view<char, std::char_traits<char> > const&, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
51+
0.00 0.75 0.00 1000001 0.00 0.00 void fly::detail::format_standard_value<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>, decltype(nullptr)>(fly::detail::StandardValue<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&, fly::detail::BasicFormatSpecifier<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>::char_type>&&)
52+
0.00 0.75 0.00 1000001 0.00 0.00 void fly::detail::format_standard_value<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>, int>(fly::detail::StandardValue<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&, fly::detail::BasicFormatSpecifier<fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>::char_type>&&)
53+
0.00 0.75 0.00 1000001 0.00 0.00 void fly::Formatter<unsigned long, char, bool>::append_number<unsigned long, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned long, int, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
54+
0.00 0.75 0.00 1000001 0.00 0.00 void fly::Formatter<unsigned long, char, bool>::format<unsigned long, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned long, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)
55+
0.00 0.75 0.00 1000001 0.00 0.00 fly::Formatter<int, char, bool>::format<unsigned int, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char> >(unsigned int, bool, fly::detail::BasicFormatContext<std::back_insert_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char>&)::{lambda()#1}::operator()() const
56+
0.00 0.75 0.00 95 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> >(char const*, std::allocator<char> const&) [clone .constprop.0]
57+
0.00 0.75 0.00 51 0.00 0.00 void 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> > > >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, 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> > > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
58+
0.00 0.75 0.00 47 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> > > >::push_back(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
59+
0.00 0.75 0.00 34 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
60+
```
5161

5262
### Formatting without floats
5363

0 commit comments

Comments
 (0)