You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by ta...@apache.org on 2019/09/19 15:50:13 UTC

[incubator-mxnet] 01/01: Merge remote-tracking branch 'origin' into mkldnn-v1.0

This is an automated email from the ASF dual-hosted git repository.

taolv pushed a commit to branch mkldnn-v1.0
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git

commit 99145a5014f62375a36a23da26efd77527385136
Merge: 1ff9429 a37a76c
Author: Tao Lv <ta...@intel.com>
AuthorDate: Thu Sep 19 23:18:25 2019 +0800

    Merge remote-tracking branch 'origin' into mkldnn-v1.0
    
    Conflicts:
    	src/operator/nn/mkldnn/mkldnn_base-inl.h

 3rdparty/dmlc-core                                 |   2 +-
 CODEOWNERS                                         |  15 +-
 README.md                                          |   2 +-
 amalgamation/amalgamation.py                       |   3 +-
 cd/Jenkinsfile_cd_pipeline                         |  10 +-
 cd/Jenkinsfile_release_job                         |   4 +-
 cd/README.md                                       |   4 +-
 cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy       |  57 ++++
 ci/docker/runtime_functions.sh                     | 111 ++++++-
 ci/windows/test_jl07_cpu.ps1                       |   2 +-
 ci/windows/test_jl10_cpu.ps1                       |   2 +-
 docs/faq/env_var.md                                |   4 +-
 docs/mxdoc.py                                      |   8 +-
 docs/tutorials/gluon/custom_layer.md               |   2 +-
 docs/tutorials/python/profiler.md                  |   3 +
 docs/tutorials/sparse/train_gluon.md               |   2 +-
 include/mxnet/c_api.h                              |  12 +
 julia/NEWS.md                                      |   7 -
 julia/deps/build.jl                                |  33 +-
 julia/docs/src/user-guide/install.md               |  20 +-
 julia/src/base.jl                                  |  30 +-
 julia/src/executor.jl                              |   2 +-
 julia/test/unittest/bind.jl                        |  15 +
 python/mxnet/__init__.py                           |   4 +
 python/mxnet/_ctypes/ndarray.py                    |  28 +-
 python/mxnet/_numpy_op_doc.py                      | 353 ++++++++++++++++++++-
 python/mxnet/cython/base.pyi                       |   8 +
 python/mxnet/cython/ndarray.pyx                    |  16 +-
 python/mxnet/gluon/block.py                        |  37 +++
 python/mxnet/gluon/data/dataloader.py              |  50 ++-
 python/mxnet/gluon/data/dataset.py                 |  31 ++
 python/mxnet/gluon/data/sampler.py                 |  10 +-
 python/mxnet/gluon/loss.py                         |  10 +-
 python/mxnet/ndarray/ndarray.py                    |   4 +-
 python/mxnet/ndarray/numpy/_op.py                  | 178 ++++++++++-
 python/mxnet/ndarray/numpy/linalg.py               |  48 ++-
 python/mxnet/ndarray/numpy/random.py               |  38 ++-
 python/mxnet/numpy/linalg.py                       |  42 ++-
 python/mxnet/numpy/multiarray.py                   | 328 +++++++++++++++++--
 python/mxnet/numpy/random.py                       |  10 +-
 python/mxnet/numpy_dispatch_protocol.py            | 216 +++++++++++++
 python/mxnet/symbol/numpy/_symbol.py               | 168 +++++++++-
 python/mxnet/symbol/numpy/linalg.py                |  48 ++-
 python/mxnet/symbol/numpy/random.py                |  39 ++-
 python/mxnet/test_utils.py                         |   5 +
 .../org/apache/mxnet/utils/CToScalaUtils.scala     |   4 +-
 src/c_api/c_api_ndarray.cc                         |  20 ++
 src/common/utils.cc                                |  57 ++++
 src/common/utils.h                                 |   9 +
 src/imperative/cached_op.cc                        |  23 +-
 src/imperative/cached_op.h                         |   8 +
 src/imperative/imperative_utils.cc                 |  20 +-
 src/imperative/imperative_utils.h                  |   9 +-
 src/operator/mshadow_op.h                          |  10 +
 src/operator/nn/mkldnn/mkldnn_base-inl.h           |  17 +-
 src/operator/nn/mkldnn/mkldnn_base.cc              |  23 +-
 src/operator/numpy/np_elemwise_broadcast_op.cc     |  36 +++
 src/operator/numpy/np_elemwise_broadcast_op.cu     |  21 ++
 src/operator/numpy/np_init_op.cc                   |  33 ++
 src/operator/numpy/np_init_op.cu                   |   4 +
 src/operator/numpy/np_init_op.h                    | 107 +++++++
 src/operator/numpy/np_matrix_op.cc                 |   1 +
 .../{np_multinomial_op.cu => dist_common.cc}       |  21 +-
 .../{np_multinomial_op.cu => dist_common.cu}       |  21 +-
 src/operator/numpy/random/dist_common.h            |   7 +
 src/operator/numpy/random/np_multinomial_op.cu     |  13 +
 src/operator/numpy/random/np_multinomial_op.h      |  26 +-
 .../random/{np_uniform_op.cc => np_normal_op.cc}   |  34 +-
 .../{np_multinomial_op.cu => np_normal_op.cu}      |  11 +-
 src/operator/numpy/random/np_normal_op.h           | 233 ++++++++++++++
 src/operator/numpy/random/np_uniform_op.cc         |   6 +
 src/operator/operator_tune.cc                      |   5 +
 src/operator/optimizer_op-inl.h                    |  50 ++-
 src/operator/random/multisample_op.h               |   2 +-
 src/operator/rnn.cc                                |  16 +-
 src/operator/sequence_last-inl.h                   |  12 +-
 src/operator/sequence_last.cc                      |  10 +-
 src/operator/subgraph/build_subgraph.cc            |  33 +-
 .../subgraph/mkldnn/mkldnn_conv_property.h         |  10 +-
 .../mkldnn/mkldnn_fc_post_quantize_property.h      |   2 +-
 src/operator/subgraph/mkldnn/mkldnn_fc_property.h  |   8 +-
 .../mkldnn_post_quantize_align_scale_property.h    |   2 +-
 .../mkldnn/mkldnn_post_quantize_property.h         |   8 +-
 .../mkldnn/mkldnn_subgraph_base-inl.h}             |  37 +--
 src/operator/subgraph/subgraph_property.h          | 110 +++++--
 src/operator/tensor/elemwise_unary_op_trig.cc      |  51 ++-
 src/operator/tensor/matrix_op-inl.h                |   2 +-
 src/storage/pooled_storage_manager.h               |  24 +-
 tests/nightly/JenkinsfileForBinaries               |  10 +-
 .../JenkinsfileForMBCC                             |   2 +-
 tests/nightly/test_large_array.py                  |  10 +-
 tests/nightly/test_large_vector.py                 |  13 +-
 tests/python/gpu/test_operator_gpu.py              |   1 +
 tests/python/mkl/test_mkldnn.py                    |   6 +-
 tests/python/mkl/test_subgraph.py                  |  21 ++
 tests/python/unittest/test_exc_handling.py         |   9 +
 tests/python/unittest/test_gluon.py                |  69 ++++
 tests/python/unittest/test_gluon_data.py           |  23 +-
 tests/python/unittest/test_higher_order_grad.py    |  29 ++
 tests/python/unittest/test_library_loading.py      |   3 +-
 tests/python/unittest/test_ndarray.py              |  33 +-
 tests/python/unittest/test_numpy_gluon.py          |  38 ++-
 .../python/unittest/test_numpy_interoperability.py | 211 ++++++++++++
 tests/python/unittest/test_numpy_ndarray.py        | 163 +++++++---
 tests/python/unittest/test_numpy_op.py             | 287 +++++++++++++++--
 tests/python/unittest/test_operator.py             |  51 ++-
 tests/python/unittest/test_optimizer.py            |  14 +-
 tests/tutorials/test_tutorials.py                  |  17 +-
 tests/utils/notebook_test/__init__.py              |   2 +-
 109 files changed, 3688 insertions(+), 501 deletions(-)

diff --cc src/operator/nn/mkldnn/mkldnn_base-inl.h
index 054f422,34f4a0b..0148a6e
--- a/src/operator/nn/mkldnn/mkldnn_base-inl.h
+++ b/src/operator/nn/mkldnn/mkldnn_base-inl.h
@@@ -46,19 -46,20 +46,20 @@@
  #ifndef MXNET_OPERATOR_NN_MKLDNN_MKLDNN_BASE_INL_H_
  #define MXNET_OPERATOR_NN_MKLDNN_MKLDNN_BASE_INL_H_
  
 -#if MXNET_USE_MKLDNN == 1
 +#if MXNET_USE_MKLDNN == 100
+ #include <algorithm>
  #include <iterator>
+ #include <memory>
  #include <string>
  #include <unordered_map>
- #include <vector>
  #include <utility>
- #include <algorithm>
- #include <memory>
+ #include <vector>
  #include "mkldnn.hpp"
+ #include "mxnet/graph_attr_types.h"
  #include "mxnet/ndarray.h"
- #include "mxnet/resource.h"
  #include "mxnet/op_attr_types.h"
+ #include "mxnet/resource.h"
 -using namespace mkldnn;
 +
  namespace mxnet {
  
  // =====  CpuEngine =======================================
diff --cc src/operator/nn/mkldnn/mkldnn_base.cc
index cfd7ad7,862947e..240e366
--- a/src/operator/nn/mkldnn/mkldnn_base.cc
+++ b/src/operator/nn/mkldnn/mkldnn_base.cc
@@@ -319,42 -292,136 +319,43 @@@ mkldnn_format_tag_t GetDefaultFormat(in
    }
  }
  
 -mkldnn_memory_format_t GetDefaultFormat(const mkldnn::memory::desc &desc) {
 -  if (desc.data.ndims == 1) {
 -    return desc.data.format;
 -  } else if (desc.data.ndims == 2) {
 -    if (desc.data.format == mkldnn_io)
 -      return mkldnn_oi;
 -    else
 -      return desc.data.format;
 -  } else if (desc.data.ndims == 3) {
 -    switch (desc.data.format) {
 -      case mkldnn_ncw:
 -      case mkldnn_nwc:
 -      case mkldnn_nCw8c:
 -      case mkldnn_nCw16c:
 -        return mkldnn_ncw;
 -      case mkldnn_oiw:
 -      case mkldnn_wio:
 -      case mkldnn_Owi8o:
 -      case mkldnn_OIw8i8o:
 -      case mkldnn_OIw8o8i:
 -      case mkldnn_OIw16i16o:
 -      case mkldnn_OIw16o16i:
 -      case mkldnn_Oiw16o:
 -      case mkldnn_Owi16o:
 -      case mkldnn_OIw8i16o2i:
 -      case mkldnn_OIw8o16i2o:
 -      case mkldnn_IOw16o16i:
 -        return mkldnn_oiw;
 -      default:
 -        LOG(FATAL) << "Unknown MKLDNN format for 3 dimensions: " << desc.data.format;
 -        return mkldnn_format_undef;
 -    }
 -  } else if (desc.data.ndims == 4) {
 -    switch (desc.data.format) {
 -      case mkldnn_nchw:
 -      case mkldnn_nhwc:
 -      case mkldnn_chwn:
 -      case mkldnn_nChw4c:
 -      case mkldnn_nChw8c:
 -      case mkldnn_nChw16c:
 -        return mkldnn_nchw;
 -      case mkldnn_oihw:
 -      case mkldnn_ihwo:
 -      case mkldnn_hwio:
 -      case mkldnn_iohw:
 -      case mkldnn_oIhw8i:
 -      case mkldnn_oIhw16i:
 -      case mkldnn_OIhw4i4o:
 -      case mkldnn_OIhw8i8o:
 -      case mkldnn_hwio_s8s8:
 -      case mkldnn_OIhw16i16o:
 -      case mkldnn_OIhw4i16o4i:
 -      case mkldnn_OIhw4i16o4i_s8s8:
 -      case mkldnn_OIhw8i16o2i:
 -      case mkldnn_OIhw8o16i2o:
 -      case mkldnn_OIhw8o8i:
 -      case mkldnn_OIhw16o16i:
 -      case mkldnn_IOhw16o16i:
 -      case mkldnn_Oihw8o:
 -      case mkldnn_Oihw16o:
 -      case mkldnn_Ohwi8o:
 -      case mkldnn_Ohwi16o:
 -      case mkldnn_OhIw16o4i:
 -        return mkldnn_oihw;
 -      case mkldnn_goiw:
 -      case mkldnn_gOwi8o:
 -      case mkldnn_gOIw8o8i:
 -      case mkldnn_gOIw8i8o:
 -      case mkldnn_gOIw16i16o:
 -      case mkldnn_gOIw16o16i:
 -      case mkldnn_gOiw16o:
 -      case mkldnn_gOwi16o:
 -      case mkldnn_gOIw8i16o2i:
 -      case mkldnn_gOIw8o16i2o:
 -      case mkldnn_gIOw16o16i:
 -        return mkldnn_goiw;
 -      default:
 -        LOG(FATAL) << "Unknown MKLDNN format for 4 dimensions: " << desc.data.format;
 -        return mkldnn_format_undef;
 -    }
 -  } else if (desc.data.ndims == 5) {
 -    switch (desc.data.format) {
 -      case mkldnn_goihw:
 -      case mkldnn_giohw:
 -      case mkldnn_hwigo:
 -      case mkldnn_hwigo_s8s8:
 -      case mkldnn_gOIhw4i4o:
 -      case mkldnn_gOIhw8i8o:
 -      case mkldnn_gOIhw16i16o:
 -      case mkldnn_gOIhw4i16o4i:
 -      case mkldnn_gOIhw4i16o4i_s8s8:
 -      case mkldnn_gOIhw8i16o2i:
 -      case mkldnn_gOIhw8o16i2o:
 -      case mkldnn_gOIhw8o8i:
 -      case mkldnn_gOIhw4o4i:
 -      case mkldnn_gOIhw16o16i:
 -      case mkldnn_gIOhw16o16i:
 -      case mkldnn_gOihw8o:
 -      case mkldnn_Goihw8g:
 -      case mkldnn_gOihw16o:
 -      case mkldnn_Goihw16g:
 -      case mkldnn_gOhwi8o:
 -      case mkldnn_gOhwi16o:
 -      case mkldnn_gOhIw16o4i:
 -      case mkldnn_Goihw16g_s8s8:
 -        return mkldnn_goihw;
 -      default:
 -        LOG(FATAL) << "Unknown MKLDNN format for 5 dimensions: " << desc.data.format;
 -        return mkldnn_format_undef;
 +mkldnn_format_tag_t GetDefaultFormat(const mkldnn::memory::desc &desc) {
 +  return GetDefaultFormat(desc.data.ndims);
 +}
 +
 +bool IsDefaultFormat(const mkldnn::memory::desc &desc) {
 +  bool rslt = false;
 +  if (desc.data.format_kind == mkldnn_blocked) {
 +    if (desc.data.format_desc.blocking.inner_nblks == 0) {
 +      int i = 0;
 +      for (i = 0; i < desc.data.ndims-1; i++) {
 +        if (desc.data.format_desc.blocking.strides[i]
 +            < desc.data.format_desc.blocking.strides[i + 1]) {
 +          break;
 +        }
 +      }
 +      if (i == desc.data.ndims-1) {
 +        rslt = true;
 +      }
      }
 -  } else {
 -    LOG(FATAL) << "Unsupported dimensions: " << desc.data.ndims;
 -    return mkldnn_format_undef;
    }
 +  return rslt;
  }
  
 -mkldnn::memory::primitive_desc GetPrimitiveDesc(mkldnn::memory::primitive_desc pd,
 -                                                mkldnn_memory_format_t format) {
 -  mkldnn::memory::dims dims(pd.desc().data.ndims);
 +mkldnn::memory::desc GetDesc(const mkldnn::memory::desc &desc,
 +                             const mkldnn_format_tag_t &format) {
 +  mkldnn::memory::dims dims(desc.data.ndims);
    for (size_t i = 0; i < dims.size(); i++)
 -    dims[i] = pd.desc().data.dims[i];
 -  mkldnn::memory::format cpp_format = static_cast<mkldnn::memory::format>(format);
 +    dims[i] = desc.data.dims[i];
 +  mkldnn::memory::format_tag cpp_format = static_cast<mkldnn::memory::format_tag>(format);
    mkldnn::memory::data_type cpp_type = static_cast<mkldnn::memory::data_type>(
 -      pd.desc().data.data_type);
 +      desc.data.data_type);
    mkldnn::memory::desc data_md(dims, cpp_type, cpp_format);
 -  return mkldnn::memory::primitive_desc(data_md, pd.get_engine());
 +  return mkldnn::memory::desc(dims, cpp_type, cpp_format);
  }
  
- void FallBackCompute(FCompute fn, const nnvm::NodeAttrs &attrs,
+ template <typename Compute, typename AttrState>
+ void FallBackCompute(Compute fn, const AttrState &attrs_states,
                       const OpContext &ctx,
                       const std::vector<NDArray> &inputs,
                       const std::vector<OpReqType> &req,