From 0d9b9b7321b3d81e8072827961c17f7669413e08 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 23 Oct 2018 00:56:09 +0800 Subject: [PATCH 01/31] update mkldnn and fix conv/deconv --- 3rdparty/mkldnn | 2 +- src/operator/nn/mkldnn/mkldnn_base-inl.h | 12 +++++ src/operator/nn/mkldnn/mkldnn_convolution.cc | 47 +++++++++++++++++-- .../nn/mkldnn/mkldnn_deconvolution.cc | 44 +++++++++++++++-- tests/cpp/operator/mkldnn.cc | 6 +-- 5 files changed, 101 insertions(+), 10 deletions(-) diff --git a/3rdparty/mkldnn b/3rdparty/mkldnn index 0e7ca738866d..51737f32ce3e 160000 --- a/3rdparty/mkldnn +++ b/3rdparty/mkldnn @@ -1 +1 @@ -Subproject commit 0e7ca738866d22cc700aa33b8de120b938f910d0 +Subproject commit 51737f32ce3ef7059fcccb257896489999f1a398 diff --git a/src/operator/nn/mkldnn/mkldnn_base-inl.h b/src/operator/nn/mkldnn/mkldnn_base-inl.h index 8a2f4a3e5011..d8651c83d0ce 100644 --- a/src/operator/nn/mkldnn/mkldnn_base-inl.h +++ b/src/operator/nn/mkldnn/mkldnn_base-inl.h @@ -208,6 +208,18 @@ static inline int get_mxnet_type(mkldnn_data_type_t dtype) { } } +static inline size_t GetMemDescSize(const mkldnn::memory::desc &md) { + if (md.data.ndims == 0) return 0; + + size_t ret = 1; + for (int i = 0; i < md.data.ndims; i++) { + ret *= md.data.dims[i]; + } + + ret *= mshadow::mshadow_sizeof(get_mxnet_type(md.data.data_type)); + return ret; +} + inline static mkldnn::memory::desc GetMemDesc(const NDArray &arr, int ndim) { mkldnn::memory::dims dims(ndim); for (size_t i = 0; i < dims.size(); i++) dims[i] = arr.shape()[i]; diff --git a/src/operator/nn/mkldnn/mkldnn_convolution.cc b/src/operator/nn/mkldnn/mkldnn_convolution.cc index 6a70ae40ac8f..e094c1a0ad32 100644 --- a/src/operator/nn/mkldnn/mkldnn_convolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_convolution.cc @@ -42,7 +42,7 @@ bool SupportMKLDNNConv(const ConvolutionParam& params, const NDArray &input) { return SupportMKLDNNQuantize(input.dtype()) && input.shape().ndim() == 4; } -mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( +mkldnn::convolution_forward::primitive_desc GetConvFwdImplAuto( const MKLDNNConvFullParam ¶m, const bool is_train, const NDArray &data, const NDArray &weights, const NDArray *bias, const NDArray &output) { @@ -115,7 +115,21 @@ mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( } } -static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( +mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( + const MKLDNNConvFullParam ¶m, const bool is_train, + const NDArray &data, const NDArray &weights, const NDArray *bias, + const NDArray &output) { + auto conv_pd = GetConvFwdImplAuto(param, is_train, data, weights, bias, output); + while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + + return conv_pd; +} + +static mkldnn::convolution_backward_data::primitive_desc GetConvBwdDataAuto( const ConvolutionParam& param, const NDArray &data, const NDArray &weights, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { auto data_md = GetMemDesc(data); @@ -146,7 +160,20 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( } } -static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( +static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( + const ConvolutionParam& param, const NDArray &data, const NDArray &weights, + const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { + auto conv_pd = GetConvBwdDataAuto(param, data, weights, output, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + + return conv_pd; +} + +static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeightsAuto( const ConvolutionParam& param, const NDArray &data, const NDArray &weights, const NDArray *bias, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { @@ -193,6 +220,20 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( } } +static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( + const ConvolutionParam& param, const NDArray &data, + const NDArray &weights, const NDArray *bias, const NDArray &output, + const mkldnn::convolution_forward::primitive_desc &fwd_pd) { + auto conv_pd = GetConvBwdWeightsAuto(param, data, weights, bias, output, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + + return conv_pd; +} + void MKLDNNConvForward::SetNewMem(const mkldnn::memory &data, const mkldnn::memory &weight, const mkldnn::memory *bias, diff --git a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc index 54d4f6708524..16d78087c9ad 100644 --- a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc @@ -47,7 +47,7 @@ static inline mkldnn::memory::desc GetBiasDesc(mkldnn::memory::desc md) { mkldnn::memory::format::any); } -static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( +static mkldnn::convolution_forward::primitive_desc GetDeconvBwdAuto( const mkldnn::memory::desc &data_md, const mkldnn::memory::desc &weights_md, bool has_bias, const mkldnn::memory::desc &out_md, const mkldnn::engine &engine, const mkldnn::memory::dims &strides, @@ -66,6 +66,23 @@ static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( } } +static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( + const mkldnn::memory::desc &data_md, const mkldnn::memory::desc &weights_md, + bool has_bias, const mkldnn::memory::desc &out_md, + const mkldnn::engine &engine, const mkldnn::memory::dims &strides, + const mkldnn::memory::dims &padding, const mkldnn::memory::dims &dilates) { + auto deconv_pd = GetDeconvBwdAuto(data_md, weights_md, has_bias, out_md, engine, strides, + padding, dilates); + + while (deconv_pd.dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weights_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + + return deconv_pd; +} + static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( const DeconvolutionParam& param, const NDArray &data, const NDArray &weights, bool has_bias, const NDArray &output) { @@ -90,7 +107,13 @@ static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( mkldnn::convolution_backward_data::desc desc(mkldnn::algorithm::convolution_direct, out_md, weight_md, data_md, strides, dilate, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_data::primitive_desc(desc, engine, bwd_pd); + auto deconv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, bwd_pd); + while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + return deconv_pd; } static mkldnn::convolution_forward::primitive_desc GetDeconvBwdDataImpl( @@ -117,7 +140,7 @@ static mkldnn::convolution_forward::primitive_desc GetDeconvBwdDataImpl( } static mkldnn::convolution_backward_weights::primitive_desc -GetDeconvBwdWeightsImpl( +GetDeconvBwdWeightsImplAuto( const DeconvolutionParam ¶m, const NDArray &data, const NDArray &weights, bool has_bias, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { @@ -150,6 +173,21 @@ GetDeconvBwdWeightsImpl( } } +static mkldnn::convolution_backward_weights::primitive_desc +GetDeconvBwdWeightsImpl( + const DeconvolutionParam ¶m, const NDArray &data, + const NDArray &weights, bool has_bias, const NDArray &output, + const mkldnn::convolution_forward::primitive_desc &fwd_pd) { + auto deconv_pd = GetDeconvBwdWeightsImplAuto(param, data, weights, has_bias, output, fwd_pd); + while (deconv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(data) || + deconv_pd.src_primitive_desc().get_size() != GetArraySize(output) || + deconv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + + return deconv_pd; +} + class MKLDNNDeconvForward { std::shared_ptr fwd; std::shared_ptr data; diff --git a/tests/cpp/operator/mkldnn.cc b/tests/cpp/operator/mkldnn.cc index 14578bec5610..9948b50aa510 100644 --- a/tests/cpp/operator/mkldnn.cc +++ b/tests/cpp/operator/mkldnn.cc @@ -90,9 +90,9 @@ TEST(MKLDNN_UTIL_FUNC, AlignMem) { TEST(MKLDNN_UTIL_FUNC, MemFormat) { // Check whether the number of format is correct. - CHECK_EQ(mkldnn_format_last, 67); - CHECK_EQ(mkldnn_nchw, 5); - CHECK_EQ(mkldnn_oihw, 15); + CHECK_EQ(mkldnn_format_last, 110); + CHECK_EQ(mkldnn_nchw, 7); + CHECK_EQ(mkldnn_oihw, 16); } // Init arrays with the default layout. From 501cccb74f0b2025f2c75dedcc91a75588db703e Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 24 Oct 2018 10:12:50 +0800 Subject: [PATCH 02/31] fix --- src/operator/nn/mkldnn/mkldnn_base.cc | 3 + src/operator/nn/mkldnn/mkldnn_convolution.cc | 127 ++++++++++-------- .../nn/mkldnn/mkldnn_deconvolution.cc | 74 +++++----- 3 files changed, 109 insertions(+), 95 deletions(-) diff --git a/src/operator/nn/mkldnn/mkldnn_base.cc b/src/operator/nn/mkldnn/mkldnn_base.cc index a60d6555c74d..5db51817db9d 100644 --- a/src/operator/nn/mkldnn/mkldnn_base.cc +++ b/src/operator/nn/mkldnn/mkldnn_base.cc @@ -311,9 +311,12 @@ mkldnn_memory_format_t GetDefaultFormat(const mkldnn::memory::desc &desc) { case mkldnn_oihw: case mkldnn_ihwo: case mkldnn_hwio: + case mkldnn_oIhw8i: + case mkldnn_oIhw16i: case mkldnn_OIhw8i8o: case mkldnn_OIhw16i16o: case mkldnn_OIhw4i16o4i: + case mkldnn_OIhw4i16o4i_s8s8: case mkldnn_OIhw8i16o2i: case mkldnn_OIhw8o16i2o: case mkldnn_OIhw8o8i: diff --git a/src/operator/nn/mkldnn/mkldnn_convolution.cc b/src/operator/nn/mkldnn/mkldnn_convolution.cc index e094c1a0ad32..86376df6c4d0 100644 --- a/src/operator/nn/mkldnn/mkldnn_convolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_convolution.cc @@ -42,7 +42,7 @@ bool SupportMKLDNNConv(const ConvolutionParam& params, const NDArray &input) { return SupportMKLDNNQuantize(input.dtype()) && input.shape().ndim() == 4; } -mkldnn::convolution_forward::primitive_desc GetConvFwdImplAuto( +mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( const MKLDNNConvFullParam ¶m, const bool is_train, const NDArray &data, const NDArray &weights, const NDArray *bias, const NDArray &output) { @@ -88,13 +88,25 @@ mkldnn::convolution_forward::primitive_desc GetConvFwdImplAuto( if (param.conv_param.dilate.ndim() == 0 && bias == nullptr) { mkldnn::convolution_forward::desc desc(prop, mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + auto conv_pd = mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else if (param.conv_param.dilate.ndim() == 0) { auto bias_md = GetMemDesc(*bias); mkldnn::convolution_forward::desc desc(prop, mkldnn::algorithm::convolution_direct, data_md, weight_md, bias_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + auto conv_pd = mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { mkldnn::memory::dims dilates{0, 0}; dilates[0] = param.conv_param.dilate[0] - 1; @@ -103,33 +115,31 @@ mkldnn::convolution_forward::primitive_desc GetConvFwdImplAuto( mkldnn::convolution_forward::desc desc(prop, mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + auto conv_pd = mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { auto bias_md = GetMemDesc(*bias); mkldnn::convolution_forward::desc desc(prop, mkldnn::algorithm::convolution_direct, data_md, weight_md, bias_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + auto conv_pd = mkldnn::convolution_forward::primitive_desc(desc, attr, engine); + while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } } } -mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( - const MKLDNNConvFullParam ¶m, const bool is_train, - const NDArray &data, const NDArray &weights, const NDArray *bias, - const NDArray &output) { - auto conv_pd = GetConvFwdImplAuto(param, is_train, data, weights, bias, output); - while (conv_pd.dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } - - return conv_pd; -} - -static mkldnn::convolution_backward_data::primitive_desc GetConvBwdDataAuto( +static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( const ConvolutionParam& param, const NDArray &data, const NDArray &weights, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { auto data_md = GetMemDesc(data); @@ -148,7 +158,13 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdDataAuto( if (param.dilate.ndim() == 0) { mkldnn::convolution_backward_data::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); + auto conv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { mkldnn::memory::dims dilates{0, 0}; dilates[0] = param.dilate[0] - 1; @@ -156,24 +172,17 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdDataAuto( mkldnn::convolution_backward_data::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); - } -} - -static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( - const ConvolutionParam& param, const NDArray &data, const NDArray &weights, - const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { - auto conv_pd = GetConvBwdDataAuto(param, data, weights, output, fwd_pd); - while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; + auto conv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } - - return conv_pd; } -static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeightsAuto( +static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( const ConvolutionParam& param, const NDArray &data, const NDArray &weights, const NDArray *bias, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { @@ -193,13 +202,25 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeightsAut if (param.dilate.ndim() == 0 && bias == nullptr) { mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else if (param.dilate.ndim() == 0) { auto bias_md = GetMemDesc(*bias); mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, bias_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { mkldnn::memory::dims dilates{0, 0}; dilates[0] = param.dilate[0] - 1; @@ -208,32 +229,30 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeightsAut mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { auto bias_md = GetMemDesc(*bias); mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, bias_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } } } -static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( - const ConvolutionParam& param, const NDArray &data, - const NDArray &weights, const NDArray *bias, const NDArray &output, - const mkldnn::convolution_forward::primitive_desc &fwd_pd) { - auto conv_pd = GetConvBwdWeightsAuto(param, data, weights, bias, output, fwd_pd); - while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } - - return conv_pd; -} - void MKLDNNConvForward::SetNewMem(const mkldnn::memory &data, const mkldnn::memory &weight, const mkldnn::memory *bias, diff --git a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc index 16d78087c9ad..baa8768d1b0d 100644 --- a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc @@ -47,7 +47,7 @@ static inline mkldnn::memory::desc GetBiasDesc(mkldnn::memory::desc md) { mkldnn::memory::format::any); } -static mkldnn::convolution_forward::primitive_desc GetDeconvBwdAuto( +static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( const mkldnn::memory::desc &data_md, const mkldnn::memory::desc &weights_md, bool has_bias, const mkldnn::memory::desc &out_md, const mkldnn::engine &engine, const mkldnn::memory::dims &strides, @@ -56,31 +56,26 @@ static mkldnn::convolution_forward::primitive_desc GetDeconvBwdAuto( mkldnn::convolution_forward::desc desc(mkldnn::prop_kind::forward_training, mkldnn::algorithm::convolution_direct, out_md, weights_md, data_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, engine); + auto deconv_pd = mkldnn::convolution_forward::primitive_desc(desc, engine); + while (deconv_pd.dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weights_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + return deconv_pd; } else { auto bias_md = GetBiasDesc(data_md); mkldnn::convolution_forward::desc desc(mkldnn::prop_kind::forward_training, mkldnn::algorithm::convolution_direct, out_md, weights_md, bias_md, data_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_forward::primitive_desc(desc, engine); - } -} - -static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( - const mkldnn::memory::desc &data_md, const mkldnn::memory::desc &weights_md, - bool has_bias, const mkldnn::memory::desc &out_md, - const mkldnn::engine &engine, const mkldnn::memory::dims &strides, - const mkldnn::memory::dims &padding, const mkldnn::memory::dims &dilates) { - auto deconv_pd = GetDeconvBwdAuto(data_md, weights_md, has_bias, out_md, engine, strides, - padding, dilates); - - while (deconv_pd.dst_primitive_desc().get_size() != GetMemDescSize(data_md) || - deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || - deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weights_md)) { - CHECK(deconv_pd.next_impl()) << "No implementation"; + auto deconv_pd = mkldnn::convolution_forward::primitive_desc(desc, engine); + while (deconv_pd.dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weights_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + return deconv_pd; } - - return deconv_pd; } static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( @@ -109,9 +104,9 @@ static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( mkldnn::padding_kind::zero); auto deconv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, bwd_pd); while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || - deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || - deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { - CHECK(deconv_pd.next_impl()) << "No implementation"; + deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; } return deconv_pd; } @@ -140,7 +135,7 @@ static mkldnn::convolution_forward::primitive_desc GetDeconvBwdDataImpl( } static mkldnn::convolution_backward_weights::primitive_desc -GetDeconvBwdWeightsImplAuto( +GetDeconvBwdWeightsImpl( const DeconvolutionParam ¶m, const NDArray &data, const NDArray &weights, bool has_bias, const NDArray &output, const mkldnn::convolution_forward::primitive_desc &fwd_pd) { @@ -163,29 +158,26 @@ GetDeconvBwdWeightsImplAuto( if (!has_bias) { mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, out_md, weight_md, data_md, strides, dilate, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + auto deconv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.diff_weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + return deconv_pd; } else { auto bias_md = GetBiasDesc(data_md); mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, out_md, weight_md, bias_md, data_md, strides, dilate, padding, padding, mkldnn::padding_kind::zero); - return mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); - } -} - -static mkldnn::convolution_backward_weights::primitive_desc -GetDeconvBwdWeightsImpl( - const DeconvolutionParam ¶m, const NDArray &data, - const NDArray &weights, bool has_bias, const NDArray &output, - const mkldnn::convolution_forward::primitive_desc &fwd_pd) { - auto deconv_pd = GetDeconvBwdWeightsImplAuto(param, data, weights, has_bias, output, fwd_pd); - while (deconv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(data) || - deconv_pd.src_primitive_desc().get_size() != GetArraySize(output) || - deconv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(deconv_pd.next_impl()) << "No implementation"; + auto deconv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || + deconv_pd.src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.diff_weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; + } + return deconv_pd; } - - return deconv_pd; } class MKLDNNDeconvForward { From 7c09f3858c1742add3a8b49fd5be358ba42f1209 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 24 Oct 2018 10:32:58 +0800 Subject: [PATCH 03/31] fix indent --- src/operator/nn/mkldnn/mkldnn_convolution.cc | 48 +++++++++---------- .../nn/mkldnn/mkldnn_deconvolution.cc | 6 +-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/operator/nn/mkldnn/mkldnn_convolution.cc b/src/operator/nn/mkldnn/mkldnn_convolution.cc index 86376df6c4d0..1415c0b45140 100644 --- a/src/operator/nn/mkldnn/mkldnn_convolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_convolution.cc @@ -160,10 +160,10 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } else { mkldnn::memory::dims dilates{0, 0}; @@ -174,10 +174,10 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.diff_src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } } @@ -204,10 +204,10 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } else if (param.dilate.ndim() == 0) { auto bias_md = GetMemDesc(*bias); @@ -216,10 +216,10 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } else { mkldnn::memory::dims dilates{0, 0}; @@ -231,10 +231,10 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } else { auto bias_md = GetMemDesc(*bias); @@ -244,10 +244,10 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( mkldnn::padding_kind::zero); auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } return conv_pd; } } diff --git a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc index baa8768d1b0d..87e89646d7fe 100644 --- a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc @@ -104,9 +104,9 @@ static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( mkldnn::padding_kind::zero); auto deconv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, bwd_pd); while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || - deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || - deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { - CHECK(deconv_pd.next_impl()) << "No implementation"; + deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || + deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(deconv_pd.next_impl()) << "No implementation"; } return deconv_pd; } From 41da42ffe1cc57fa86c0749201b2b76a4ba25b50 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 24 Oct 2018 18:05:25 +0800 Subject: [PATCH 04/31] fix cmake --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52a9596daba6..aeb56a0dafb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,6 +243,7 @@ if(USE_MKLDNN) set(WITH_EXAMPLE OFF) add_subdirectory(3rdparty/mkldnn) + include_directories(3rdparty/mkldnn) include_directories(3rdparty/mkldnn/include) add_definitions(-DUSE_MKL=1) add_definitions(-DCUB_MKL=1) From 2e3c22fc26a07b918cde53a96832024af3413400 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Thu, 25 Oct 2018 00:05:35 +0800 Subject: [PATCH 05/31] fix cmake --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aeb56a0dafb9..460b5dcf9883 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,9 +241,10 @@ if(USE_MKLDNN) endif() set(WITH_TEST OFF) set(WITH_EXAMPLE OFF) - add_subdirectory(3rdparty/mkldnn) include_directories(3rdparty/mkldnn) + add_subdirectory(3rdparty/mkldnn) + include_directories(3rdparty/mkldnn/include) add_definitions(-DUSE_MKL=1) add_definitions(-DCUB_MKL=1) From db3f674c5c35b20ca597ee036a3ca7f55b897776 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Thu, 25 Oct 2018 16:05:03 +0800 Subject: [PATCH 06/31] fix cpp test for mkldnn --- tests/cpp/operator/mkldnn.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/cpp/operator/mkldnn.cc b/tests/cpp/operator/mkldnn.cc index 9948b50aa510..eb1f73eb01f9 100644 --- a/tests/cpp/operator/mkldnn.cc +++ b/tests/cpp/operator/mkldnn.cc @@ -204,6 +204,12 @@ static std::vector GetMKLDNNFormat(size_t num_dims, int data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); mkldnn::convolution_forward::primitive_desc pd(desc, CpuEngine::Get()->get_engine()); + while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || + pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || + pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(pd.next_imple()) << "No implementation"; + } + std::vector ret(2); ret[0] = static_cast(pd.dst_primitive_desc().desc().data.format); ret[1] = static_cast(pd.weights_primitive_desc().desc().data.format); @@ -227,6 +233,12 @@ static std::vector GetMKLDNNFormat(size_t num_dims, int data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); mkldnn::convolution_forward::primitive_desc pd(desc, CpuEngine::Get()->get_engine()); + while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || + pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || + pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(pd.next_imple()) << "No implementation"; + } + std::vector ret(1); ret[0] = static_cast(pd.weights_primitive_desc().desc().data.format); printf("format: %d\n", ret[0]); From e85139f1d32e92a5685ed5a44d575ada71a4a7fe Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Thu, 25 Oct 2018 17:29:05 +0800 Subject: [PATCH 07/31] fix typo --- tests/cpp/operator/mkldnn.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cpp/operator/mkldnn.cc b/tests/cpp/operator/mkldnn.cc index eb1f73eb01f9..1a2b102ec2be 100644 --- a/tests/cpp/operator/mkldnn.cc +++ b/tests/cpp/operator/mkldnn.cc @@ -207,7 +207,7 @@ static std::vector GetMKLDNNFormat(size_t num_dims, int while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { - CHECK(pd.next_imple()) << "No implementation"; + CHECK(pd.next_impl()) << "No implementation"; } std::vector ret(2); @@ -236,7 +236,7 @@ static std::vector GetMKLDNNFormat(size_t num_dims, int while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { - CHECK(pd.next_imple()) << "No implementation"; + CHECK(pd.next_impl()) << "No implementation"; } std::vector ret(1); From f905404eb7c568448ef4fe3a897e2f1ef306a495 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 26 Oct 2018 14:15:00 +0800 Subject: [PATCH 08/31] fix conficts after merge --- tests/cpp/include/test_mkldnn.h | 12 ++++++++++++ tests/cpp/operator/mkldnn_test.cc | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index ef13e4e74211..3c0fab6d1379 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -116,6 +116,12 @@ inline static std::vector GetMKLDNNFormat(size_t num_dim data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); mkldnn::convolution_forward::primitive_desc pd(desc, CpuEngine::Get()->get_engine()); + while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || + pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || + pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(pd.next_impl()) << "No implementation"; + } + std::vector ret(2); ret[0] = static_cast(pd.dst_primitive_desc().desc().data.format); ret[1] = static_cast(pd.weights_primitive_desc().desc().data.format); @@ -139,6 +145,12 @@ inline static std::vector GetMKLDNNFormat(size_t num_dim data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); mkldnn::convolution_forward::primitive_desc pd(desc, CpuEngine::Get()->get_engine()); + while (pd.dst_primitive_desc().get_size() != GetMemDescSize(out_md) || + pd.src_primitive_desc().get_size() != GetMemDescSize(data_md) || + pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { + CHECK(pd.next_impl()) << "No implementation"; + } + std::vector ret(1); ret[0] = static_cast(pd.weights_primitive_desc().desc().data.format); printf("format: %d\n", ret[0]); diff --git a/tests/cpp/operator/mkldnn_test.cc b/tests/cpp/operator/mkldnn_test.cc index fbb7215b9862..8ec2b006216b 100644 --- a/tests/cpp/operator/mkldnn_test.cc +++ b/tests/cpp/operator/mkldnn_test.cc @@ -100,9 +100,9 @@ static void VerifyDefMem(const mkldnn::memory &mem) { TEST(MKLDNN_UTIL_FUNC, MemFormat) { // Check whether the number of format is correct. - CHECK_EQ(mkldnn_format_last, 67); - CHECK_EQ(mkldnn_nchw, 5); - CHECK_EQ(mkldnn_oihw, 15); + CHECK_EQ(mkldnn_format_last, 110); + CHECK_EQ(mkldnn_nchw, 7); + CHECK_EQ(mkldnn_oihw, 16); } static void VerifyMem(const mkldnn::memory &mem) { From 1fe9f8806d29c765e05f91c584799a947af2eb1d Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 26 Oct 2018 16:12:40 +0800 Subject: [PATCH 09/31] debug: remove 5d test --- tests/cpp/include/test_mkldnn.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 3c0fab6d1379..8ba34db08a67 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -203,6 +203,7 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s2, dtype, formats[1])); } { + /* // 5D TShape s(5); s[0] = 96; s[1] = 1; s[2] = 3; s[3] = 11; s[4] = 11; @@ -211,6 +212,7 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(5, dtype); pds.push_back(GetMemPD(s, dtype, formats[0])); + */ } TestArrayShapes ret; From 5412d643c2b00ce54c05e7387aca6779dee120d5 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 26 Oct 2018 17:17:23 +0800 Subject: [PATCH 10/31] debug: remove 4d test --- tests/cpp/include/test_mkldnn.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 8ba34db08a67..85e6c49d4db3 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -187,6 +187,7 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::nc)); } { + /* // 4D TShape s1(4); s1[0] = 10; s1[1] = 96; s1[2] = 54; s1[3] = 54; @@ -201,6 +202,7 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(4, dtype); pds.push_back(GetMemPD(s1, dtype, formats[0])); pds.push_back(GetMemPD(s2, dtype, formats[1])); + */ } { /* From af2f80adbccf15c343fb1f3d1f300de638b9b4d9 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Sat, 27 Oct 2018 22:14:25 +0800 Subject: [PATCH 11/31] add comments --- src/operator/nn/mkldnn/mkldnn_convolution.cc | 45 +++++++++++++------ .../nn/mkldnn/mkldnn_deconvolution.cc | 16 +++++++ 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/operator/nn/mkldnn/mkldnn_convolution.cc b/src/operator/nn/mkldnn/mkldnn_convolution.cc index 1415c0b45140..9cf1b71880a8 100644 --- a/src/operator/nn/mkldnn/mkldnn_convolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_convolution.cc @@ -85,6 +85,11 @@ mkldnn::convolution_forward::primitive_desc GetConvFwdImpl( attr.set_int_output_round_mode(round_nearest); } + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. if (param.conv_param.dilate.ndim() == 0 && bias == nullptr) { mkldnn::convolution_forward::desc desc(prop, mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); @@ -155,6 +160,12 @@ static mkldnn::convolution_backward_data::primitive_desc GetConvBwdData( mkldnn::memory::dims padding{0, 0}; padding[0] = param.pad[0]; padding[1] = param.pad[1]; + + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. if (param.dilate.ndim() == 0) { mkldnn::convolution_backward_data::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); @@ -199,6 +210,12 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( mkldnn::memory::dims padding{0, 0}; padding[0] = param.pad[0]; padding[1] = param.pad[1]; + + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. if (param.dilate.ndim() == 0 && bias == nullptr) { mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, padding, padding, mkldnn::padding_kind::zero); @@ -229,26 +246,26 @@ static mkldnn::convolution_backward_weights::primitive_desc GetConvBwdWeights( mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); - while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } - return conv_pd; + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } else { auto bias_md = GetMemDesc(*bias); mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, data_md, weight_md, bias_md, out_md, strides, dilates, padding, padding, mkldnn::padding_kind::zero); - auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); - while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || - conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || - conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { - CHECK(conv_pd.next_impl()) << "No implementation"; - } - return conv_pd; + auto conv_pd = mkldnn::convolution_backward_weights::primitive_desc(desc, engine, fwd_pd); + while (conv_pd.diff_dst_primitive_desc().get_size() != GetArraySize(output) || + conv_pd.src_primitive_desc().get_size() != GetArraySize(data) || + conv_pd.diff_weights_primitive_desc().get_size() != GetArraySize(weights)) { + CHECK(conv_pd.next_impl()) << "No implementation"; + } + return conv_pd; } } } diff --git a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc index 87e89646d7fe..93032f7c92d6 100644 --- a/src/operator/nn/mkldnn/mkldnn_deconvolution.cc +++ b/src/operator/nn/mkldnn/mkldnn_deconvolution.cc @@ -52,6 +52,11 @@ static mkldnn::convolution_forward::primitive_desc GetDeconvBwd_( bool has_bias, const mkldnn::memory::desc &out_md, const mkldnn::engine &engine, const mkldnn::memory::dims &strides, const mkldnn::memory::dims &padding, const mkldnn::memory::dims &dilates) { + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. if (!has_bias) { mkldnn::convolution_forward::desc desc(mkldnn::prop_kind::forward_training, mkldnn::algorithm::convolution_direct, out_md, weights_md, data_md, strides, @@ -103,6 +108,11 @@ static mkldnn::convolution_backward_data::primitive_desc GetDeconvFwdImpl( out_md, weight_md, data_md, strides, dilate, padding, padding, mkldnn::padding_kind::zero); auto deconv_pd = mkldnn::convolution_backward_data::primitive_desc(desc, engine, bwd_pd); + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. while (deconv_pd.diff_dst_primitive_desc().get_size() != GetMemDescSize(data_md) || deconv_pd.diff_src_primitive_desc().get_size() != GetMemDescSize(out_md) || deconv_pd.weights_primitive_desc().get_size() != GetMemDescSize(weight_md)) { @@ -155,6 +165,12 @@ GetDeconvBwdWeightsImpl( mkldnn::memory::dims dilate{0, 0}; dilate[0] = param.dilate[0] - 1; dilate[1] = param.dilate[1] - 1; + + // MKL-DNN introduced padded formats since 0.15 which require more memory + // for computation compared with the actual tensor size. Currently, MKL-DNN + // operators are still reusing those memory from memory planning and the + // memory size may smaller than what MKL-DNN kernels require. So here we need + // select suboptimal kernel for computation according to tensor sizes. if (!has_bias) { mkldnn::convolution_backward_weights::desc desc(mkldnn::algorithm::convolution_direct, out_md, weight_md, data_md, strides, dilate, padding, padding, mkldnn::padding_kind::zero); From 32551b3662fc30d5c9758a86c7664b4f2e367128 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Mon, 29 Oct 2018 10:06:34 +0800 Subject: [PATCH 12/31] debug: remove 2d test --- tests/cpp/include/test_mkldnn.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 85e6c49d4db3..7b566e2a04ae 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -175,6 +175,7 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::x)); } { + /* // 2D TShape s(2); s[0] = 96; @@ -185,6 +186,7 @@ inline static TestArrayShapes GetTestArrayShapes() { s[1] = 363; shapes.push_back(s); pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::nc)); + */ } { /* From 9ff3687892f85f43b8eac72ba935ceda928ae7e8 Mon Sep 17 00:00:00 2001 From: xinyu Date: Mon, 29 Oct 2018 20:17:21 +0800 Subject: [PATCH 13/31] update mklml in ci --- ci/docker/install/ubuntu_mklml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/install/ubuntu_mklml.sh b/ci/docker/install/ubuntu_mklml.sh index 7e17295f4208..c7caedb6aa37 100755 --- a/ci/docker/install/ubuntu_mklml.sh +++ b/ci/docker/install/ubuntu_mklml.sh @@ -21,5 +21,5 @@ # the whole docker cache for the image set -ex -wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.14/mklml_lnx_2018.0.3.20180406.tgz +wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.3.20180710.tgz tar -zxf /tmp/mklml.tgz && cp -rf mklml_*/* /usr/local/ && rm -rf mklml_* From 328a22a373c49aacb914badd0db431bfbc8234f3 Mon Sep 17 00:00:00 2001 From: xinyu Date: Mon, 29 Oct 2018 21:40:46 +0800 Subject: [PATCH 14/31] fix mklml --- ci/docker/install/ubuntu_mklml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/install/ubuntu_mklml.sh b/ci/docker/install/ubuntu_mklml.sh index c7caedb6aa37..17c75bcfea91 100755 --- a/ci/docker/install/ubuntu_mklml.sh +++ b/ci/docker/install/ubuntu_mklml.sh @@ -21,5 +21,5 @@ # the whole docker cache for the image set -ex -wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.3.20180710.tgz +wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.20180710.tgz tar -zxf /tmp/mklml.tgz && cp -rf mklml_*/* /usr/local/ && rm -rf mklml_* From 7c0874225146e4752f5576a31393c4047fba22f8 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 09:50:43 +0800 Subject: [PATCH 15/31] Revert "fix mklml" This reverts commit 328a22a373c49aacb914badd0db431bfbc8234f3. --- ci/docker/install/ubuntu_mklml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/install/ubuntu_mklml.sh b/ci/docker/install/ubuntu_mklml.sh index 17c75bcfea91..c7caedb6aa37 100755 --- a/ci/docker/install/ubuntu_mklml.sh +++ b/ci/docker/install/ubuntu_mklml.sh @@ -21,5 +21,5 @@ # the whole docker cache for the image set -ex -wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.20180710.tgz +wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.3.20180710.tgz tar -zxf /tmp/mklml.tgz && cp -rf mklml_*/* /usr/local/ && rm -rf mklml_* From 026910fbf0815ea1d512b3fd156d484473441429 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 09:51:03 +0800 Subject: [PATCH 16/31] Revert "update mklml in ci" This reverts commit 9ff3687892f85f43b8eac72ba935ceda928ae7e8. --- ci/docker/install/ubuntu_mklml.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker/install/ubuntu_mklml.sh b/ci/docker/install/ubuntu_mklml.sh index c7caedb6aa37..7e17295f4208 100755 --- a/ci/docker/install/ubuntu_mklml.sh +++ b/ci/docker/install/ubuntu_mklml.sh @@ -21,5 +21,5 @@ # the whole docker cache for the image set -ex -wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.16/mklml_lnx_2019.0.3.20180710.tgz +wget -q --no-check-certificate -O /tmp/mklml.tgz https://github.com/intel/mkl-dnn/releases/download/v0.14/mklml_lnx_2018.0.3.20180406.tgz tar -zxf /tmp/mklml.tgz && cp -rf mklml_*/* /usr/local/ && rm -rf mklml_* From c90a48d50ccddde6d73b3c91f53783bae83a4d2d Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 09:51:25 +0800 Subject: [PATCH 17/31] Revert "debug: remove 2d test" This reverts commit 32551b3662fc30d5c9758a86c7664b4f2e367128. --- tests/cpp/include/test_mkldnn.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 7b566e2a04ae..85e6c49d4db3 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -175,7 +175,6 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::x)); } { - /* // 2D TShape s(2); s[0] = 96; @@ -186,7 +185,6 @@ inline static TestArrayShapes GetTestArrayShapes() { s[1] = 363; shapes.push_back(s); pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::nc)); - */ } { /* From 904a114f6627ce11af2157f128e265bd895581e0 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 09:51:46 +0800 Subject: [PATCH 18/31] Revert "debug: remove 4d test" This reverts commit 5412d643c2b00ce54c05e7387aca6779dee120d5. --- tests/cpp/include/test_mkldnn.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 85e6c49d4db3..8ba34db08a67 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -187,7 +187,6 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s, dtype, mkldnn::memory::format::nc)); } { - /* // 4D TShape s1(4); s1[0] = 10; s1[1] = 96; s1[2] = 54; s1[3] = 54; @@ -202,7 +201,6 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(4, dtype); pds.push_back(GetMemPD(s1, dtype, formats[0])); pds.push_back(GetMemPD(s2, dtype, formats[1])); - */ } { /* From 030d24a9db8fa859727b74e79878a0abc230ecac Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 09:51:58 +0800 Subject: [PATCH 19/31] Revert "debug: remove 5d test" This reverts commit 1fe9f8806d29c765e05f91c584799a947af2eb1d. --- tests/cpp/include/test_mkldnn.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 8ba34db08a67..3c0fab6d1379 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -203,7 +203,6 @@ inline static TestArrayShapes GetTestArrayShapes() { pds.push_back(GetMemPD(s2, dtype, formats[1])); } { - /* // 5D TShape s(5); s[0] = 96; s[1] = 1; s[2] = 3; s[3] = 11; s[4] = 11; @@ -212,7 +211,6 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(5, dtype); pds.push_back(GetMemPD(s, dtype, formats[0])); - */ } TestArrayShapes ret; From 153b068b6d3a18a33f399076d3420ac42f2bc387 Mon Sep 17 00:00:00 2001 From: xinyu Date: Tue, 30 Oct 2018 21:43:58 +0800 Subject: [PATCH 20/31] debug illegal core dump --- ci/docker/runtime_functions.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 43006f23974d..9e62ac01df68 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -612,6 +612,7 @@ build_ubuntu_amalgamation_min() { build_ubuntu_gpu_cmake_mkldnn() { set -ex + lscpu cd /work/build cmake \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ @@ -631,6 +632,7 @@ build_ubuntu_gpu_cmake_mkldnn() { # libmkldnn.so.0 is a link file. We need an actual binary file named libmkldnn.so.0. cp 3rdparty/mkldnn/src/libmkldnn.so.0 3rdparty/mkldnn/src/libmkldnn.so.0.tmp mv 3rdparty/mkldnn/src/libmkldnn.so.0.tmp 3rdparty/mkldnn/src/libmkldnn.so.0 + ldd libmxnet.so } build_ubuntu_gpu_cmake() { @@ -794,6 +796,8 @@ unittest_ubuntu_cpugpu_perl() { unittest_ubuntu_gpu_cpp() { set -ex + lscpu + ldd build/libmxnet.so build/tests/mxnet_unit_tests } From 39321d578ae589465c0d4edcae7f92b88fdf3feb Mon Sep 17 00:00:00 2001 From: xinyu Date: Tue, 30 Oct 2018 22:25:09 +0800 Subject: [PATCH 21/31] debug illegal core dump --- ci/docker/runtime_functions.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 9e62ac01df68..3d4500d7cb51 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -798,6 +798,7 @@ unittest_ubuntu_gpu_cpp() { set -ex lscpu ldd build/libmxnet.so + ldd build/tests/mxnet_unit_tests build/tests/mxnet_unit_tests } From 0062cbec32701400c5a045caf76d9546f173346b Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 23:07:47 +0800 Subject: [PATCH 22/31] Revert "debug illegal core dump" This reverts commit 39321d578ae589465c0d4edcae7f92b88fdf3feb. --- ci/docker/runtime_functions.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 3d4500d7cb51..9e62ac01df68 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -798,7 +798,6 @@ unittest_ubuntu_gpu_cpp() { set -ex lscpu ldd build/libmxnet.so - ldd build/tests/mxnet_unit_tests build/tests/mxnet_unit_tests } From cb6f3ab08d4b37bc6e7efb085e408874cd8d89f6 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 23:08:15 +0800 Subject: [PATCH 23/31] Revert "debug illegal core dump" This reverts commit 153b068b6d3a18a33f399076d3420ac42f2bc387. --- ci/docker/runtime_functions.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 9e62ac01df68..43006f23974d 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -612,7 +612,6 @@ build_ubuntu_amalgamation_min() { build_ubuntu_gpu_cmake_mkldnn() { set -ex - lscpu cd /work/build cmake \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ @@ -632,7 +631,6 @@ build_ubuntu_gpu_cmake_mkldnn() { # libmkldnn.so.0 is a link file. We need an actual binary file named libmkldnn.so.0. cp 3rdparty/mkldnn/src/libmkldnn.so.0 3rdparty/mkldnn/src/libmkldnn.so.0.tmp mv 3rdparty/mkldnn/src/libmkldnn.so.0.tmp 3rdparty/mkldnn/src/libmkldnn.so.0 - ldd libmxnet.so } build_ubuntu_gpu_cmake() { @@ -796,8 +794,6 @@ unittest_ubuntu_cpugpu_perl() { unittest_ubuntu_gpu_cpp() { set -ex - lscpu - ldd build/libmxnet.so build/tests/mxnet_unit_tests } From 4ffea762cd33243d4d78748a15ccc814f0efdf1b Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Tue, 30 Oct 2018 23:13:32 +0800 Subject: [PATCH 24/31] change cmake --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 460b5dcf9883..8c71df47c6c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,8 +239,9 @@ if(USE_MKLDNN) if(NOT MSVC) set(ARCH_OPT_FLAGS "-mtune=generic") endif() - set(WITH_TEST OFF) - set(WITH_EXAMPLE OFF) + set(WITH_TEST OFF CACHE INTERNAL "" FORCE) + set(WITH_EXAMPLE OFF CACHE INTERNAL "" FORCE) + set(ARCH_OPT_FLAGS "" CACHE INTERNAL "" FORCE) include_directories(3rdparty/mkldnn) add_subdirectory(3rdparty/mkldnn) From bf140445dced28e941b623851c38cc4b5e0d627b Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 2 Nov 2018 14:39:29 +0800 Subject: [PATCH 25/31] pin mkldnn version to 0.17rc --- 3rdparty/mkldnn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/mkldnn b/3rdparty/mkldnn index 51737f32ce3e..21fb5f2af1dd 160000 --- a/3rdparty/mkldnn +++ b/3rdparty/mkldnn @@ -1 +1 @@ -Subproject commit 51737f32ce3ef7059fcccb257896489999f1a398 +Subproject commit 21fb5f2af1dd14e132af4f1b79160977ee487818 From aeb26f11cf7a152bc67fa4e8417a6622e35b8841 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 2 Nov 2018 16:24:16 +0800 Subject: [PATCH 26/31] change format number --- tests/cpp/operator/mkldnn_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cpp/operator/mkldnn_test.cc b/tests/cpp/operator/mkldnn_test.cc index 8ec2b006216b..5e7e8d8b205b 100644 --- a/tests/cpp/operator/mkldnn_test.cc +++ b/tests/cpp/operator/mkldnn_test.cc @@ -100,7 +100,7 @@ static void VerifyDefMem(const mkldnn::memory &mem) { TEST(MKLDNN_UTIL_FUNC, MemFormat) { // Check whether the number of format is correct. - CHECK_EQ(mkldnn_format_last, 110); + CHECK_EQ(mkldnn_format_last, 112); CHECK_EQ(mkldnn_nchw, 7); CHECK_EQ(mkldnn_oihw, 16); } From f48b155c4e83c1a326d8d19e9ebc244e26b618bd Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Fri, 2 Nov 2018 23:49:20 +0800 Subject: [PATCH 27/31] remove include directories in cmake --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7fd1c5212399..5cea683e8f56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,7 +233,6 @@ if(USE_MKLDNN) set(WITH_EXAMPLE OFF CACHE INTERNAL "" FORCE) set(ARCH_OPT_FLAGS "" CACHE INTERNAL "" FORCE) - include_directories(3rdparty/mkldnn) add_subdirectory(3rdparty/mkldnn) include_directories(3rdparty/mkldnn/include) From 09a89fcf843dc21c27d1ef97d8bb789f37ccaa5c Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 7 Nov 2018 13:37:31 +0800 Subject: [PATCH 28/31] fix cpp test --- tests/cpp/include/test_mkldnn.h | 9 +++++---- tests/cpp/operator/mkldnn_operator_test.cc | 9 ++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 3c0fab6d1379..7da7d7874621 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -122,10 +122,11 @@ inline static std::vector GetMKLDNNFormat(size_t num_dim CHECK(pd.next_impl()) << "No implementation"; } - std::vector ret(2); + std::vector ret(1); ret[0] = static_cast(pd.dst_primitive_desc().desc().data.format); - ret[1] = static_cast(pd.weights_primitive_desc().desc().data.format); - printf("format: %d, %d\n", ret[0], ret[1]); + // ret[1] = static_cast(pd.weights_primitive_desc().desc().data.format); + // printf("format: %d, %d\n", ret[0], ret[1]); + printf("format: %d \n", ret[0]); return ret; } else if (num_dims == 5) { mkldnn::memory::dims data_dims{1, 32, 112, 112}; @@ -200,7 +201,7 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(4, dtype); pds.push_back(GetMemPD(s1, dtype, formats[0])); - pds.push_back(GetMemPD(s2, dtype, formats[1])); + // pds.push_back(GetMemPD(s2, dtype, formats[1])); } { // 5D diff --git a/tests/cpp/operator/mkldnn_operator_test.cc b/tests/cpp/operator/mkldnn_operator_test.cc index d53f17448d41..2f925fc76024 100644 --- a/tests/cpp/operator/mkldnn_operator_test.cc +++ b/tests/cpp/operator/mkldnn_operator_test.cc @@ -214,7 +214,8 @@ OpAttrs GetLRNBackwardsOp() { } void AssertEqual(const std::vector &in_arrs, - const std::vector &out_arrs) { + const std::vector &out_arrs, + float rtol=1e-5, float atol=1e-8) { NDArray tmp1 = in_arrs[0]->Reorder2Default(); NDArray tmp2 = out_arrs[0]->Reorder2Default(); EXPECT_EQ(tmp1.shape().Size(), tmp2.shape().Size()); @@ -222,8 +223,10 @@ void AssertEqual(const std::vector &in_arrs, TBlob blob2 = tmp2.data(); mshadow::default_real_t *d1 = static_cast(blob1.dptr_); mshadow::default_real_t *d2 = static_cast(blob2.dptr_); - for (int i = 0; i < tmp1.shape().Size(); i++) - ASSERT_FLOAT_EQ(d1[i], d2[i]); + for (int i = 0; i < tmp1.shape().Size(); i++) { + float abs_err = fabs((d1[i]) - (d2[i])); + ASSERT_LE(abs_err, (atol + rtol * fabs(d2[i]))); + } } void VerifyActResult(const std::vector &in_arrs, From 0376aa03256499ba663e41cbabd28dbd3fc01d4f Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 7 Nov 2018 13:43:56 +0800 Subject: [PATCH 29/31] address cpplint complaint --- tests/cpp/operator/mkldnn_operator_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cpp/operator/mkldnn_operator_test.cc b/tests/cpp/operator/mkldnn_operator_test.cc index 2f925fc76024..21b257e40c37 100644 --- a/tests/cpp/operator/mkldnn_operator_test.cc +++ b/tests/cpp/operator/mkldnn_operator_test.cc @@ -215,7 +215,7 @@ OpAttrs GetLRNBackwardsOp() { void AssertEqual(const std::vector &in_arrs, const std::vector &out_arrs, - float rtol=1e-5, float atol=1e-8) { + float rtol = 1e-5, float atol = 1e-8) { NDArray tmp1 = in_arrs[0]->Reorder2Default(); NDArray tmp2 = out_arrs[0]->Reorder2Default(); EXPECT_EQ(tmp1.shape().Size(), tmp2.shape().Size()); From e1fb6b7306adc86040eea524a054f364af3a3714 Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 7 Nov 2018 13:59:54 +0800 Subject: [PATCH 30/31] remove comment code --- tests/cpp/include/test_mkldnn.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/cpp/include/test_mkldnn.h b/tests/cpp/include/test_mkldnn.h index 7da7d7874621..31fe5c7d7bb5 100644 --- a/tests/cpp/include/test_mkldnn.h +++ b/tests/cpp/include/test_mkldnn.h @@ -124,8 +124,6 @@ inline static std::vector GetMKLDNNFormat(size_t num_dim std::vector ret(1); ret[0] = static_cast(pd.dst_primitive_desc().desc().data.format); - // ret[1] = static_cast(pd.weights_primitive_desc().desc().data.format); - // printf("format: %d, %d\n", ret[0], ret[1]); printf("format: %d \n", ret[0]); return ret; } else if (num_dims == 5) { @@ -201,7 +199,6 @@ inline static TestArrayShapes GetTestArrayShapes() { std::vector formats = GetMKLDNNFormat(4, dtype); pds.push_back(GetMemPD(s1, dtype, formats[0])); - // pds.push_back(GetMemPD(s2, dtype, formats[1])); } { // 5D From a7285835f1ba17a8df950bb556bd3ecfda4b7ffd Mon Sep 17 00:00:00 2001 From: Lv Tao Date: Wed, 7 Nov 2018 16:00:52 +0800 Subject: [PATCH 31/31] update mkldnn head --- 3rdparty/mkldnn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/mkldnn b/3rdparty/mkldnn index 21fb5f2af1dd..9910b480296a 160000 --- a/3rdparty/mkldnn +++ b/3rdparty/mkldnn @@ -1 +1 @@ -Subproject commit 21fb5f2af1dd14e132af4f1b79160977ee487818 +Subproject commit 9910b480296a0d1496db466531e56729b3922bbf