Skip to content

Commit a9f1ab7

Browse files
author
Raghuveer Devulapalli
committed
Add ipp index sort to benchmarks
1 parent 9718f47 commit a9f1ab7

File tree

5 files changed

+74
-5
lines changed

5 files changed

+74
-5
lines changed

benchmarks/bench-argsort.hpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,30 @@ static void simdargsort(benchmark::State &state, Args &&...args)
4545
}
4646
}
4747

48+
template <typename T, class... Args>
49+
static void simd_ordern_argsort(benchmark::State &state, Args &&...args)
50+
{
51+
// get args
52+
auto args_tuple = std::make_tuple(std::move(args)...);
53+
size_t arrsize = std::get<0>(args_tuple);
54+
std::string arrtype = std::get<1>(args_tuple);
55+
// set up array
56+
std::vector<T> arr = get_array<T>(arrtype, arrsize);
57+
std::vector<int32_t> arg(arrsize);
58+
std::iota(arg.begin(), arg.end(), 0);
59+
// benchmark
60+
for (auto _ : state) {
61+
std::vector<T> arr_bkp = arr;
62+
x86simdsort::keyvalue_qsort(arr_bkp.data(), arg.data(), arrsize);
63+
state.PauseTiming();
64+
std::iota(arg.begin(), arg.end(), 0);
65+
state.ResumeTiming();
66+
}
67+
}
68+
4869
#define BENCH_BOTH(type) \
4970
BENCH_SORT(simdargsort, type) \
71+
BENCH_SORT(simd_ordern_argsort, type) \
5072
BENCH_SORT(scalarargsort, type)
5173

5274
BENCH_BOTH(int64_t)

benchmarks/bench-ipp.cpp

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,51 @@ static void ippsort(benchmark::State &state, Args &&...args)
3535
}
3636
}
3737

38-
BENCH_SORT(ippsort, uint64_t)
39-
BENCH_SORT(ippsort, int64_t)
40-
BENCH_SORT(ippsort, uint32_t)
41-
BENCH_SORT(ippsort, int32_t)
38+
template <typename T, class... Args>
39+
static void ippargsort(benchmark::State &state, Args &&...args)
40+
{
41+
auto args_tuple = std::make_tuple(std::move(args)...);
42+
size_t arrsize = std::get<0>(args_tuple);
43+
/* IPP set up */
44+
int bufsize = 10;
45+
if constexpr (std::is_same_v<T, float>) {
46+
ippsSortRadixIndexGetBufferSize(arrsize, ipp32f, &bufsize);
47+
}
48+
else if constexpr (std::is_same_v<T, double>) {
49+
ippsSortRadixIndexGetBufferSize(arrsize, ipp64f, &bufsize);
50+
}
51+
else if constexpr (std::is_same_v<T, int32_t>) {
52+
ippsSortRadixIndexGetBufferSize(arrsize, ipp32s, &bufsize);
53+
}
54+
unsigned char *temp = new unsigned char[bufsize];
55+
56+
// set up array
57+
std::string arrtype = std::get<1>(args_tuple);
58+
std::vector<T> arr = get_array<T>(arrtype, arrsize);
59+
std::vector<T> arr_bkp = arr;
60+
std::vector<int32_t> arg(arrsize);
61+
std::iota(arg.begin(), arg.end(), 0);
62+
63+
// benchmark
64+
for (auto _ : state) {
65+
if constexpr (std::is_same_v<T, float>) {
66+
ippsSortRadixIndexAscend_32f(arr.data(), 4, arg.data(), arrsize, temp);
67+
}
68+
else if constexpr (std::is_same_v<T, double>) {
69+
ippsSortRadixIndexAscend_64f(arr.data(), 8, arg.data(), arrsize, temp);
70+
}
71+
else if constexpr (std::is_same_v<T, int32_t>) {
72+
ippsSortRadixIndexAscend_32s(arr.data(), 4, arg.data(), arrsize, temp);
73+
}
74+
state.PauseTiming();
75+
arr = arr_bkp;
76+
std::iota(arg.begin(), arg.end(), 0);
77+
state.ResumeTiming();
78+
}
79+
}
80+
4281
BENCH_SORT(ippsort, double)
4382
BENCH_SORT(ippsort, float)
83+
BENCH_SORT(ippargsort, double)
84+
BENCH_SORT(ippargsort, float)
85+
BENCH_SORT(ippargsort, int32_t)

benchmarks/bench.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
func, type, random_1m, 1000000, std::string("random")); \
2828
MY_BENCHMARK_CAPTURE( \
2929
func, type, random_10m, 10000000, std::string("random")); \
30+
MY_BENCHMARK_CAPTURE( \
31+
func, type, random_100m, 100000000, std::string("random")); \
3032
MY_BENCHMARK_CAPTURE( \
3133
func, type, smallrange_128, 128, std::string("smallrange")); \
3234
MY_BENCHMARK_CAPTURE( \

run-bench.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
if "ippsort" in args.benchcompare:
2727
baseline = "ippsort.*" + filterb
2828
contender = "simdsort.*" + filterb
29+
elif "ippargsort" in args.benchcompare:
30+
baseline = "ippargsort.*" + filterb
31+
contender = "simd_ordern_argsort.*" + filterb
2932
elif "vqsort" in args.benchcompare:
3033
baseline = "vqsort.*" + filterb
3134
contender = "simdsort.*" + filterb

scripts/bench-compare.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ if [ ! -d .bench/google-benchmark ]; then
1111
fi
1212
compare=$(realpath .bench/google-benchmark/tools/compare.py)
1313

14-
meson setup -Dbuild_benchmarks=true --warnlevel 0 --buildtype release builddir-${branch}
14+
meson setup -Dbuild_benchmarks=true -Dbuild_ippbench=true --warnlevel 0 --buildtype release builddir-${branch}
1515
cd builddir-${branch}
1616
ninja
1717
$compare filters ./benchexe $1 $2 --benchmark_repetitions=$3

0 commit comments

Comments
 (0)