Skip to content

Commit 9718f47

Browse files
author
Raghuveer Devulapalli
committed
Add IPP sort to benchmarks
1 parent 5c133e7 commit 9718f47

File tree

6 files changed

+82
-5
lines changed

6 files changed

+82
-5
lines changed

benchmarks/bench-ipp.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include "bench.h"
2+
#include "ipp.h"
3+
4+
template <typename T, class... Args>
5+
static void ippsort(benchmark::State &state, Args &&...args)
6+
{
7+
auto args_tuple = std::make_tuple(std::move(args)...);
8+
size_t arrsize = std::get<0>(args_tuple);
9+
/* IPP set up */
10+
int bufsize = 10;
11+
if constexpr (std::is_same_v<T, float>) {
12+
ippsSortRadixGetBufferSize(arrsize, ipp32f, &bufsize);
13+
}
14+
else if constexpr (std::is_same_v<T, double>) {
15+
ippsSortRadixGetBufferSize(arrsize, ipp64f, &bufsize);
16+
}
17+
unsigned char *temp = new unsigned char[bufsize];
18+
19+
// Get args
20+
std::string arrtype = std::get<1>(args_tuple);
21+
// set up array
22+
std::vector<T> arr = get_array<T>(arrtype, arrsize);
23+
std::vector<T> arr_bkp = arr;
24+
// benchmark
25+
for (auto _ : state) {
26+
if constexpr (std::is_same_v<T, float>) {
27+
ippsSortRadixAscend_32f_I(arr.data(), arrsize, temp);
28+
}
29+
else if constexpr (std::is_same_v<T, double>) {
30+
ippsSortRadixAscend_64f_I(arr.data(), arrsize, temp);
31+
}
32+
state.PauseTiming();
33+
arr = arr_bkp;
34+
state.ResumeTiming();
35+
}
36+
}
37+
38+
BENCH_SORT(ippsort, uint64_t)
39+
BENCH_SORT(ippsort, int64_t)
40+
BENCH_SORT(ippsort, uint32_t)
41+
BENCH_SORT(ippsort, int32_t)
42+
BENCH_SORT(ippsort, double)
43+
BENCH_SORT(ippsort, float)

benchmarks/bench-qsort.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ static void simdsort(benchmark::State &state, Args &&...args)
3636
}
3737
}
3838

39+
3940
#define BENCH_BOTH_QSORT(type) \
4041
BENCH_SORT(simdsort, type) \
41-
BENCH_SORT(scalarsort, type)
42+
BENCH_SORT(scalarsort, type) \
4243

4344
BENCH_BOTH_QSORT(uint64_t)
4445
BENCH_BOTH_QSORT(int64_t)

benchmarks/meson.build

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ libbench += static_library('bench_qsort',
99
cpp_args : ['-O3'],
1010
)
1111

12-
if fs.is_file('highway/hwy/contrib/sort/vqsort-inl.h')
13-
hwy = include_directories('highway')
12+
if benchvq and fs.is_file('../highway/hwy/contrib/sort/vqsort-inl.h')
13+
hwy = include_directories('../highway')
1414
libbench += static_library('bench_vqsort',
1515
files(
1616
'bench-vqsort.cpp',
@@ -20,3 +20,14 @@ if fs.is_file('highway/hwy/contrib/sort/vqsort-inl.h')
2020
cpp_args : ['-O3', '-march=native'],
2121
)
2222
endif
23+
24+
if benchipp
25+
libbench += static_library('bench_ippsort',
26+
files(
27+
'bench-ipp.cpp',
28+
),
29+
dependencies: gbench_dep,
30+
include_directories : [src, lib, utils],
31+
cpp_args : ['-O3', '-march=native'],
32+
)
33+
endif

meson.build

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ bench = include_directories('benchmarks')
1010
utils = include_directories('utils')
1111
tests = include_directories('tests')
1212

13+
# Add IPP sort to benchmarks:
14+
benchipp = false
15+
ipplink = []
16+
if get_option('build_ippbench')
17+
benchipp = true
18+
ipplink = ['-lipps', '-lippcore']
19+
endif
20+
21+
# Add google vqsort to benchmarks:
22+
benchvq = false
23+
if get_option('build_vqsortbench')
24+
benchvq = true
25+
endif
26+
1327
fp16code = '''#include<immintrin.h>
1428
int main() {
1529
__m512h temp = _mm512_set1_ph(1.0f);
@@ -50,13 +64,14 @@ if get_option('build_tests')
5064
endif
5165

5266
# Build benchmarking suite if option build_benchmarks is set to true
67+
5368
if get_option('build_benchmarks')
5469
gbench_dep = dependency('benchmark', required : true, static: false)
5570
subdir('benchmarks')
5671
benchexe = executable('benchexe',
5772
include_directories : [src, lib, utils, bench],
5873
dependencies : [gbench_dep],
59-
link_args: ['-lbenchmark_main'],
74+
link_args: ['-lbenchmark_main', ipplink],
6075
link_whole : [libbench],
6176
link_with : libsimdsort,
6277
)

meson_options.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@ option('build_tests', type : 'boolean', value : false,
22
description : 'Build test suite (default: "false").')
33
option('build_benchmarks', type : 'boolean', value : false,
44
description : 'Build benchmarking suite (default: "false").')
5+
option('build_ippbench', type : 'boolean', value : false,
6+
description : 'Add IPP sort to benchmarks (default: "false").')
7+
option('build_vqsortbench', type : 'boolean', value : false,
8+
description : 'Add google vqsort to benchmarks (default: "false").')

run-bench.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323
if args.benchcompare:
2424
baseline = ""
2525
contender = ""
26-
if "vqsort" in args.benchcompare:
26+
if "ippsort" in args.benchcompare:
27+
baseline = "ippsort.*" + filterb
28+
contender = "simdsort.*" + filterb
29+
elif "vqsort" in args.benchcompare:
2730
baseline = "vqsort.*" + filterb
2831
contender = "simdsort.*" + filterb
2932
elif "qsort" in args.benchcompare:

0 commit comments

Comments
 (0)