| /******************************************************************************* |
| * Copyright 2016 Intel Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| * \file mkl_cppwrapper.h |
| * \brief |
| * \author lingyan.guo@intel.com |
| * zhenlin.luo@intel.com |
| * |
| *******************************************************************************/ |
| #ifndef MXNET_OPERATOR_MKL_MKL_CPPWRAPPER_H_ |
| #define MXNET_OPERATOR_MKL_MKL_CPPWRAPPER_H_ |
| |
| |
| #include <stdarg.h> |
| #include <stddef.h> |
| #if MXNET_USE_MKL2017 == 1 |
| #include "mkl_dnn_types.h" |
| #include "mkl_dnn.h" |
| #include "mkl_version.h" |
| |
| |
| extern int getMKLBuildDate(); |
| extern bool enableMKLWarnGenerated(); |
| |
| |
| template <typename Dtype> inline dnnError_t dnnLayoutCreate( |
| dnnLayout_t *pLayout, size_t dimension, const size_t size[], const size_t strides[]); |
| template <> inline dnnError_t dnnLayoutCreate<float>( |
| dnnLayout_t *pLayout, size_t dimension, const size_t size[], const size_t strides[]) { |
| return dnnLayoutCreate_F32(pLayout, dimension, size, strides); |
| } |
| template <> inline dnnError_t dnnLayoutCreate<double>( |
| dnnLayout_t *pLayout, size_t dimension, const size_t size[], const size_t strides[]) { |
| return dnnLayoutCreate_F64(pLayout, dimension, size, strides); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnLayoutCreateFromPrimitive( |
| dnnLayout_t *pLayout, const dnnPrimitive_t primitive, dnnResourceType_t type); |
| template <> inline dnnError_t dnnLayoutCreateFromPrimitive<float>( |
| dnnLayout_t *pLayout, const dnnPrimitive_t primitive, dnnResourceType_t type) { |
| return dnnLayoutCreateFromPrimitive_F32(pLayout, primitive, type); |
| } |
| template <> inline dnnError_t dnnLayoutCreateFromPrimitive<double>( |
| dnnLayout_t *pLayout, const dnnPrimitive_t primitive, dnnResourceType_t type) { |
| return dnnLayoutCreateFromPrimitive_F64(pLayout, primitive, type); |
| } |
| |
| template <typename Dtype> inline size_t dnnLayoutGetMemorySize( |
| const dnnLayout_t layout); |
| template <> inline size_t dnnLayoutGetMemorySize<float>( |
| const dnnLayout_t layout) { |
| return dnnLayoutGetMemorySize_F32(layout); |
| } |
| template <> inline size_t dnnLayoutGetMemorySize<double>( |
| const dnnLayout_t layout) { |
| return dnnLayoutGetMemorySize_F64(layout); |
| } |
| |
| template <typename Dtype> inline int dnnLayoutCompare( |
| const dnnLayout_t l1, const dnnLayout_t l2); |
| template <> inline int dnnLayoutCompare<float>( |
| const dnnLayout_t l1, const dnnLayout_t l2) { |
| return dnnLayoutCompare_F32(l1, l2); |
| } |
| template <> inline int dnnLayoutCompare<double>( |
| const dnnLayout_t l1, const dnnLayout_t l2) { |
| return dnnLayoutCompare_F64(l1, l2); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnAllocateBuffer( |
| void **pPtr, dnnLayout_t layout); |
| template <> inline dnnError_t dnnAllocateBuffer<float>( |
| void **pPtr, dnnLayout_t layout) { |
| return dnnAllocateBuffer_F32(pPtr, layout); |
| } |
| template <> inline dnnError_t dnnAllocateBuffer<double>( |
| void **pPtr, dnnLayout_t layout) { |
| return dnnAllocateBuffer_F64(pPtr, layout); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnReleaseBuffer( |
| void *ptr); |
| template <> inline dnnError_t dnnReleaseBuffer<float>( |
| void *ptr) { |
| return dnnReleaseBuffer_F32(ptr); |
| } |
| template <> inline dnnError_t dnnReleaseBuffer<double>( |
| void *ptr) { |
| return dnnReleaseBuffer_F64(ptr); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnLayoutDelete( |
| dnnLayout_t layout); |
| template <> inline dnnError_t dnnLayoutDelete<float>( |
| dnnLayout_t layout) { |
| return dnnLayoutDelete_F32(layout); |
| } |
| template <> inline dnnError_t dnnLayoutDelete<double>( |
| dnnLayout_t layout) { |
| return dnnLayoutDelete_F64(layout); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnPrimitiveAttributesCreate( |
| dnnPrimitiveAttributes_t *attributes); |
| template <> inline dnnError_t dnnPrimitiveAttributesCreate<float>( |
| dnnPrimitiveAttributes_t *attributes) { |
| return dnnPrimitiveAttributesCreate_F32(attributes); |
| } |
| template <> inline dnnError_t dnnPrimitiveAttributesCreate<double>( |
| dnnPrimitiveAttributes_t *attributes) { |
| return dnnPrimitiveAttributesCreate_F64(attributes); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnPrimitiveAttributesDestroy( |
| dnnPrimitiveAttributes_t attributes); |
| template <> inline dnnError_t dnnPrimitiveAttributesDestroy<float>( |
| dnnPrimitiveAttributes_t attributes) { |
| return dnnPrimitiveAttributesDestroy_F32(attributes); |
| } |
| template <> inline dnnError_t dnnPrimitiveAttributesDestroy<double>( |
| dnnPrimitiveAttributes_t attributes) { |
| return dnnPrimitiveAttributesDestroy_F64(attributes); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnPrimitiveGetAttributes( |
| dnnPrimitive_t primitive, |
| dnnPrimitiveAttributes_t *attributes); |
| template <> inline dnnError_t dnnPrimitiveGetAttributes<float>( |
| dnnPrimitive_t primitive, |
| dnnPrimitiveAttributes_t *attributes) { |
| return dnnPrimitiveGetAttributes_F32(primitive, attributes); |
| } |
| template <> inline dnnError_t dnnPrimitiveGetAttributes<double>( |
| dnnPrimitive_t primitive, |
| dnnPrimitiveAttributes_t *attributes) { |
| return dnnPrimitiveGetAttributes_F64(primitive, attributes); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnExecute( |
| dnnPrimitive_t primitive, void *resources[]); |
| template <> inline dnnError_t dnnExecute<float>( |
| dnnPrimitive_t primitive, void *resources[]) { |
| return dnnExecute_F32(primitive, resources); |
| } |
| template <> inline dnnError_t dnnExecute<double>( |
| dnnPrimitive_t primitive, void *resources[]) { |
| return dnnExecute_F64(primitive, resources); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnExecuteAsync( |
| dnnPrimitive_t primitive, void *resources[]); |
| template <> inline dnnError_t dnnExecuteAsync<float>( |
| dnnPrimitive_t primitive, void *resources[]) { |
| return dnnExecuteAsync_F32(primitive, resources); |
| } |
| template <> inline dnnError_t dnnExecuteAsync<double>( |
| dnnPrimitive_t primitive, void *resources[]) { |
| return dnnExecuteAsync_F64(primitive, resources); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnWaitFor( |
| dnnPrimitive_t primitive); |
| template <> inline dnnError_t dnnWaitFor<float>( |
| dnnPrimitive_t primitive) { |
| return dnnWaitFor_F32(primitive); |
| } |
| template <> inline dnnError_t dnnWaitFor<double>( |
| dnnPrimitive_t primitive) { |
| return dnnWaitFor_F64(primitive); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnDelete( |
| dnnPrimitive_t primitive); |
| template <> inline dnnError_t dnnDelete<float>( |
| dnnPrimitive_t primitive) { |
| return dnnDelete_F32(primitive); |
| } |
| template <> inline dnnError_t dnnDelete<double>( |
| dnnPrimitive_t primitive) { |
| return dnnDelete_F64(primitive); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnConversionCreate( |
| dnnPrimitive_t* pConversion, const dnnLayout_t from, const dnnLayout_t to); |
| template <> inline dnnError_t dnnConversionCreate<float>( |
| dnnPrimitive_t* pConversion, const dnnLayout_t from, const dnnLayout_t to) { |
| return dnnConversionCreate_F32(pConversion, from, to); |
| } |
| template <> inline dnnError_t dnnConversionCreate<double>( |
| dnnPrimitive_t* pConversion, const dnnLayout_t from, const dnnLayout_t to) { |
| return dnnConversionCreate_F64(pConversion, from, to); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnConversionExecute( |
| dnnPrimitive_t conversion, void *from, void *to); |
| template <> inline dnnError_t dnnConversionExecute<float>( |
| dnnPrimitive_t conversion, void *from, void *to) { |
| return dnnConversionExecute_F32(conversion, from, to); |
| } |
| template <> inline dnnError_t dnnConversionExecute<double>( |
| dnnPrimitive_t conversion, void *from, void *to) { |
| return dnnConversionExecute_F64(conversion, from, to); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnConvolutionCreateForward( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnConvolutionCreateForward<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateForward_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <> inline dnnError_t dnnConvolutionCreateForward<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateForward_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnConvolutionCreateForwardBias( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnConvolutionCreateForwardBias<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateForwardBias_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnConvolutionCreateForwardBias<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateForwardBias_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnConvolutionCreateBackwardData( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnConvolutionCreateBackwardData<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateBackwardData_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnConvolutionCreateBackwardData<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateBackwardData_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnConvolutionCreateBackwardFilter( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnConvolutionCreateBackwardFilter<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateBackwardFilter_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnConvolutionCreateBackwardFilter<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t srcSize[], const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnConvolutionCreateBackwardFilter_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnConvolutionCreateBackwardBias( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t dstSize[]); |
| template <> inline dnnError_t dnnConvolutionCreateBackwardBias<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t dstSize[]) { |
| return dnnConvolutionCreateBackwardBias_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, dstSize); |
| } |
| template <> inline dnnError_t dnnConvolutionCreateBackwardBias<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t dimension, const size_t dstSize[]) { |
| return dnnConvolutionCreateBackwardBias_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| dimension, dstSize); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnGroupsConvolutionCreateForward( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnGroupsConvolutionCreateForward<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateForward_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnGroupsConvolutionCreateForward<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateForward_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnGroupsConvolutionCreateForwardBias( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnGroupsConvolutionCreateForwardBias<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateForwardBias_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnGroupsConvolutionCreateForwardBias<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateForwardBias_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnGroupsConvolutionCreateBackwardData( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardData<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateBackwardData_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardData<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateBackwardData_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnGroupsConvolutionCreateBackwardFilter( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardFilter<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateBackwardFilter_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardFilter<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t srcSize[], |
| const size_t dstSize[], const size_t filterSize[], |
| const size_t convolutionStrides[], const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnGroupsConvolutionCreateBackwardFilter_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, srcSize, dstSize, filterSize, |
| convolutionStrides, inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnGroupsConvolutionCreateBackwardBias( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t dstSize[]); |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardBias<float>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t dstSize[]) { |
| return dnnGroupsConvolutionCreateBackwardBias_F32( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, dstSize); |
| } |
| template <> inline dnnError_t dnnGroupsConvolutionCreateBackwardBias<double>( |
| dnnPrimitive_t* pConvolution, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t algorithm, |
| size_t groups, size_t dimension, const size_t dstSize[]) { |
| return dnnGroupsConvolutionCreateBackwardBias_F64( |
| pConvolution, |
| attributes, |
| algorithm, |
| groups, dimension, dstSize); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnReLUCreateForward( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float negativeSlope); |
| template <> inline dnnError_t dnnReLUCreateForward<float>( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float negativeSlope) { |
| return dnnReLUCreateForward_F32( |
| pRelu, |
| attributes, |
| dataLayout, negativeSlope); |
| } |
| template <> inline dnnError_t dnnReLUCreateForward<double>( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float negativeSlope) { |
| return dnnReLUCreateForward_F64( |
| pRelu, |
| attributes, |
| dataLayout, negativeSlope); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnReLUCreateBackward( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, float negativeSlope); |
| template <> inline dnnError_t dnnReLUCreateBackward<float>( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, float negativeSlope) { |
| return dnnReLUCreateBackward_F32( |
| pRelu, |
| attributes, |
| diffLayout, dataLayout, negativeSlope); |
| } |
| template <> inline dnnError_t dnnReLUCreateBackward<double>( |
| dnnPrimitive_t* pRelu, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, float negativeSlope) { |
| return dnnReLUCreateBackward_F64( |
| pRelu, |
| attributes, |
| diffLayout, dataLayout, negativeSlope); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnLRNCreateForward( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, size_t kernel_size, float alpha, float beta, float k); |
| template <> inline dnnError_t dnnLRNCreateForward<float>( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, size_t kernel_size, float alpha, float beta, float k) { |
| return dnnLRNCreateForward_F32( |
| pLrn, |
| attributes, |
| dataLayout, kernel_size, alpha, beta, k); |
| } |
| template <> inline dnnError_t dnnLRNCreateForward<double>( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, size_t kernel_size, float alpha, float beta, float k) { |
| return dnnLRNCreateForward_F64( |
| pLrn, |
| attributes, |
| dataLayout, kernel_size, alpha, beta, k); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnLRNCreateBackward( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, |
| size_t kernel_size, float alpha, float beta, float k); |
| template <> inline dnnError_t dnnLRNCreateBackward<float>( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, |
| size_t kernel_size, float alpha, float beta, float k) { |
| return dnnLRNCreateBackward_F32( |
| pLrn, |
| attributes, |
| diffLayout, dataLayout, kernel_size, alpha, beta, k); |
| } |
| template <> inline dnnError_t dnnLRNCreateBackward<double>( |
| dnnPrimitive_t* pLrn, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t diffLayout, const dnnLayout_t dataLayout, |
| size_t kernel_size, float alpha, float beta, float k) { |
| return dnnLRNCreateBackward_F64( |
| pLrn, |
| attributes, |
| diffLayout, dataLayout, kernel_size, alpha, beta, k); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnPoolingCreateForward( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnPoolingCreateForward<float>( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnPoolingCreateForward_F32( |
| pPooling, |
| attributes, |
| op, |
| srcLayout, |
| kernelSize, kernelStride, |
| inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnPoolingCreateForward<double>( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnPoolingCreateForward_F64( |
| pPooling, |
| attributes, |
| op, |
| srcLayout, |
| kernelSize, kernelStride, |
| inputOffset, border_type); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnPoolingCreateBackward( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type); |
| template <> inline dnnError_t dnnPoolingCreateBackward<float>( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnPoolingCreateBackward_F32( |
| pPooling, |
| attributes, |
| op, |
| srcLayout, |
| kernelSize, kernelStride, |
| inputOffset, border_type); |
| } |
| template <> inline dnnError_t dnnPoolingCreateBackward<double>( |
| dnnPrimitive_t* pPooling, |
| dnnPrimitiveAttributes_t attributes, |
| dnnAlgorithm_t op, |
| const dnnLayout_t srcLayout, |
| const size_t kernelSize[], const size_t kernelStride[], |
| const int inputOffset[], const dnnBorder_t border_type) { |
| return dnnPoolingCreateBackward_F64( |
| pPooling, |
| attributes, |
| op, |
| srcLayout, |
| kernelSize, kernelStride, |
| inputOffset, border_type); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnConcatCreate( |
| dnnPrimitive_t *pConcat, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src[]); |
| template <> inline dnnError_t dnnConcatCreate<float>( |
| dnnPrimitive_t *pConcat, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src[]) { |
| return dnnConcatCreate_F32( |
| pConcat, |
| attributes, |
| N, |
| src); |
| } |
| template <> inline dnnError_t dnnConcatCreate<double>( |
| dnnPrimitive_t *pConcat, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src[]) { |
| return dnnConcatCreate_F64( |
| pConcat, |
| attributes, |
| N, |
| src); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnSplitCreate( |
| dnnPrimitive_t *pSplit, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src, |
| size_t dst[]); |
| template <> inline dnnError_t dnnSplitCreate<float>( |
| dnnPrimitive_t *pSplit, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src, |
| size_t dst[]) { |
| return dnnSplitCreate_F32( |
| pSplit, |
| attributes, |
| N, |
| src, |
| dst); |
| } |
| template <> inline dnnError_t dnnSplitCreate<double>( |
| dnnPrimitive_t *pSplit, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t N, |
| dnnLayout_t src, |
| size_t dst[]) { |
| return dnnSplitCreate_F64( |
| pSplit, |
| attributes, |
| N, |
| src, |
| dst); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnSumCreate( |
| dnnPrimitive_t *pSum, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t nSummands, dnnLayout_t layout, Dtype *coefficients); |
| template <> inline dnnError_t dnnSumCreate<float>( |
| dnnPrimitive_t *pSum, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t nSummands, dnnLayout_t layout, float *coefficients) { |
| return dnnSumCreate_F32( |
| pSum, |
| attributes, |
| nSummands, |
| layout, coefficients); |
| } |
| template <> inline dnnError_t dnnSumCreate<double>( |
| dnnPrimitive_t *pSum, |
| dnnPrimitiveAttributes_t attributes, |
| const size_t nSummands, dnnLayout_t layout, double *coefficients) { |
| return dnnSumCreate_F64( |
| pSum, |
| attributes, |
| nSummands, |
| layout, coefficients); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnBatchNormalizationCreateForward_v2( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags); |
| |
| template <> inline dnnError_t dnnBatchNormalizationCreateForward_v2<float>( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags) { |
| return dnnBatchNormalizationCreateForward_v2_F32( |
| pBatchNormalization, |
| attributes, |
| dataLayout, eps, flags); |
| } |
| template <> inline dnnError_t dnnBatchNormalizationCreateForward_v2<double>( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags) { |
| return dnnBatchNormalizationCreateForward_v2_F64( |
| pBatchNormalization, |
| attributes, |
| dataLayout, eps, flags); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnBatchNormalizationCreateBackward_v2( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags); |
| |
| template <> inline dnnError_t dnnBatchNormalizationCreateBackward_v2<float>( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags) { |
| return dnnBatchNormalizationCreateBackward_v2_F32( |
| pBatchNormalization, |
| attributes, |
| dataLayout, eps, flags); |
| } |
| |
| template <> inline dnnError_t dnnBatchNormalizationCreateBackward_v2<double>( |
| dnnPrimitive_t* pBatchNormalization, |
| dnnPrimitiveAttributes_t attributes, |
| const dnnLayout_t dataLayout, float eps, |
| int flags) { |
| return dnnBatchNormalizationCreateBackward_v2_F64( |
| pBatchNormalization, |
| attributes, |
| dataLayout, eps, flags); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnInnerProductCreateForward( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels); |
| template <> inline dnnError_t dnnInnerProductCreateForward<float>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateForward_F32(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| template <> inline dnnError_t dnnInnerProductCreateForward<double>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateForward_F64(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| |
| template <typename Dtype> inline dnnError_t dnnInnerProductCreateForwardBias( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels); |
| |
| template <> inline dnnError_t dnnInnerProductCreateForwardBias<float>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateForwardBias_F32(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| template <> inline dnnError_t dnnInnerProductCreateForwardBias<double>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateForwardBias_F64(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| |
| |
| template <typename Dtype> inline dnnError_t dnnInnerProductCreateBackwardData( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels); |
| |
| template <> inline dnnError_t dnnInnerProductCreateBackwardData<float>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateBackwardData_F32(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| template <> inline dnnError_t dnnInnerProductCreateBackwardData<double>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateBackwardData_F64(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| |
| |
| |
| |
| template <typename Dtype> inline dnnError_t dnnInnerProductCreateBackwardFilter( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels); |
| |
| template <> inline dnnError_t dnnInnerProductCreateBackwardFilter<float>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateBackwardFilter_F32(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| template <> inline dnnError_t dnnInnerProductCreateBackwardFilter<double>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t srcSize[], |
| size_t outputChannels) { |
| return dnnInnerProductCreateBackwardFilter_F64(pInnerProduct, |
| attributes, dimensions, |
| srcSize, outputChannels); |
| } |
| |
| |
| |
| template <typename Dtype> inline dnnError_t dnnInnerProductCreateBackwardBias( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t dstSize[]); |
| |
| template <> inline dnnError_t dnnInnerProductCreateBackwardBias<float>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t dstSize[]) { |
| return dnnInnerProductCreateBackwardBias_F32(pInnerProduct, |
| attributes, dimensions, |
| dstSize); |
| } |
| template <> inline dnnError_t dnnInnerProductCreateBackwardBias<double>( |
| dnnPrimitive_t *pInnerProduct, |
| dnnPrimitiveAttributes_t attributes, |
| size_t dimensions, |
| const size_t dstSize[]) { |
| return dnnInnerProductCreateBackwardBias_F64(pInnerProduct, |
| attributes, dimensions, |
| dstSize); |
| } |
| #endif // #MXNET_USE_MKL2017 == 1 |
| #endif // MXNET_OPERATOR_MKL_MKL_CPPWRAPPER_H_ |