From 2edc30b57d0366c2e9cdba30a01da97675242c47 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Fri, 2 Jul 2021 20:04:11 +0200 Subject: [PATCH 1/3] added checking if md uses blocking format --- paddle/fluid/operators/split_op.cc | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/paddle/fluid/operators/split_op.cc b/paddle/fluid/operators/split_op.cc index 661e4ca727beec..d20b5fbb894421 100644 --- a/paddle/fluid/operators/split_op.cc +++ b/paddle/fluid/operators/split_op.cc @@ -14,6 +14,7 @@ limitations under the License. */ #include "paddle/fluid/operators/split_op.h" #include +#include "paddle/fluid/platform/cpu_info.h" namespace paddle { namespace operators { @@ -78,9 +79,18 @@ class SplitOp : public framework::OperatorWithKernel { #ifdef PADDLE_WITH_MKLDNN if (this->CanMKLDNNBeUsed(ctx, input_data_type)) { - return framework::OpKernelType(input_data_type, ctx.GetPlace(), - framework::DataLayout::kMKLDNN, - framework::LibraryType::kMKLDNN); + // OneDNN uses blocking format, which cannot be always + // supported with reorders, because if blocked dimension is not divisible + // by + // 8 or 16(depending on which blocking format is used) submemory cannot be + // created, so in that scenario a fallback is needed + auto tmp_md = dnnl::memory::desc( + framework::vectorize(ctx.Input("X")->dims()), dnnl::data_type + : f32, ctx.Input("X")->format()); + if (tmp_md.inner_blks != 0) + return framework::OpKernelType(input_data_type, ctx.GetPlace(), + framework::DataLayout::kMKLDNN, + framework::LibraryType::kMKLDNN); } #endif return framework::OpKernelType(input_data_type, ctx.GetPlace()); From 96dd03700c44c3b81eed52f696ec7a0b364c1b12 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Fri, 2 Jul 2021 20:57:45 +0200 Subject: [PATCH 2/3] minor change --- paddle/fluid/operators/split_op.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paddle/fluid/operators/split_op.cc b/paddle/fluid/operators/split_op.cc index d20b5fbb894421..3895486eda21af 100644 --- a/paddle/fluid/operators/split_op.cc +++ b/paddle/fluid/operators/split_op.cc @@ -85,9 +85,9 @@ class SplitOp : public framework::OperatorWithKernel { // 8 or 16(depending on which blocking format is used) submemory cannot be // created, so in that scenario a fallback is needed auto tmp_md = dnnl::memory::desc( - framework::vectorize(ctx.Input("X")->dims()), dnnl::data_type - : f32, ctx.Input("X")->format()); - if (tmp_md.inner_blks != 0) + framework::vectorize(ctx.Input("X")->dims()), + dnnl::memory::data_type::f32, ctx.Input("X")->format()); + if (tmp_md.data.format_desc.blocking.inner_nblks == 0) return framework::OpKernelType(input_data_type, ctx.GetPlace(), framework::DataLayout::kMKLDNN, framework::LibraryType::kMKLDNN); From 162340b03f9c245e4a80e62552fe3d769b153398 Mon Sep 17 00:00:00 2001 From: Jakub Piasecki Date: Fri, 2 Jul 2021 21:00:56 +0200 Subject: [PATCH 3/3] removed unnecessary line --- paddle/fluid/operators/split_op.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/paddle/fluid/operators/split_op.cc b/paddle/fluid/operators/split_op.cc index 3895486eda21af..f81ac8882d1076 100644 --- a/paddle/fluid/operators/split_op.cc +++ b/paddle/fluid/operators/split_op.cc @@ -14,7 +14,6 @@ limitations under the License. */ #include "paddle/fluid/operators/split_op.h" #include -#include "paddle/fluid/platform/cpu_info.h" namespace paddle { namespace operators {