Skip to content

Commit 07bec6b

Browse files
committed
reshape layer ocl implementation
Signed-off-by: Li Peng <peng.li@intel.com>
1 parent 7b7033a commit 07bec6b

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

modules/dnn/src/layers/reshape_layer.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,40 @@ class ReshapeLayerImpl : public ReshapeLayer
182182
return true;
183183
}
184184

185+
bool forward_ocl(InputArrayOfArrays inps, OutputArrayOfArrays outs, OutputArrayOfArrays internals)
186+
{
187+
std::vector<UMat> inputs;
188+
std::vector<UMat> outputs;
189+
190+
inps.getUMatVector(inputs);
191+
outs.getUMatVector(outputs);
192+
193+
for (size_t i = 0; i < inputs.size(); i++)
194+
{
195+
UMat srcBlob = inputs[i];
196+
void *src_handle = inputs[i].handle(ACCESS_READ);
197+
void *dst_handle = outputs[i].handle(ACCESS_WRITE);
198+
if (src_handle != dst_handle)
199+
{
200+
MatShape outShape = shape(outputs[i]);
201+
UMat umat = srcBlob.reshape(1, (int)outShape.size(), &outShape[0]);
202+
umat.copyTo(outputs[i]);
203+
}
204+
}
205+
outs.assign(outputs);
206+
207+
return true;
208+
}
209+
185210
void forward(InputArrayOfArrays inputs_arr, OutputArrayOfArrays outputs_arr, OutputArrayOfArrays internals_arr)
186211
{
187212
CV_TRACE_FUNCTION();
188213
CV_TRACE_ARG_VALUE(name, "name", name.c_str());
189214

215+
CV_OCL_RUN((preferableTarget == DNN_TARGET_OPENCL) &&
216+
OCL_PERFORMANCE_CHECK(ocl::Device::getDefault().isIntel()),
217+
forward_ocl(inputs_arr, outputs_arr, internals_arr))
218+
190219
Layer::forward_fallback(inputs_arr, outputs_arr, internals_arr);
191220
}
192221

0 commit comments

Comments
 (0)