Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / kernel_selector / core / actual_kernels / deconvolution / deconvolution_kernel_ref.cpp
1 /*
2 // Copyright (c) 2016 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16
17 #include "deconvolution_kernel_ref.h"
18
19 namespace kernel_selector 
20 {
21
22     ParamsKey DeconvolutionKernelRef::GetSupportedKey() const
23     {
24         ParamsKey k;
25         k.EnableInputDataType(Datatype::F16);
26         k.EnableInputDataType(Datatype::F32);
27         k.EnableInputWeightsType(WeightsType::F16);
28         k.EnableInputWeightsType(WeightsType::F32);
29         k.EnableOutputDataType(Datatype::F16);
30         k.EnableOutputDataType(Datatype::F32);
31         k.EnableInputLayout(DataLayout::yxfb);
32         k.EnableInputLayout(DataLayout::bfyx);
33         k.EnableInputLayout(DataLayout::byxf);
34         k.EnableOutputLayout(DataLayout::yxfb);
35         k.EnableOutputLayout(DataLayout::bfyx);
36         k.EnableOutputLayout(DataLayout::byxf);
37         k.EnableTensorOffset();
38         k.EnableTensorPitches();
39         k.EnableBiasPerFeature();
40         k.EnableNonBiasTerm();
41         k.EnableBatching();
42         k.EnableSplitSupport();
43         k.EnableDepthwiseSeparableOpt();
44         k.EnableGradient();
45         k.EnableGroupedConvolution();
46         return k;
47     }
48
49     CommonDispatchData DeconvolutionKernelRef::SetDefault(const deconvolution_params& params) const
50     {
51         CommonDispatchData runInfo = DeconvolutionKernelBase::SetDefault(params);
52
53         if (params.output.Feature().v * params.output.Batch().v <= 16)
54         {
55             const auto& out = params.output;
56             runInfo.gws0 = Align(out.X().v, 32);
57             runInfo.gws1 = out.Y().v;
58             runInfo.gws2 = out.Feature().v * out.Batch().v;
59
60             runInfo.lws0 = 32;
61             runInfo.lws1 = 1;
62             runInfo.lws2 = 1;
63         }
64
65         return runInfo;
66     }
67
68     JitConstants DeconvolutionKernelRef::GetJitConstants(const deconvolution_params& params) const
69     {
70         auto jit = DeconvolutionKernelBase::GetJitConstants(params);
71
72         if (params.output.Feature().v * params.output.Batch().v <= 16)
73             jit.AddConstant(MakeJitConstant("DIM_ORDER_XYBF", 1));
74
75         return jit;
76     }
77 }