MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / convolve2

Function convolve2

src/backend/oneapi/convolve_separable.cpp:23–56  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21
22template<typename T, typename accT>
23Array<T> convolve2(Array<T> const& signal, Array<accT> const& c_filter,
24 Array<accT> const& r_filter, const bool expand) {
25 const auto cflen = c_filter.elements();
26 const auto rflen = r_filter.elements();
27
28 if ((cflen > kernel::MAX_SCONV_FILTER_LEN) ||
29 (rflen > kernel::MAX_SCONV_FILTER_LEN)) {
30 // TODO call upon fft
31 char errMessage[256];
32 snprintf(errMessage, sizeof(errMessage),
33 "\noneAPI Separable convolution doesn't support %llu(coloumn) "
34 "%llu(row) filters\n",
35 cflen, rflen);
36 ONEAPI_NOT_SUPPORTED(errMessage);
37 }
38
39 const dim4& sDims = signal.dims();
40 dim4 tDims = sDims;
41 dim4 oDims = sDims;
42
43 if (expand) {
44 tDims[0] += cflen - 1;
45 oDims[0] += cflen - 1;
46 oDims[1] += rflen - 1;
47 }
48
49 Array<T> temp = createEmptyArray<T>(tDims);
50 Array<T> out = createEmptyArray<T>(oDims);
51
52 kernel::convSep<T, accT>(temp, signal, c_filter, 0, expand);
53 kernel::convSep<T, accT>(out, temp, r_filter, 1, expand);
54
55 return out;
56}
57
58#define INSTANTIATE(T, accT) \
59 template Array<T> convolve2<T, accT>(Array<T> const&, Array<accT> const&, \

Callers

nothing calls this directly

Calls 2

elementsMethod · 0.45
dimsMethod · 0.45

Tested by

no test coverage detected