Skip to content

Commit aba8371

Browse files
author
Raghuveer Devulapalli
committed
Add benchmarks for keyvalue sort
1 parent b8600a4 commit aba8371

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

benchmarks/bench-all.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,4 @@
4444
#include "bench-partial-qsort.hpp"
4545
#include "bench-qselect.hpp"
4646
#include "bench-qsort.hpp"
47+
#include "bench-keyvalue.hpp"

benchmarks/bench-keyvalue.hpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include "x86simdsort-scalar.h"
2+
3+
template <typename T, class... Args>
4+
static void scalarkvsort(benchmark::State &state, Args &&...args)
5+
{
6+
// Get args
7+
auto args_tuple = std::make_tuple(std::move(args)...);
8+
size_t arrsize = std::get<0>(args_tuple);
9+
std::string arrtype = std::get<1>(args_tuple);
10+
// set up array
11+
std::vector<T> key = get_array<T>(arrtype, arrsize);
12+
std::vector<T> val = get_array<T>("random", arrsize);
13+
std::vector<T> key_bkp = key;
14+
// benchmark
15+
for (auto _ : state) {
16+
xss::scalar::keyvalue_qsort(key.data(), val.data(), arrsize, false);
17+
state.PauseTiming();
18+
key = key_bkp;
19+
state.ResumeTiming();
20+
}
21+
}
22+
23+
template <typename T, class... Args>
24+
static void simdkvsort(benchmark::State &state, Args &&...args)
25+
{
26+
auto args_tuple = std::make_tuple(std::move(args)...);
27+
size_t arrsize = std::get<0>(args_tuple);
28+
std::string arrtype = std::get<1>(args_tuple);
29+
// set up array
30+
std::vector<T> key = get_array<T>(arrtype, arrsize);
31+
std::vector<T> val = get_array<T>("random", arrsize);
32+
std::vector<T> key_bkp = key;
33+
// benchmark
34+
for (auto _ : state) {
35+
x86simdsort::keyvalue_qsort(key.data(), val.data(), arrsize);
36+
state.PauseTiming();
37+
key = key_bkp;
38+
state.ResumeTiming();
39+
}
40+
}
41+
42+
#define BENCH_BOTH_KVSORT(type) \
43+
BENCH_SORT(simdkvsort, type) \
44+
BENCH_SORT(scalarkvsort, type)
45+
46+
BENCH_BOTH_KVSORT(uint64_t)
47+
BENCH_BOTH_KVSORT(int64_t)
48+
BENCH_BOTH_KVSORT(double)

run-bench.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
elif "argsort" in args.benchcompare:
3232
baseline = "scalarargsort.*" + filterb
3333
contender = "simdargsort.*" + filterb
34+
elif "keyvalue" in args.benchcompare:
35+
baseline = "scalarkvsort.*" + filterb
36+
contender = "simdkvsort.*" + filterb
3437
else:
3538
parser.print_help(sys.stderr)
3639
parser.error("ERROR: Unknown argument '%s'" % args.benchcompare)

0 commit comments

Comments
 (0)