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

Function padBorders

src/backend/cpu/kernel/pad_array_borders.hpp:41–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39
40template<typename T>
41void padBorders(Param<T> out, CParam<T> in, const dim4 lBoundPadSize,
42 const dim4 uBoundPadSize, const af::borderType btype) {
43 const dim4& oDims = out.dims();
44 const dim4& oStrs = out.strides();
45 const dim4& iDims = in.dims();
46 const dim4& iStrs = in.strides();
47
48 T const* const src = in.get();
49 T* dst = out.get();
50
51 const dim4 validRegEnds(
52 oDims[0] - uBoundPadSize[0], oDims[1] - uBoundPadSize[1],
53 oDims[2] - uBoundPadSize[2], oDims[3] - uBoundPadSize[3]);
54 const bool isInputLinear = iStrs[0] == 1;
55
56 /*
57 * VALID REGION COPYING DOES
58 * NOT NEED ANY BOUND CHECKS
59 * */
60 for (dim_t l = lBoundPadSize[3]; l < validRegEnds[3]; ++l) {
61 dim_t oLOff = oStrs[3] * l;
62 dim_t iLOff = iStrs[3] * (l - lBoundPadSize[3]);
63
64 for (dim_t k = lBoundPadSize[2]; k < validRegEnds[2]; ++k) {
65 dim_t oKOff = oStrs[2] * k;
66 dim_t iKOff = iStrs[2] * (k - lBoundPadSize[2]);
67
68 for (dim_t j = lBoundPadSize[1]; j < validRegEnds[1]; ++j) {
69 dim_t oJOff = oStrs[1] * j;
70 dim_t iJOff = iStrs[1] * (j - lBoundPadSize[1]);
71
72 if (isInputLinear) {
73 T const* const sptr = src + iLOff + iKOff + iJOff;
74 T* dptr = dst + oLOff + oKOff + oJOff + lBoundPadSize[0];
75
76 std::copy(sptr, sptr + iDims[0], dptr);
77 } else {
78 for (dim_t i = lBoundPadSize[0]; i < validRegEnds[0]; ++i) {
79 dim_t oIOff = oStrs[0] * i;
80 dim_t iIOff = iStrs[0] * (i - lBoundPadSize[0]);
81
82 dst[oLOff + oKOff + oJOff + oIOff] =
83 src[iLOff + iKOff + iJOff + iIOff];
84 }
85 }
86 } // second dimension loop
87 } // third dimension loop
88 } // fourth dimension loop
89
90 // If we have to do zero padding,
91 // just return as the output is filled with
92 // zeros during allocation
93 if (btype == AF_PAD_ZERO) return;
94
95 /*
96 * PADDED REGIONS NEED BOUND
97 * CHECKS; FOLLOWING NESTED
98 * LOOPS SHALL ONLY PROCESS

Callers

nothing calls this directly

Calls 5

idxByndEdgeFunction · 0.85
copyFunction · 0.70
dimsMethod · 0.45
stridesMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected