Skip to content

Commit

Permalink
Dynamic Dispatching for split3
Browse files Browse the repository at this point in the history
  • Loading branch information
Aleksei Trutnev committed Jan 25, 2022
1 parent 266835c commit 5e89b9a
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 16 deletions.
24 changes: 8 additions & 16 deletions modules/gapi/src/backends/fluid/gfluidcore.cpp
Expand Up @@ -2509,26 +2509,18 @@ GAPI_FLUID_KERNEL(GFluidSplit3, cv::gapi::core::GSplit3, false)

static void run(const View &src, Buffer &dst1, Buffer &dst2, Buffer &dst3)
{
const auto *in = src.InLine<uchar>(0);
auto *out1 = dst1.OutLine<uchar>();
auto *out2 = dst2.OutLine<uchar>();
auto *out3 = dst3.OutLine<uchar>();
const auto *in = src.InLine<uchar>(0);
auto *out1 = dst1.OutLine<uchar>();
auto *out2 = dst2.OutLine<uchar>();
auto *out3 = dst3.OutLine<uchar>();

GAPI_Assert(3 == src.meta().chan);
int width = src.length();
int w = 0;

int w = 0; // cycle counter

#if CV_SIMD128
for (; w <= width-16; w+=16)
{
v_uint8x16 a, b, c;
v_load_deinterleave(&in[3*w], a, b, c);
v_store(&out1[w], a);
v_store(&out2[w], b);
v_store(&out3[w], c);
}
#endif
#if CV_SIMD
w = split3_simd(in, out1, out2, out3, width);
#endif

for (; w < width; w++)
{
Expand Down
7 changes: 7 additions & 0 deletions modules/gapi/src/backends/fluid/gfluidcore_func.dispatch.cpp
Expand Up @@ -207,6 +207,13 @@ ABSDIFFC_SIMD(float)

#undef ABSDIFFC_SIMD

int split3_simd(const uchar in[], uchar out1[], uchar out2[],
uchar out3[], const int width)
{
CV_CPU_DISPATCH(split3_simd, (in, out1, out2, out3, width),
CV_CPU_DISPATCH_MODES_ALL);
}

} // namespace fluid
} // namespace gapi
} // namespace cv
Expand Down
3 changes: 3 additions & 0 deletions modules/gapi/src/backends/fluid/gfluidcore_func.hpp
Expand Up @@ -163,6 +163,9 @@ ABSDIFFC_SIMD(float)

#undef ABSDIFFC_SIMD

int split3_simd(const uchar in[], uchar out1[], uchar out2[],
uchar out3[], const int width);

} // namespace fluid
} // namespace gapi
} // namespace cv
Expand Down
25 changes: 25 additions & 0 deletions modules/gapi/src/backends/fluid/gfluidcore_func.simd.hpp
Expand Up @@ -184,6 +184,9 @@ ABSDIFFC_SIMD(float)

#undef ABSDIFFC_SIMD

int split3_simd(const uchar in[], uchar out1[], uchar out2[],
uchar out3[], const int width);

#ifndef CV_CPU_OPTIMIZATION_DECLARATIONS_ONLY

struct scale_tag {};
Expand Down Expand Up @@ -1568,6 +1571,28 @@ ABSDIFFC_SIMD(float)

#undef ABSDIFFC_SIMD

//-------------------------
//
// Fluid kernels: Split3
//
//-------------------------

int split3_simd(const uchar in[], uchar out1[], uchar out2[],
uchar out3[], const int width)
{
constexpr int nlanes = v_uint8::nlanes;
int x = 0;
for (; x <= width - nlanes; x += nlanes)
{
v_uint8 a, b, c;
v_load_deinterleave(&in[3 * x], a, b, c);
vx_store(&out1[x], a);
vx_store(&out2[x], b);
vx_store(&out3[x], c);
}
return x;
}

#endif // CV_CPU_OPTIMIZATION_DECLARATIONS_ONLY

CV_CPU_OPTIMIZATION_NAMESPACE_END
Expand Down

0 comments on commit 5e89b9a

Please sign in to comment.