From c5947c7bb97be3a4d62581d0c6ee30f4cc97e5ad Mon Sep 17 00:00:00 2001 From: AG Ramesh Date: Thu, 28 Feb 2019 19:44:47 -0800 Subject: [PATCH] Upgrade to MKL DNN 0.18 RC --- tensorflow/core/kernels/mkl_aggregate_ops.cc | 12 +++---- tensorflow/core/kernels/mkl_relu_op.cc | 21 ++++++------ tensorflow/workspace.bzl | 34 +++++++++++--------- third_party/mkl/mkl.BUILD | 1 + third_party/mkl_dnn/mkldnn.BUILD | 34 ++++++++++++++++++-- 5 files changed, 67 insertions(+), 35 deletions(-) diff --git a/tensorflow/core/kernels/mkl_aggregate_ops.cc b/tensorflow/core/kernels/mkl_aggregate_ops.cc index 8eb334f2b49..3eb19cd08a7 100644 --- a/tensorflow/core/kernels/mkl_aggregate_ops.cc +++ b/tensorflow/core/kernels/mkl_aggregate_ops.cc @@ -73,8 +73,8 @@ class MklAddNOp : public OpKernel { "Inputs to operation ", this->name(), " of type ", this->type_string(), " must have the same size and shape. Input 0: ", - src1_shape.DebugString(), - " != input 1: ", src2_shape.DebugString())); + src1_shape.DebugString(), " != input 1: ", + src2_shape.DebugString())); } if (!input1_in_mkl_format && src1_dims_size == 0) { @@ -101,7 +101,7 @@ class MklAddNOp : public OpKernel { } } - std::vector coeff(2, 1.0); + const std::vector coeff(2, 1.0f); MklDnnData src1(&cpu_engine); MklDnnData src2(&cpu_engine); MklDnnData dst(&cpu_engine); @@ -242,9 +242,9 @@ class MklAddNOp : public OpKernel { net.push_back(sum(sum_pd, inputs, dst.GetOpMem())); stream(stream::kind::eager).submit(net).wait(); } catch (mkldnn::error& e) { - string error_msg = "Status: " + std::to_string(e.status) + - ", message: " + string(e.message) + ", in file " + - string(__FILE__) + ":" + std::to_string(__LINE__); + string error_msg = "Status: " + std::to_string(e.status) + ", message: " + + string(e.message) + ", in file " + string(__FILE__) + + ":" + std::to_string(__LINE__); OP_REQUIRES_OK( ctx, errors::Aborted("Operation received an exception:", error_msg)); } diff --git a/tensorflow/core/kernels/mkl_relu_op.cc b/tensorflow/core/kernels/mkl_relu_op.cc index 19585969993..1494fcfedfe 100644 --- a/tensorflow/core/kernels/mkl_relu_op.cc +++ b/tensorflow/core/kernels/mkl_relu_op.cc @@ -17,23 +17,22 @@ limitations under the License. #ifdef INTEL_MKL #include "mkldnn.hpp" -#include "third_party/eigen3/unsupported/Eigen/CXX11/Tensor" #include "tensorflow/core/framework/numeric_op.h" #include "tensorflow/core/framework/op_kernel.h" #include "tensorflow/core/framework/register_types.h" #include "tensorflow/core/framework/tensor.h" #include "tensorflow/core/lib/core/errors.h" #include "tensorflow/core/util/mkl_util.h" +#include "third_party/eigen3/unsupported/Eigen/CXX11/Tensor" using mkldnn::algorithm; using mkldnn::eltwise_bounded_relu; using mkldnn::eltwise_elu; using mkldnn::eltwise_relu; using mkldnn::eltwise_tanh; +using mkldnn::eltwise_forward; using mkldnn::memory; using mkldnn::prop_kind; -using mkldnn::relu_backward; -using mkldnn::relu_forward; using mkldnn::stream; namespace tensorflow { @@ -531,9 +530,9 @@ class MklReluOpBase : public OpKernel { // execute eltwise eltwise_fwd->Execute(src_data, dst_data); } catch (mkldnn::error& e) { - string error_msg = "Status: " + std::to_string(e.status) + - ", message: " + string(e.message) + ", in file " + - string(__FILE__) + ":" + std::to_string(__LINE__); + string error_msg = "Status: " + std::to_string(e.status) + ", message: " + + string(e.message) + ", in file " + string(__FILE__) + + ":" + std::to_string(__LINE__); OP_REQUIRES_OK( context, errors::Aborted("Operation received an exception:", error_msg)); @@ -542,7 +541,7 @@ class MklReluOpBase : public OpKernel { private: engine cpu_engine = engine(engine::cpu, 0); - std::shared_ptr relu_fwd_pd; + std::shared_ptr relu_fwd_pd; protected: float alpha_; @@ -699,9 +698,9 @@ class MklReluGradOpBase : public OpKernel { // execute eltwise bwd eltwise_bwd->Execute(src_data, diff_dst_data, diff_src_data); } catch (mkldnn::error& e) { - string error_msg = "Status: " + std::to_string(e.status) + - ", message: " + string(e.message) + ", in file " + - string(__FILE__) + ":" + std::to_string(__LINE__); + string error_msg = "Status: " + std::to_string(e.status) + ", message: " + + string(e.message) + ", in file " + string(__FILE__) + + ":" + std::to_string(__LINE__); OP_REQUIRES_OK( context, errors::Aborted("Operation received an exception:", error_msg)); @@ -710,7 +709,7 @@ class MklReluGradOpBase : public OpKernel { private: engine cpu_engine = engine(engine::cpu, 0); - std::shared_ptr relu_fwd_pd; + std::shared_ptr relu_fwd_pd; protected: float alpha_; diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl index 0dcb90d3d42..d7d6cd091cb 100755 --- a/tensorflow/workspace.bzl +++ b/tensorflow/workspace.bzl @@ -82,31 +82,31 @@ def tf_workspace(path_prefix = "", tf_repo_name = ""): mkl_repository( name = "mkl_linux", build_file = clean_dep("//third_party/mkl:mkl.BUILD"), - sha256 = "f00dc3b142a5be399bdeebd7e7ea369545a35d4fb84c86f98b6b048d72685295", - strip_prefix = "mklml_lnx_2019.0.1.20180928", + sha256 = "f84f92b047edad0467d68a925410b782e54eac9e7af61f4cc33d3d38b29bee5d", + strip_prefix = "mklml_lnx_2019.0.3.20190125", urls = [ - "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_lnx_2019.0.1.20180928.tgz", - "https://github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_lnx_2019.0.1.20180928.tgz", + "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_lnx_2019.0.3.20190125.tgz", + "https://github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_lnx_2019.0.3.20190125.tgz", ], ) mkl_repository( name = "mkl_windows", build_file = clean_dep("//third_party/mkl:mkl.BUILD"), - sha256 = "efef90b7b9613fab10f44c8ac4ff28db613a112c64ed94826d7e44df09c44b0b", - strip_prefix = "mklml_win_2019.0.1.20180928", + sha256 = "8f968cdb175242f887efa9a6dbced76e65a584fbb35e5f5b05883a3584a2382a", + strip_prefix = "mklml_win_2019.0.3.20190125", urls = [ - "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_win_2019.0.1.20180928.zip", - "https://github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_win_2019.0.1.20180928.zip", + "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_win_2019.0.3.20190125.zip", + "https://github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_win_2019.0.3.20190125.zip", ], ) mkl_repository( name = "mkl_darwin", build_file = clean_dep("//third_party/mkl:mkl.BUILD"), - sha256 = "83f02938a0c095274db7b8b7b694157abafa3837c5cbaef740440d466c86a477", - strip_prefix = "mklml_mac_2019.0.1.20180928", + sha256 = "60d6500f0e1a98f011324180fbf7a51a177f45494b4089e02867684d413c4293", + strip_prefix = "mklml_mac_2019.0.3.20190125", urls = [ - "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_mac_2019.0.1.20180928.tgz", - "https://github.com/intel/mkl-dnn/releases/download/v0.17-rc/mklml_mac_2019.0.1.20180928.tgz", + "https://mirror.bazel.build/github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_mac_2019.0.3.20190125.tgz", + "https://github.com/intel/mkl-dnn/releases/download/v0.18-rc/mklml_mac_2019.0.3.20190125.tgz", ], ) @@ -114,14 +114,16 @@ def tf_workspace(path_prefix = "", tf_repo_name = ""): print("path_prefix was specified to tf_workspace but is no longer used " + "and will be removed in the future.") + # Important: If you are upgrading MKL DNN, then update the version numbers + # in third_party/mkl_dnn/mkldnn.BUILD. tf_http_archive( name = "mkl_dnn", build_file = clean_dep("//third_party/mkl_dnn:mkldnn.BUILD"), - sha256 = "b100f57af4a2b59a3a37a1ba38f77b644d2107d758a1a7f4e51310063cd21e73", - strip_prefix = "mkl-dnn-733fc908874c71a5285043931a1cf80aa923165c", + sha256 = "4d0522fc609b4194738dbbe14c8ee1546a2736b03886a07f498250cde53f38fb", + strip_prefix = "mkl-dnn-bdd1c7be2cbc0b451d3541ab140742db67f17684", urls = [ - "https://mirror.bazel.build/github.com/intel/mkl-dnn/archive/733fc908874c71a5285043931a1cf80aa923165c.tar.gz", - "https://github.com/intel/mkl-dnn/archive/733fc908874c71a5285043931a1cf80aa923165c.tar.gz", + "https://mirror.bazel.build/github.com/intel/mkl-dnn/archive/bdd1c7be2cbc0b451d3541ab140742db67f17684.tar.gz", + "https://github.com/intel/mkl-dnn/archive/bdd1c7be2cbc0b451d3541ab140742db67f17684.tar.gz", ], ) diff --git a/third_party/mkl/mkl.BUILD b/third_party/mkl/mkl.BUILD index 3f3c9e9336a..72370182c41 100644 --- a/third_party/mkl/mkl.BUILD +++ b/third_party/mkl/mkl.BUILD @@ -41,5 +41,6 @@ cc_library( "lib/libiomp5md.lib", "lib/mklml.lib", ], + linkopts = ["/FORCE:MULTIPLE"], visibility = ["//visibility:public"], ) diff --git a/third_party/mkl_dnn/mkldnn.BUILD b/third_party/mkl_dnn/mkldnn.BUILD index bd842b87f8d..6af42ddee7e 100644 --- a/third_party/mkl_dnn/mkldnn.BUILD +++ b/third_party/mkl_dnn/mkldnn.BUILD @@ -4,6 +4,10 @@ load( "@org_tensorflow//third_party/mkl_dnn:build_defs.bzl", "if_mkl_open_source_only", ) +load( + "@org_tensorflow//third_party:common.bzl", + "template_rule", +) config_setting( name = "clang_linux_x86_64", @@ -13,6 +17,26 @@ config_setting( }, ) +# Create the file mkldnn_version.h with MKL DNN version numbers. +# Currently, the version numbers are hard code here. If MKL DNN is upgraded then +# the version numbers have to be updated manually. The version numbers can be +# obtained from the PROJECT_VERSION settings in CMakeLists.txt. The variable is +# set to "version_major.version_minor.version_patch". The git hash version can +# be set to Unknown. +# TODO(agramesh1) Automatically get the version numbers from CMakeLists.txt. + +template_rule( + name = "mkldnn_version_h", + src = "include/mkldnn_version.h.in", + out = "include/mkldnn_version.h", + substitutions = { + "@MKLDNN_VERSION_MAJOR@": "0", + "@MKLDNN_VERSION_MINOR@": "18", + "@MKLDNN_VERSION_PATCH@": "0", + "@MKLDNN_VERSION_HASH@": "N/A", + }, +) + cc_library( name = "mkl_dnn", srcs = glob([ @@ -22,8 +46,11 @@ cc_library( "src/cpu/*.hpp", "src/cpu/gemm/*.cpp", "src/cpu/gemm/*.hpp", + "src/cpu/gemm/f32/*.cpp", + "src/cpu/gemm/s8x8s32/*.cpp", + "src/cpu/rnn/*.cpp", "src/cpu/xbyak/*.h", - ]), + ]) + [":mkldnn_version_h"], hdrs = glob(["include/*"]), copts = [ "-fexceptions", @@ -77,8 +104,11 @@ cc_library( "src/cpu/*.hpp", "src/cpu/gemm/*.cpp", "src/cpu/gemm/*.hpp", + "src/cpu/gemm/f32/*.cpp", + "src/cpu/gemm/s8x8s32/*.cpp", + "src/cpu/rnn/*.cpp", "src/cpu/xbyak/*.h", - ]), + ]) + [":mkldnn_version_h"], hdrs = glob(["include/*"]), copts = [ "-fexceptions",