
``` ------------------------------------------------------------------- Benchmark old new ------------------------------------------------------------------- BM_format_string<char>/1 42.1 ns 7.67 ns BM_format_string<char>/2 22.3 ns 3.84 ns BM_format_string<char>/4 10.6 ns 1.92 ns BM_format_string<char>/8 5.31 ns 0.815 ns BM_format_string<char>/16 2.79 ns 0.480 ns BM_format_string<char>/32 1.63 ns 0.550 ns BM_format_string<char>/64 0.782 ns 0.276 ns BM_format_string<char>/128 0.397 ns 0.145 ns BM_format_string<char>/256 0.211 ns 0.066 ns BM_format_string<char>/512 0.154 ns 0.035 ns BM_format_string<char>/1024 0.146 ns 0.021 ns BM_format_string<char>/2048 0.125 ns 0.033 ns BM_format_string<char>/4096 0.097 ns 0.016 ns BM_format_string<char>/8192 0.077 ns 0.012 ns BM_format_string<char>/16384 0.066 ns 0.010 ns BM_format_string<char>/32768 0.062 ns 0.016 ns BM_format_string<char>/65536 0.062 ns 0.016 ns BM_format_string<char>/131072 0.443 ns 0.015 ns BM_format_string<char>/262144 0.629 ns 0.017 ns BM_format_string<char>/524288 0.715 ns 0.020 ns BM_format_string<char>/1048576 0.757 ns 0.020 ns BM_format_string<wchar_t>/1 38.8 ns 34.0 ns BM_format_string<wchar_t>/2 19.4 ns 16.9 ns BM_format_string<wchar_t>/4 9.88 ns 8.45 ns BM_format_string<wchar_t>/8 6.30 ns 6.47 ns BM_format_string<wchar_t>/16 3.11 ns 3.21 ns BM_format_string<wchar_t>/32 1.60 ns 1.63 ns BM_format_string<wchar_t>/64 0.899 ns 0.925 ns BM_format_string<wchar_t>/128 0.676 ns 0.693 ns BM_format_string<wchar_t>/256 0.658 ns 0.685 ns BM_format_string<wchar_t>/512 0.556 ns 0.531 ns BM_format_string<wchar_t>/1024 0.428 ns 0.402 ns BM_format_string<wchar_t>/2048 0.328 ns 0.319 ns BM_format_string<wchar_t>/4096 0.276 ns 0.274 ns BM_format_string<wchar_t>/8192 0.252 ns 0.251 ns BM_format_string<wchar_t>/16384 0.248 ns 0.246 ns BM_format_string<wchar_t>/32768 0.229 ns 0.232 ns BM_format_string<wchar_t>/65536 0.248 ns 0.246 ns BM_format_string<wchar_t>/131072 0.250 ns 0.240 ns BM_format_string<wchar_t>/262144 3.03 ns 3.03 ns BM_format_string<wchar_t>/524288 3.14 ns 3.15 ns BM_format_string<wchar_t>/1048576 3.60 ns 3.61 ns BM_string_without_formatting<char> 32.2 ns 0.470 ns BM_string_without_formatting<wchar_t> 38.8 ns 10.2 ns ```
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
|
|
|
#include <format>
|
|
|
|
#include <string>
|
|
|
|
#include "benchmark/benchmark.h"
|
|
#include "make_string.h"
|
|
#include "test_macros.h"
|
|
|
|
#define CSTR(S) MAKE_CSTRING(CharT, S)
|
|
|
|
template <class CharT>
|
|
static void BM_format_string(benchmark::State& state) {
|
|
size_t size = state.range(0);
|
|
std::basic_string<CharT> str(size, CharT('*'));
|
|
|
|
while (state.KeepRunningBatch(str.size())) {
|
|
std::basic_string<CharT> s = std::format(CSTR("{}"), str);
|
|
benchmark::DoNotOptimize(s);
|
|
}
|
|
|
|
state.SetBytesProcessed(state.iterations() * size * sizeof(CharT));
|
|
}
|
|
BENCHMARK(BM_format_string<char>)->RangeMultiplier(2)->Range(1, 1 << 20);
|
|
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
|
BENCHMARK(BM_format_string<wchar_t>)->RangeMultiplier(2)->Range(1, 1 << 20);
|
|
#endif
|
|
|
|
template <class CharT>
|
|
static void BM_string_without_formatting(benchmark::State& state) {
|
|
for (auto _ : state) {
|
|
benchmark::DoNotOptimize(std::format(CSTR("Hello, World!")));
|
|
}
|
|
}
|
|
BENCHMARK(BM_string_without_formatting<char>);
|
|
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
|
BENCHMARK(BM_string_without_formatting<wchar_t>);
|
|
#endif
|
|
|
|
BENCHMARK_MAIN();
|