Skip to content

Commit 510c9b2

Browse files
committed
Rework benchmark project:
* Add a new dimension of test-pattern to the mix * Remove much of the copy-paste related to registering the existing benchmark by using RegisterBenchmark directly with template meta-programming
1 parent c446b67 commit 510c9b2

15 files changed

+207
-147
lines changed

CMakeLists.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ CPMAddPackage(
214214
GIT_TAG main
215215
OPTIONS "BUILD_TESTING OFF"
216216
)
217-
CPMAddPackage("gh:fmtlib/fmt#9.1.0")
217+
CPMAddPackage("gh:fmtlib/fmt#10.0.0")
218+
CPMAddPackage("gh:Neargye/magic_enum#v0.9.2")
218219
CPMAddPackage("gh:okdshin/PicoSHA2#master")
219220

220221
enable_testing()

bench/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ target_link_libraries(${TARGET_NAME}
1111
${CMAKE_PROJECT_NAME}_lib
1212
benchmark
1313
picosha2
14+
fmt::fmt
15+
magic_enum::magic_enum
1416
${CMAKE_THREAD_LIBS_INIT})
1517

1618
configure_file(run.sh run.sh COPYONLY)

bench/bench.cpp

+24-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
11
#include "benchmark/benchmark.h"
22

3+
namespace vxsort_bench {
4+
5+
void register_fullsort_avx2_i_benchmarks();
6+
void register_fullsort_avx2_u_benchmarks();
7+
void register_fullsort_avx2_f_benchmarks();
8+
void register_fullsort_avx512_i_benchmarks();
9+
void register_fullsort_avx512_u_benchmarks();
10+
void register_fullsort_avx512_f_benchmarks();
11+
12+
void register_benchmarks() {
13+
register_fullsort_avx2_i_benchmarks();
14+
register_fullsort_avx2_u_benchmarks();
15+
register_fullsort_avx2_f_benchmarks();
16+
register_fullsort_avx512_i_benchmarks();
17+
register_fullsort_avx512_u_benchmarks();
18+
register_fullsort_avx512_f_benchmarks();
19+
}
20+
} // namespace vxsort_bench
21+
322
using namespace std;
423

5-
int main(int argc, char** argv)
6-
{
7-
::benchmark::Initialize(&argc, argv);
8-
::benchmark::RunSpecifiedBenchmarks();
9-
}
24+
int main(int argc, char** argv) {
25+
vxsort_bench::register_benchmarks();
26+
::benchmark::Initialize(&argc, argv);
27+
::benchmark::RunSpecifiedBenchmarks();
28+
}

bench/fullsort/BM_fullsort.pdqsort.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ static void BM_pdqsort_branchless(benchmark::State& state) {
1515
auto n = state.range(0);
1616
const auto ITERATIONS = 10;
1717

18-
auto v = generate_unique_values_vec(n, (Q)0x1000, (Q)8);
18+
auto v = unique_values(n, (Q) 0x1000, (Q) 8);
1919
auto copies = generate_copies(ITERATIONS, n, v);
2020
auto begins = generate_array_beginnings(copies);
2121
auto ends = generate_array_beginnings(copies);

bench/fullsort/BM_fullsort.stdsort.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ static void BM_stdsort(benchmark::State& state) {
1515
auto n = state.range(0);
1616
const auto ITERATIONS = 10;
1717

18-
auto v = generate_unique_values_vec(n, (Q)0x1000, (Q)8);
18+
auto v = unique_values(n, (Q) 0x1000, (Q) 8);
1919
auto copies = generate_copies(ITERATIONS, n, v);
2020
auto begins = generate_array_beginnings(copies);
2121
auto ends = generate_array_beginnings(copies);
+6-13
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
1-
#include "vxsort_targets_enable_avx2.h"
1+
#include "vxsort_targets_enable_avx2.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
4+
#include <random>
55

66
#include <vxsort.avx2.h>
77

88
#include "BM_fullsort.vxsort.h"
99

1010
namespace vxsort_bench {
1111
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1312
using vm = vxsort::vector_machine;
1413

15-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
20-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
21-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
14+
void register_fullsort_avx2_f_benchmarks() {
15+
register_fullsort_benchmarks<vm::AVX2, 8, f32, f64>();
2516
}
2617

18+
} // namespace vxsort_bench
19+
2720
#include "vxsort_targets_disable.h"
+6-18
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,19 @@
1-
#include "vxsort_targets_enable_avx2.h"
1+
#include "vxsort_targets_enable_avx2.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
5-
64
#include <vxsort.avx2.h>
5+
#include <random>
76

87
#include "BM_fullsort.vxsort.h"
98

109
namespace vxsort_bench {
1110
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1311
using vm = vxsort::vector_machine;
1412

15-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
20-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
21-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
25-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
26-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
27-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
28-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
13+
void register_fullsort_avx2_i_benchmarks() {
14+
register_fullsort_benchmarks<vm::AVX2, 8, i16, i32, i64>();
2915
}
3016

17+
} // namespace vxsort_bench
18+
3119
#include "vxsort_targets_disable.h"
+6-18
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,20 @@
1-
#include "vxsort_targets_enable_avx2.h"
1+
#include "vxsort_targets_enable_avx2.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
4+
#include <random>
55

66
#include <vxsort.avx2.h>
77

88
#include "BM_fullsort.vxsort.h"
99

1010
namespace vxsort_bench {
1111
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1312
using vm = vxsort::vector_machine;
1413

15-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
20-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
21-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
25-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX2, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
26-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX2, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
27-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX2, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
28-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX2, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
29-
14+
void register_fullsort_avx2_u_benchmarks() {
15+
register_fullsort_benchmarks<vm::AVX2, 8, u16, u32, u64>();
3016
}
3117

18+
} // namespace vxsort_bench
19+
3220
#include "vxsort_targets_disable.h"
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,20 @@
11
#include "vxsort_targets_enable_avx512.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
4+
#include <random>
55

66
#include <vxsort.avx512.h>
77

88
#include "BM_fullsort.vxsort.h"
99

1010
namespace vxsort_bench {
1111
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1312
using vm = vxsort::vector_machine;
1413

15-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
BENCHMARK_TEMPLATE(BM_vxsort, f32, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
20-
21-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
BENCHMARK_TEMPLATE(BM_vxsort, f64, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
25-
14+
void register_fullsort_avx512_f_benchmarks() {
15+
register_fullsort_benchmarks<vm::AVX512, 8, f32, f64>();
2616
}
2717

18+
} // namespace vxsort_bench
19+
2820
#include "vxsort_targets_disable.h"
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,20 @@
11
#include "vxsort_targets_enable_avx512.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
4+
#include <random>
55

66
#include <vxsort.avx512.h>
77

88
#include "BM_fullsort.vxsort.h"
99

1010
namespace vxsort_bench {
1111
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1312
using vm = vxsort::vector_machine;
1413

15-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, i16, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
20-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
21-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, i32, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
25-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
26-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
27-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
28-
BENCHMARK_TEMPLATE(BM_vxsort, i64, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
29-
14+
void register_fullsort_avx512_i_benchmarks() {
15+
register_fullsort_benchmarks<vm::AVX512, 8, i16, i32, i64>();
3016
}
3117

18+
} // namespace vxsort_bench
19+
3220
#include "vxsort_targets_disable.h"
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,20 @@
11
#include "vxsort_targets_enable_avx512.h"
22

3-
#include <random>
43
#include <benchmark/benchmark.h>
4+
#include <random>
55

66
#include <vxsort.avx512.h>
77

88
#include "BM_fullsort.vxsort.h"
99

1010
namespace vxsort_bench {
1111
using namespace vxsort::types;
12-
using benchmark::TimeUnit;
1312
using vm = vxsort::vector_machine;
1413

15-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
16-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
17-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
18-
BENCHMARK_TEMPLATE(BM_vxsort, u16, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
19-
20-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
21-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
22-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
23-
BENCHMARK_TEMPLATE(BM_vxsort, u32, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
24-
25-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX512, 1)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
26-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX512, 2)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
27-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX512, 4)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
28-
BENCHMARK_TEMPLATE(BM_vxsort, u64, vm::AVX512, 8)->RangeMultiplier(2)->Range(MIN_SORT, MAX_SORT)->Unit(kMillisecond)->ThreadRange(1, processor_count);
29-
14+
void register_fullsort_avx512_u_benchmarks() {
15+
register_fullsort_benchmarks<vm::AVX512, 8, u16, u32, u64>();
3016
}
3117

18+
} // namespace vxsort_bench
19+
3220
#include "vxsort_targets_disable.h"

0 commit comments

Comments
 (0)