dnn(ocl): don't use getUMat() for long live objects
authorAlexander Alekhin <alexander.alekhin@intel.com>
Fri, 20 Jul 2018 14:26:35 +0000 (17:26 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Fri, 20 Jul 2018 14:53:55 +0000 (17:53 +0300)
modules/dnn/src/layers/convolution_layer.cpp
modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp

index 0f3c99c..23f99e7 100644 (file)
@@ -866,6 +866,16 @@ public:
         for (int i = 0; i < inputs.size(); ++i)
             CV_Assert(inputs[i].u != outputs[0].u);
 
+        if (umat_blobs.empty())
+        {
+            size_t n = blobs.size();
+            umat_blobs.resize(n);
+            for (size_t i = 0; i < n; i++)
+            {
+                blobs[i].copyTo(umat_blobs[i]);
+            }
+        }
+
         if (convolutionOp.empty())
         {
             OCL4DNNConvConfig config;
@@ -1637,14 +1647,6 @@ public:
 Ptr<BaseConvolutionLayer> ConvolutionLayer::create(const LayerParams &params)
 {
     Ptr<ConvolutionLayerImpl> l(new ConvolutionLayerImpl(params));
-
-#ifdef HAVE_OPENCL
-    size_t n = params.blobs.size();
-    l->umat_blobs.resize(n);
-    for (int i = 0; i < n; i++)
-        l->umat_blobs[i] = params.blobs[i].getUMat(ACCESS_READ);
-#endif
-
     return l;
 }
 
index c889c7d..a3a0936 100644 (file)
@@ -563,10 +563,10 @@ bool OCL4DNNConvSpatial<Dtype>::Forward(const UMat& bottom,
     }
 
     if (use_half_ && bias_half.empty() && !bias.empty())
-        convertFp16((UMat&)bias, bias_half);
+        convertFp16(bias, bias_half);
 
     if (use_half_ && weights_half.empty())
-        convertFp16((UMat&)weight, weights_half);
+        convertFp16(weight, weights_half);
 
     prepareKernel(bottom, top, weight, (use_half_) ? bias_half : bias, numImages);
     if (bestKernelConfig.empty())