Skip to content

Commit 0a520f4

Browse files
committed
Fix IPP benchmarks
1 parent 2c2fb7a commit 0a520f4

File tree

4 files changed

+88
-25
lines changed

4 files changed

+88
-25
lines changed

benchmark/google/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ endforeach()
6565
unset(_benchmarks)
6666
unset(_benchmark)
6767

68+
69+
#-----------------------------------------------------------------------------
70+
# Options
71+
#-----------------------------------------------------------------------------
72+
option(BOOST_GIL_BUILD_BENCHMARKS_OPENCV "Builds all OpenCV benchmarks" OFF)
73+
option(BOOST_GIL_BUILD_BENCHMARKS_BLAZE "Builds all BLAZE benchmarks" OFF)
74+
option(BOOST_GIL_BUILD_BENCHMARKS_IPP "Builds all IPP benchmarks" OFF)
75+
6876
if(BOOST_GIL_BUILD_BENCHMARKS_OPENCV)
6977
add_subdirectory(opencv)
7078
endif()

benchmark/google/ipp/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ add_library(ipp::ipp INTERFACE IMPORTED)
1818
target_include_directories(ipp::ipp INTERFACE ${IPP_INCLUDE_DIR})
1919
target_link_libraries(ipp::ipp INTERFACE ${IPP_LIB_CORE} ${IPP_LIB_I})
2020

21+
#-----------------------------------------------------------------------------
22+
# Build benchmarks
23+
#-----------------------------------------------------------------------------
24+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12.0)
25+
file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp CONFIGURE_DEPEND)
26+
else()
27+
file(GLOB _benchmarks ${CMAKE_CURRENT_LIST_DIR}/*.cpp)
28+
endif()
29+
2130
foreach(_benchmark ${_benchmarks})
2231
get_filename_component(_name ${_benchmark} NAME_WE)
2332
set(_target benchmark_google_ipp_${_name})
@@ -31,3 +40,6 @@ foreach(_benchmark ${_benchmarks})
3140
gil_googlebenchmark
3241
ipp::ipp)
3342
endforeach()
43+
44+
unset(_benchmarks)
45+
unset(_benchmark)

benchmark/google/ipp/view_flip.cpp

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#include <boost/gil.hpp>
1212

13+
inline bool is_odd(benchmark::IterationCount cnt) { return (cnt % 2); }
14+
1315
static void ipp_flip_left_right(benchmark::State& state)
1416
{
1517
using namespace boost::gil;
@@ -24,11 +26,14 @@ static void ipp_flip_left_right(benchmark::State& state)
2426

2527
for (auto _ : state) {
2628
// The code to benchmark
27-
ippiMirror_8u_C1R(
28-
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int) in.width(),
29-
boost::gil::interleaved_view_get_raw_data(view(out)), (int) out.width(),
29+
auto res = ippiMirror_8u_C1R(
30+
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int)const_view(in).pixels().row_size(),
31+
boost::gil::interleaved_view_get_raw_data(view(out)), (int)view(in).pixels().row_size(),
3032
srcRoi,
3133
ippAxsVertical);
34+
35+
if (res != ippStsNoErr)
36+
state.SkipWithError("ipp_flip_left_right failed");
3237
}
3338

3439
if (!equal_pixels(flipped_left_right_view(const_view(in)), const_view(out)))
@@ -50,14 +55,23 @@ static void ipp_flip_left_right_inplace(benchmark::State& state)
5055

5156
for (auto _ : state) {
5257
// The code to benchmark
53-
ippiMirror_8u_C1IR(
54-
boost::gil::interleaved_view_get_raw_data(view(in)), (int) in.width(),
58+
auto res = ippiMirror_8u_C1IR(
59+
boost::gil::interleaved_view_get_raw_data(view(in)), (int)view(in).pixels().row_size(),
5560
srcRoi,
5661
ippAxsVertical);
62+
63+
if (res != ippStsNoErr)
64+
state.SkipWithError("ipp_flip_left_right_inplace failed");
65+
}
66+
67+
if (is_odd(state.iterations())) {
68+
if (!equal_pixels(flipped_left_right_view(const_view(in_ref)), const_view(in)))
69+
state.SkipWithError("ipp_flip_left_right_inplace wrong result");
70+
}
71+
else {
72+
if (!equal_pixels(const_view(in_ref), const_view(in)))
73+
state.SkipWithError("ipp_flip_left_right_inplace wrong result");
5774
}
58-
59-
if (!equal_pixels(flipped_left_right_view(const_view(in)), const_view(in_ref)))
60-
state.SkipWithError("ipp_flip_left_right_inplace wrong result");
6175
}
6276
BENCHMARK(ipp_flip_left_right_inplace)->RangeMultiplier(2)->Range(256, 8 << 10);
6377

@@ -75,15 +89,24 @@ static void ipp_flip_up_down(benchmark::State& state)
7589

7690
for (auto _ : state) {
7791
// The code to benchmark
78-
ippiMirror_8u_C1R(
79-
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int) in.width(),
80-
boost::gil::interleaved_view_get_raw_data(view(out)), (int) out.width(),
92+
auto res = ippiMirror_8u_C1R(
93+
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int)const_view(in).pixels().row_size(),
94+
boost::gil::interleaved_view_get_raw_data(view(out)), (int)view(out).pixels().row_size(),
8195
srcRoi,
8296
ippAxsHorizontal);
97+
98+
if (res != ippStsNoErr)
99+
state.SkipWithError("ipp_flip_up_down failed");
100+
}
101+
102+
if (is_odd(state.iterations())) {
103+
if (!equal_pixels(flipped_up_down_view(const_view(in)), const_view(out)))
104+
state.SkipWithError("ipp_flip_up_down wrong result");
105+
}
106+
else {
107+
if (!equal_pixels(const_view(in), const_view(out)))
108+
state.SkipWithError("ipp_flip_up_down wrong result");
83109
}
84-
85-
if (!equal_pixels(flipped_left_right_view(const_view(in)), const_view(out)))
86-
state.SkipWithError("ipp_flip_up_down wrong result");
87110
}
88111
BENCHMARK(ipp_flip_up_down)->RangeMultiplier(2)->Range(256, 8 << 10);
89112

@@ -101,13 +124,16 @@ static void ipp_flip_up_down_inplace(benchmark::State& state)
101124

102125
for (auto _ : state) {
103126
// The code to benchmark
104-
ippiMirror_8u_C1IR(
105-
boost::gil::interleaved_view_get_raw_data(view(in)), (int) in.width(),
127+
auto res = ippiMirror_8u_C1IR(
128+
boost::gil::interleaved_view_get_raw_data(view(in)), (int)view(in).pixels().row_size(),
106129
srcRoi,
107130
ippAxsHorizontal);
131+
132+
if (res != ippStsNoErr)
133+
state.SkipWithError("ipp_flip_up_down_inplace failed");
108134
}
109135

110-
if (!equal_pixels(flipped_left_right_view(const_view(in)), const_view(in_ref)))
136+
if (!equal_pixels(flipped_up_down_view(const_view(in_ref)), const_view(in)))
111137
state.SkipWithError("ipp_flip_up_down_inplace wrong result");
112138
}
113139
BENCHMARK(ipp_flip_up_down_inplace)->RangeMultiplier(2)->Range(256, 8 << 10);

benchmark/google/ipp/view_transpose.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
#include <boost/gil.hpp>
1212

13+
inline bool is_odd(benchmark::IterationCount cnt) { return (cnt % 2); }
14+
1315
static void ipp_transpose(benchmark::State& state)
1416
{
1517
using namespace boost::gil;
@@ -24,10 +26,13 @@ static void ipp_transpose(benchmark::State& state)
2426

2527
for (auto _ : state) {
2628
// The code to benchmark
27-
ippiTranspose_8u_C1R(
28-
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int) in.width(),
29-
boost::gil::interleaved_view_get_raw_data(view(out)), (int) out.width(),
29+
auto res = ippiTranspose_8u_C1R(
30+
boost::gil::interleaved_view_get_raw_data(const_view(in)), (int) const_view(in).pixels().row_size(),
31+
boost::gil::interleaved_view_get_raw_data(view(out)), (int)const_view(out).pixels().row_size(),
3032
srcRoi);
33+
34+
if (res != ippStsNoErr)
35+
state.SkipWithError("ipp_transpose_inplace failed");
3136
}
3237

3338
if (!equal_pixels(transposed_view(const_view(in)), const_view(out)))
@@ -45,17 +50,29 @@ static void ipp_transpose_inplace(benchmark::State& state)
4550
generate_pixels(view(in), [i = 0]() mutable -> std::uint8_t { return ++i; });
4651
gray8_image_t in_ref(in);
4752

53+
if (!equal_pixels(const_view(in_ref), const_view(in)))
54+
state.SkipWithError("ipp_transpose_inplace wrong init");
55+
4856
IppiSize srcRoi = { dim, dim };
4957

5058
for (auto _ : state) {
5159
// The code to benchmark
52-
ippiTranspose_8u_C1IR(
53-
boost::gil::interleaved_view_get_raw_data(view(in)), (int) in.width(),
60+
auto res = ippiTranspose_8u_C1IR(
61+
boost::gil::interleaved_view_get_raw_data(view(in)), (int)const_view(in).pixels().row_size(),
5462
srcRoi);
63+
64+
if (res != ippStsNoErr)
65+
state.SkipWithError("ipp_transpose_inplace failed");
66+
}
67+
68+
if (is_odd(state.iterations())) {
69+
if (!equal_pixels(transposed_view(const_view(in_ref)), const_view(in)))
70+
state.SkipWithError("ipp_transpose_inplace wrong result");
71+
}
72+
else {
73+
if (!equal_pixels(const_view(in_ref), const_view(in)))
74+
state.SkipWithError("ipp_transpose_inplace wrong result");
5575
}
56-
57-
if (!equal_pixels(transposed_view(const_view(in_ref)), const_view(in)))
58-
state.SkipWithError("ipp_transpose_inplace wrong result");
5976
}
6077
BENCHMARK(ipp_transpose_inplace)->RangeMultiplier(2)->Range(256, 8 << 10);
6178

0 commit comments

Comments
 (0)