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,