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

Function convolve_1d

src/backend/cuda/kernel/convolve.hpp:101–144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

99
100template<typename T, typename aT>
101void convolve_1d(conv_kparam_t& p, Param<T> out, CParam<T> sig, CParam<aT> filt,
102 const bool expand) {
103 auto convolve1 = common::getKernel(
104 "arrayfire::cuda::convolve1", {{convolve1_cuh_src}},
105 TemplateArgs(TemplateTypename<T>(), TemplateTypename<aT>(),
106 TemplateArg(expand)),
107 {{DefineValue(MAX_CONV1_FILTER_LEN), DefineValue(CONV_THREADS)}});
108
109 prepareKernelArgs<T>(p, out.dims, filt.dims, 1);
110
111 size_t filterSize = filt.dims[0] * sizeof(aT);
112
113 for (int b3 = 0; b3 < filt.dims[3]; ++b3) {
114 int f3Off = b3 * filt.strides[3];
115
116 for (int b2 = 0; b2 < filt.dims[2]; ++b2) {
117 int f2Off = b2 * filt.strides[2];
118
119 for (int b1 = 0; b1 < filt.dims[1]; ++b1) {
120 int f1Off = b1 * filt.strides[1];
121 const aT* fptr = filt.ptr + (f1Off + f2Off + f3Off);
122
123 // FIXME: case where filter array is strided
124 auto constMemPtr = convolve1.getDevPtr(conv_c_name);
125 convolve1.copyToReadOnly(constMemPtr,
126 reinterpret_cast<CUdeviceptr>(fptr),
127 filterSize);
128
129 p.o[0] = (p.outHasNoOffset ? 0 : b1);
130 p.o[1] = (p.outHasNoOffset ? 0 : b2);
131 p.o[2] = (p.outHasNoOffset ? 0 : b3);
132 p.s[0] = (p.inHasNoOffset ? 0 : b1);
133 p.s[1] = (p.inHasNoOffset ? 0 : b2);
134 p.s[2] = (p.inHasNoOffset ? 0 : b3);
135
136 EnqueueArgs qArgs(p.mBlocks, p.mThreads, getActiveStream(),
137 p.mSharedSize);
138 convolve1(qArgs, out, sig, filt.dims[0], p.mBlk_x, p.mBlk_y,
139 p.o[0], p.o[1], p.o[2], p.s[0], p.s[1], p.s[2]);
140 POST_LAUNCH_CHECK();
141 }
142 }
143 }
144}
145
146template<typename T, typename aT>
147void conv2Helper(const conv_kparam_t& p, Param<T> out, CParam<T> sig,

Callers

nothing calls this directly

Calls 7

TemplateArgsFunction · 0.85
TemplateArgClass · 0.85
getActiveStreamFunction · 0.85
convolve1Function · 0.85
getKernelFunction · 0.50
getDevPtrMethod · 0.45
copyToReadOnlyMethod · 0.45

Tested by

no test coverage detected