[libcxx-commits] [libcxx] [libc++] Reduce the number of runs on the ranges::min{, max} benchmarks (PR #179912)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Feb 9 07:07:23 PST 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/179912
>From 94b142a27530a11319f8bf6ae56fd09c49897411 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Thu, 5 Feb 2026 12:20:38 +0100
Subject: [PATCH] [libc++] Reduce the number of runs on the std::min{,max}
benchmarks
---
.../test/benchmarks/algorithms/min.bench.cpp | 99 ++++++-------------
.../benchmarks/algorithms/minmax.bench.cpp | 92 ++++++-----------
2 files changed, 64 insertions(+), 127 deletions(-)
diff --git a/libcxx/test/benchmarks/algorithms/min.bench.cpp b/libcxx/test/benchmarks/algorithms/min.bench.cpp
index 9928afd567737..ae523e9460fe1 100644
--- a/libcxx/test/benchmarks/algorithms/min.bench.cpp
+++ b/libcxx/test/benchmarks/algorithms/min.bench.cpp
@@ -10,76 +10,41 @@
#include <algorithm>
#include <cassert>
+#include <deque>
+#include <vector>
#include <benchmark/benchmark.h>
-#include "test_macros.h"
-void run_sizes(auto benchmark) {
- benchmark->Arg(1)
- ->Arg(2)
- ->Arg(3)
- ->Arg(4)
- ->Arg(5)
- ->Arg(6)
- ->Arg(7)
- ->Arg(8)
- ->Arg(9)
- ->Arg(10)
- ->Arg(11)
- ->Arg(12)
- ->Arg(13)
- ->Arg(14)
- ->Arg(15)
- ->Arg(16)
- ->Arg(17)
- ->Arg(18)
- ->Arg(19)
- ->Arg(20)
- ->Arg(21)
- ->Arg(22)
- ->Arg(23)
- ->Arg(24)
- ->Arg(25)
- ->Arg(26)
- ->Arg(27)
- ->Arg(28)
- ->Arg(29)
- ->Arg(30)
- ->Arg(31)
- ->Arg(32)
- ->Arg(64)
- ->Arg(512)
- ->Arg(1024)
- ->Arg(4000)
- ->Arg(4096)
- ->Arg(5500)
- ->Arg(64000)
- ->Arg(65536)
- ->Arg(70000);
-}
+int main(int argc, char** argv) {
+ auto bm = []<class Container>(std::type_identity<Container>, std::string name) {
+ benchmark::RegisterBenchmark(
+ name,
+ [](benchmark::State& state) {
+ Container vec(state.range(), 3);
-template <class T>
-static void BM_std_min(benchmark::State& state) {
- std::vector<T> vec(state.range(), 3);
+ for (auto _ : state) {
+ benchmark::DoNotOptimize(vec);
+ benchmark::DoNotOptimize(std::ranges::min(vec));
+ }
+ })
+ ->Arg(1)
+ ->Arg(8)
+ ->Arg(64)
+ ->Arg(70000);
+ };
- for (auto _ : state) {
- benchmark::DoNotOptimize(vec);
- benchmark::DoNotOptimize(std::ranges::min(vec));
- }
-}
-BENCHMARK(BM_std_min<char>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<short>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<int>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<long long>)->Apply(run_sizes);
-#ifndef TEST_HAS_NO_INT128
-BENCHMARK(BM_std_min<__int128>)->Apply(run_sizes);
-#endif
-BENCHMARK(BM_std_min<unsigned char>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<unsigned short>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<unsigned int>)->Apply(run_sizes);
-BENCHMARK(BM_std_min<unsigned long long>)->Apply(run_sizes);
-#ifndef TEST_HAS_NO_INT128
-BENCHMARK(BM_std_min<unsigned __int128>)->Apply(run_sizes);
-#endif
+ bm(std::type_identity<std::vector<char>>(), "ranges::min(std::vector<char>)");
+ bm(std::type_identity<std::vector<long long>>(), "ranges::min(std::vector<long long>)");
+ bm(std::type_identity<std::vector<__int128>>(), "ranges::min(std::vector<__int128>)");
+ bm(std::type_identity<std::vector<unsigned __int128>>(), "ranges::min(std::vector<__int128>)");
-BENCHMARK_MAIN();
+ bm(std::type_identity<std::deque<char>>(), "ranges::min(std::deque<char>)");
+ bm(std::type_identity<std::deque<long long>>(), "ranges::min(std::deque<long long>)");
+ bm(std::type_identity<std::deque<__int128>>(), "ranges::min(std::deque<__int128>)");
+ bm(std::type_identity<std::deque<unsigned __int128>>(), "ranges::min(std::deque<__int128>)");
+
+ benchmark::Initialize(&argc, argv);
+ benchmark::RunSpecifiedBenchmarks();
+ benchmark::Shutdown();
+ return 0;
+}
diff --git a/libcxx/test/benchmarks/algorithms/minmax.bench.cpp b/libcxx/test/benchmarks/algorithms/minmax.bench.cpp
index 7d7c74c9c96aa..10f18b060e946 100644
--- a/libcxx/test/benchmarks/algorithms/minmax.bench.cpp
+++ b/libcxx/test/benchmarks/algorithms/minmax.bench.cpp
@@ -10,69 +10,41 @@
#include <algorithm>
#include <cassert>
+#include <deque>
+#include <vector>
#include <benchmark/benchmark.h>
-void run_sizes(auto benchmark) {
- benchmark->Arg(1)
- ->Arg(2)
- ->Arg(3)
- ->Arg(4)
- ->Arg(5)
- ->Arg(6)
- ->Arg(7)
- ->Arg(8)
- ->Arg(9)
- ->Arg(10)
- ->Arg(11)
- ->Arg(12)
- ->Arg(13)
- ->Arg(14)
- ->Arg(15)
- ->Arg(16)
- ->Arg(17)
- ->Arg(18)
- ->Arg(19)
- ->Arg(20)
- ->Arg(21)
- ->Arg(22)
- ->Arg(23)
- ->Arg(24)
- ->Arg(25)
- ->Arg(26)
- ->Arg(27)
- ->Arg(28)
- ->Arg(29)
- ->Arg(30)
- ->Arg(31)
- ->Arg(32)
- ->Arg(64)
- ->Arg(512)
- ->Arg(1024)
- ->Arg(4000)
- ->Arg(4096)
- ->Arg(5500)
- ->Arg(64000)
- ->Arg(65536)
- ->Arg(70000);
-}
+int main(int argc, char** argv) {
+ auto bm = []<class Container>(std::type_identity<Container>, std::string name) {
+ benchmark::RegisterBenchmark(
+ name,
+ [](benchmark::State& state) {
+ Container vec(state.range(), 3);
-template <class T>
-static void BM_std_minmax(benchmark::State& state) {
- std::vector<T> vec(state.range(), 3);
+ for (auto _ : state) {
+ benchmark::DoNotOptimize(vec);
+ benchmark::DoNotOptimize(std::ranges::minmax(vec));
+ }
+ })
+ ->Arg(1)
+ ->Arg(8)
+ ->Arg(64)
+ ->Arg(70000);
+ };
- for (auto _ : state) {
- benchmark::DoNotOptimize(vec);
- benchmark::DoNotOptimize(std::ranges::minmax(vec));
- }
-}
-BENCHMARK(BM_std_minmax<char>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<short>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<int>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<long long>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<unsigned char>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<unsigned short>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<unsigned int>)->Apply(run_sizes);
-BENCHMARK(BM_std_minmax<unsigned long long>)->Apply(run_sizes);
+ bm(std::type_identity<std::vector<char>>(), "ranges::minmax(std::vector<char>)");
+ bm(std::type_identity<std::vector<long long>>(), "ranges::minmax(std::vector<long long>)");
+ bm(std::type_identity<std::vector<__int128>>(), "ranges::minmax(std::vector<__int128>)");
+ bm(std::type_identity<std::vector<unsigned __int128>>(), "ranges::minmax(std::vector<__int128>)");
-BENCHMARK_MAIN();
+ bm(std::type_identity<std::deque<char>>(), "ranges::minmax(std::deque<char>)");
+ bm(std::type_identity<std::deque<long long>>(), "ranges::minmax(std::deque<long long>)");
+ bm(std::type_identity<std::deque<__int128>>(), "ranges::minmax(std::deque<__int128>)");
+ bm(std::type_identity<std::deque<unsigned __int128>>(), "ranges::minmax(std::deque<__int128>)");
+
+ benchmark::Initialize(&argc, argv);
+ benchmark::RunSpecifiedBenchmarks();
+ benchmark::Shutdown();
+ return 0;
+}
More information about the libcxx-commits
mailing list