From f4e05142f205c308ee8ffb85d383ce6b87b13fc2 Mon Sep 17 00:00:00 2001 From: Tao Lv Date: Wed, 6 Nov 2019 08:07:54 +0800 Subject: [PATCH 1/4] static link mkldnn.a --- CMakeLists.txt | 2 +- Makefile | 11 +---------- cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy | 1 - cd/mxnet_lib/static/Jenkins_pipeline.groovy | 2 +- ci/docker/runtime_functions.sh | 3 --- ci/jenkins/Jenkins_steps.groovy | 4 ++-- mkldnn.mk | 18 ++++++++++-------- .../assembly/src/main/assembly/assembly.xml | 2 -- .../mxnet/util/NativeLibraryLoader.scala | 2 -- tests/nightly/JenkinsfileForBinaries | 2 +- tools/pip/setup.py | 5 ----- tools/staticbuild/build_lib.sh | 9 --------- 12 files changed, 16 insertions(+), 45 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0eba24f61d14..7f334b415427 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -265,8 +265,8 @@ if(USE_MKLDNN) set(MKLDNN_BUILD_TESTS OFF CACHE INTERNAL "" FORCE) set(MKLDNN_BUILD_EXAMPLES OFF CACHE INTERNAL "" FORCE) set(MKLDNN_ARCH_OPT_FLAGS "" CACHE INTERNAL "" FORCE) - set(MKLDNN_USE_MKL NONE CACHE INTERNAL "" FORCE) set(MKLDNN_ENABLE_JIT_PROFILING OFF CACHE INTERNAL "" FORCE) + set(MKLDNN_LIBRARY_TYPE STATIC CACHE INTERNAL "" FORCE) add_subdirectory(3rdparty/mkldnn) diff --git a/Makefile b/Makefile index 4746cc434de2..841ba7e322ca 100644 --- a/Makefile +++ b/Makefile @@ -151,7 +151,7 @@ ifeq ($(USE_MKLDNN), 1) CFLAGS += -DMXNET_USE_MKLDNN=1 CFLAGS += -I$(ROOTDIR)/src/operator/nn/mkldnn/ CFLAGS += -I$(MKLDNNROOT)/include - LDFLAGS += -L$(MKLDNNROOT)/lib -L$(MKLDNNROOT)/lib64 -lmkldnn -Wl,-rpath,'$${ORIGIN}' + LIB_DEP += $(MKLDNNROOT)/lib/libmkldnn.a endif # setup opencv @@ -595,11 +595,6 @@ lib/libmxnet.so: $(ALLX_DEP) @mkdir -p $(@D) $(CXX) $(CFLAGS) -shared -o $@ $(filter-out %libnnvm.a, $(filter %.o %.a, $^)) $(LDFLAGS) \ -Wl,${WHOLE_ARCH} $(filter %libnnvm.a, $^) -Wl,${NO_WHOLE_ARCH} -ifeq ($(USE_MKLDNN), 1) -ifeq ($(UNAME_S), Darwin) - install_name_tool -change '@rpath/libmkldnn.1.dylib' '@loader_path/libmkldnn.1.dylib' $@ -endif -endif $(PS_PATH)/build/libps.a: PSLITE @@ -689,10 +684,6 @@ rpkg: cp src/io/image_recordio.h R-package/src cp -rf lib/libmxnet.so R-package/inst/libs - if [ -e "lib/libmkldnn.so.1" ]; then \ - cp -rf lib/libmkldnn.so.1 R-package/inst/libs; \ - fi - if [ -e "lib/libtvm_runtime.so" ]; then \ cp -rf lib/libtvm_runtime.so R-package/inst/libs; \ fi diff --git a/cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy b/cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy index af68314cacf5..6a51b69cfe50 100644 --- a/cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy +++ b/cd/mxnet_lib/dynamic/Jenkins_pipeline.groovy @@ -30,7 +30,6 @@ licenses = 'licenses/*' // libmxnet dependencies mx_deps = '' -mx_mkldnn_deps = 'lib/libmkldnn.so.1' // library type // either static or dynamic - depending on how it links to its dependencies diff --git a/cd/mxnet_lib/static/Jenkins_pipeline.groovy b/cd/mxnet_lib/static/Jenkins_pipeline.groovy index ac2e45071d15..470bef703613 100644 --- a/cd/mxnet_lib/static/Jenkins_pipeline.groovy +++ b/cd/mxnet_lib/static/Jenkins_pipeline.groovy @@ -31,7 +31,7 @@ licenses = 'licenses/*' // libmxnet dependencies mx_deps = 'lib/libgfortran.so.3, lib/libquadmath.so.0' -mx_mkldnn_deps = 'lib/libgfortran.so.3, lib/libquadmath.so.0, lib/libmkldnn.so.1, 3rdparty/mkldnn/build/install/include/mkldnn_version.h' +mx_mkldnn_deps = 'lib/libgfortran.so.3, lib/libquadmath.so.0, 3rdparty/mkldnn/build/install/include/mkldnn_version.h' // library type // either static or dynamic - depending on how it links to its dependencies diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh index 581bb2fd5280..78d541e0ad5f 100755 --- a/ci/docker/runtime_functions.sh +++ b/ci/docker/runtime_functions.sh @@ -878,9 +878,6 @@ build_ubuntu_gpu_cmake_mkldnn() { /work/mxnet ninja -v - # libmkldnn.so.1 is a link file. We need an actual binary file named libmkldnn.so.1. - cp 3rdparty/mkldnn/src/libmkldnn.so.1 3rdparty/mkldnn/src/libmkldnn.so.1.tmp - mv 3rdparty/mkldnn/src/libmkldnn.so.1.tmp 3rdparty/mkldnn/src/libmkldnn.so.1 } build_ubuntu_gpu_cmake() { diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy index 0770320f1407..81479328f054 100644 --- a/ci/jenkins/Jenkins_steps.groovy +++ b/ci/jenkins/Jenkins_steps.groovy @@ -35,8 +35,8 @@ mx_cmake_lib_no_tvm_op = 'build/libmxnet.so, build/libmxnet.a, build/libsample_l mx_cmake_lib_cython = 'build/libmxnet.so, build/libmxnet.a, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/dmlc-core/libdmlc.a, build/tests/mxnet_unit_tests, build/3rdparty/openmp/runtime/src/libomp.so, python/mxnet/_cy2/*.so, python/mxnet/_cy3/*.so' // mxnet cmake libraries, in cmake builds we do not produce a libnvvm static library by default. mx_cmake_lib_debug = 'build/libmxnet.so, build/libmxnet.a, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/libsample_lib.so, build/3rdparty/dmlc-core/libdmlc.a, build/tests/mxnet_unit_tests' -mx_cmake_mkldnn_lib = 'build/libmxnet.so, build/libmxnet.a, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/dmlc-core/libdmlc.a, build/tests/mxnet_unit_tests, build/3rdparty/openmp/runtime/src/libomp.so, build/3rdparty/mkldnn/src/libmkldnn.so.1' -mx_mkldnn_lib = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, libsample_lib.so, lib/libmkldnn.so.1, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a' +mx_cmake_mkldnn_lib = 'build/libmxnet.so, build/libmxnet.a, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, build/3rdparty/dmlc-core/libdmlc.a, build/tests/mxnet_unit_tests, build/3rdparty/openmp/runtime/src/libomp.so' +mx_mkldnn_lib = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, libsample_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a' mx_tensorrt_lib = 'build/libmxnet.so, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/tvmop.conf, lib/libnvonnxparser_runtime.so.0, lib/libnvonnxparser.so.0, lib/libonnx_proto.so, lib/libonnx.so' mx_lib_cpp_examples = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, lib/tvmop.conf, libsample_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, 3rdparty/ps-lite/build/libps.a, deps/lib/libprotobuf-lite.a, deps/lib/libzmq.a, build/cpp-package/example/*, python/mxnet/_cy2/*.so, python/mxnet/_cy3/*.so' mx_lib_cpp_examples_no_tvm_op = 'lib/libmxnet.so, lib/libmxnet.a, libsample_lib.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, 3rdparty/ps-lite/build/libps.a, deps/lib/libprotobuf-lite.a, deps/lib/libzmq.a, build/cpp-package/example/*, python/mxnet/_cy2/*.so, python/mxnet/_cy3/*.so' diff --git a/mkldnn.mk b/mkldnn.mk index aa92108e33b0..85d2411ade3d 100644 --- a/mkldnn.mk +++ b/mkldnn.mk @@ -20,11 +20,7 @@ ifeq ($(USE_MKLDNN), 1) MKLDNN_BUILDDIR = $(MKLDNN_SUBMODDIR)/build MXNET_LIBDIR = $(ROOTDIR)/lib MXNET_INCLDIR = $(ROOTDIR)/include -ifeq ($(UNAME_S), Darwin) - MKLDNN_LIBFILE = $(MKLDNNROOT)/lib/libmkldnn.1.dylib -else - MKLDNN_LIBFILE = $(MKLDNNROOT)/lib/libmkldnn.so.1 -endif + MKLDNN_LIBFILE = $(MKLDNNROOT)/lib/libmkldnn.a endif .PHONY: mkldnn mkldnn_clean @@ -33,11 +29,17 @@ mkldnn_build: $(MKLDNN_LIBFILE) $(MKLDNN_LIBFILE): mkdir -p $(MKLDNNROOT)/lib - cmake $(MKLDNN_SUBMODDIR) -DCMAKE_INSTALL_PREFIX=$(MKLDNNROOT) -DCMAKE_INSTALL_LIBDIR=lib -B$(MKLDNN_BUILDDIR) -DMKLDNN_ARCH_OPT_FLAGS="" -DMKLDNN_BUILD_TESTS=OFF -DMKLDNN_BUILD_EXAMPLES=OFF -DMKLDNN_ENABLE_JIT_PROFILING=OFF + cmake $(MKLDNN_SUBMODDIR) \ + -DCMAKE_INSTALL_PREFIX=$(MKLDNNROOT) \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -B$(MKLDNN_BUILDDIR) \ + -DMKLDNN_ARCH_OPT_FLAGS="" \ + -DMKLDNN_BUILD_TESTS=OFF \ + -DMKLDNN_BUILD_EXAMPLES=OFF \ + -DMKLDNN_ENABLE_JIT_PROFILING=OFF \ + -DMKLDNN_LIBRARY_TYPE=STATIC $(MAKE) -C $(MKLDNN_BUILDDIR) VERBOSE=1 $(MAKE) -C $(MKLDNN_BUILDDIR) install - mkdir -p $(MXNET_LIBDIR) - cp $(MKLDNN_LIBFILE) $(MXNET_LIBDIR) cp $(MKLDNN_BUILDDIR)/include/mkldnn_version.h $(MXNET_INCLDIR)/mkldnn/. mkldnn_clean: diff --git a/scala-package/assembly/src/main/assembly/assembly.xml b/scala-package/assembly/src/main/assembly/assembly.xml index 060a97b82064..6b8480c53f8f 100644 --- a/scala-package/assembly/src/main/assembly/assembly.xml +++ b/scala-package/assembly/src/main/assembly/assembly.xml @@ -57,8 +57,6 @@ libtvm_runtime.so libgfortran.so.3 libquadmath.so.0 - libmkldnn.so.1 - libmkldnn.1.dylib lib/native diff --git a/scala-package/core/src/main/scala/org/apache/mxnet/util/NativeLibraryLoader.scala b/scala-package/core/src/main/scala/org/apache/mxnet/util/NativeLibraryLoader.scala index 49e5d685adfe..4b03fd2ef82f 100644 --- a/scala-package/core/src/main/scala/org/apache/mxnet/util/NativeLibraryLoader.scala +++ b/scala-package/core/src/main/scala/org/apache/mxnet/util/NativeLibraryLoader.scala @@ -89,8 +89,6 @@ private[mxnet] object NativeLibraryLoader { saveLibraryToTemp("libtvm_runtime.so", "/lib/native/libtvm_runtime.so", false) saveLibraryToTemp("libgfortran.so.3", "/lib/native/libgfortran.so.3", false) saveLibraryToTemp("libquadmath.so.0", "/lib/native/libquadmath.so.0", false) - saveLibraryToTemp("libmkldnn.so.1", "/lib/native/libmkldnn.so.1", false) - saveLibraryToTemp("libmkldnn.1.dylib", "/lib/native/libmkldnn.1.dylib", false) val tempfile: File = saveLibraryToTemp(libname, libFileInJar, true) loadLibraryFromFile(libname, tempfile) diff --git a/tests/nightly/JenkinsfileForBinaries b/tests/nightly/JenkinsfileForBinaries index 48db4457c1ac..a7fcee622aff 100755 --- a/tests/nightly/JenkinsfileForBinaries +++ b/tests/nightly/JenkinsfileForBinaries @@ -20,7 +20,7 @@ mx_lib = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a' mx_cmake_lib = 'build/libmxnet.so, build/libmxnet.a, build/3rdparty/tvm/libtvm_runtime.so, build/libtvmop.so, build/3rdparty/dmlc-core/libdmlc.a, build/tests/mxnet_unit_tests, build/3rdparty/openmp/runtime/src/libomp.so' -mx_lib_cpp_example_mkl = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, build/cpp-package/example/imagenet_inference, lib/libmkldnn.so.1' +mx_lib_cpp_example_mkl = 'lib/libmxnet.so, lib/libmxnet.a, lib/libtvm_runtime.so, lib/libtvmop.so, 3rdparty/dmlc-core/libdmlc.a, 3rdparty/tvm/nnvm/lib/libnnvm.a, build/cpp-package/example/imagenet_inference' node('utility') { // Loading the utilities requires a node context unfortunately diff --git a/tools/pip/setup.py b/tools/pip/setup.py index dd430f5a6f87..f1d3a38d40e7 100644 --- a/tools/pip/setup.py +++ b/tools/pip/setup.py @@ -147,11 +147,6 @@ def has_ext_modules(self): 'dmlc_tracker': []} if variant.endswith('MKL'): if platform.system() == 'Darwin': - shutil.copy(os.path.join(os.path.dirname(LIB_PATH[0]), 'libmkldnn.1.dylib'), os.path.join(CURRENT_DIR, 'mxnet')) - package_data['mxnet'].append('mxnet/libmkldnn.1.dylib') - else: - shutil.copy(os.path.join(os.path.dirname(LIB_PATH[0]), 'libmkldnn.so.1'), os.path.join(CURRENT_DIR, 'mxnet')) - package_data['mxnet'].append('mxnet/libmkldnn.so.1') shutil.copytree(os.path.join(CURRENT_DIR, 'mxnet-build/3rdparty/mkldnn/build/install/include'), os.path.join(CURRENT_DIR, 'mxnet/include/mkldnn')) if platform.system() == 'Linux': diff --git a/tools/staticbuild/build_lib.sh b/tools/staticbuild/build_lib.sh index 4a82b80d00ba..4935d67b9316 100755 --- a/tools/staticbuild/build_lib.sh +++ b/tools/staticbuild/build_lib.sh @@ -34,16 +34,7 @@ $MAKE DEPS_PATH=$DEPS_PATH $PWD/3rdparty/tvm/nnvm/lib/libnnvm.a $MAKE DEPS_PATH=$DEPS_PATH PSLITE if [[ $VARIANT == *mkl ]]; then - if [[ $PLATFORM == 'linux' ]]; then - MKLDNN_LIBFILE='libmkldnn.so.1' - else - MKLDNN_LIBFILE='libmkldnn.1.dylib' - fi $MAKE DEPS_PATH=$DEPS_PATH mkldnn - if [ ! -d lib ]; then - mkdir lib - fi - cp 3rdparty/mkldnn/build/install/lib/$MKLDNN_LIBFILE lib fi >&2 echo "Now building mxnet..." From d97a3345f1124b14f0f39fe15f29d3ebbe23fca0 Mon Sep 17 00:00:00 2001 From: Tao Lv Date: Wed, 6 Nov 2019 16:38:57 +0800 Subject: [PATCH 2/4] MSVC build --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f334b415427..4e808094dd96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -258,8 +258,8 @@ endif() if(USE_MKLDNN) # CPU architecture (e.g., C5) can't run on another architecture (e.g., g3). if(MSVC) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHsc") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /Gy") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /EHsc /MT") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /EHsc /Gy /MT") endif() set(MKLDNN_BUILD_TESTS OFF CACHE INTERNAL "" FORCE) From 340fa92b273c551a2bad7b3a80ffe041626adea0 Mon Sep 17 00:00:00 2001 From: Tao Lv Date: Thu, 7 Nov 2019 18:37:29 +0800 Subject: [PATCH 3/4] check USE_OPENMP --- mkldnn.mk | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/mkldnn.mk b/mkldnn.mk index 85d2411ade3d..4f4afb555e39 100644 --- a/mkldnn.mk +++ b/mkldnn.mk @@ -23,21 +23,30 @@ ifeq ($(USE_MKLDNN), 1) MKLDNN_LIBFILE = $(MKLDNNROOT)/lib/libmkldnn.a endif +mkldnn_FLAGS = -DCMAKE_INSTALL_PREFIX=$(MKLDNNROOT) +mkldnn_FLAGS += -DCMAKE_INSTALL_LIBDIR=lib +mkldnn_FLAGS += -B$(MKLDNN_BUILDDIR) +mkldnn_FLAGS += -DMKLDNN_ARCH_OPT_FLAGS="" +mkldnn_FLAGS += -DMKLDNN_BUILD_TESTS=OFF +mkldnn_FLAGS += -DMKLDNN_BUILD_EXAMPLES=OFF +mkldnn_FLAGS += -DMKLDNN_ENABLE_JIT_PROFILING=OFF +mkldnn_FLAGS += -DMKLDNN_LIBRARY_TYPE=STATIC + +ifneq ($(USE_OPENMP), 1) + mkldnn_FLAGS += -DMKLDNN_CPU_RUNTIME=SEQ +endif + +ifeq ($(DEBUG), 1) + mkldnn_FLAGS += -DCMAKE_BUILD_TYPE=Debug +endif + .PHONY: mkldnn mkldnn_clean mkldnn_build: $(MKLDNN_LIBFILE) $(MKLDNN_LIBFILE): mkdir -p $(MKLDNNROOT)/lib - cmake $(MKLDNN_SUBMODDIR) \ - -DCMAKE_INSTALL_PREFIX=$(MKLDNNROOT) \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -B$(MKLDNN_BUILDDIR) \ - -DMKLDNN_ARCH_OPT_FLAGS="" \ - -DMKLDNN_BUILD_TESTS=OFF \ - -DMKLDNN_BUILD_EXAMPLES=OFF \ - -DMKLDNN_ENABLE_JIT_PROFILING=OFF \ - -DMKLDNN_LIBRARY_TYPE=STATIC + cmake $(MKLDNN_SUBMODDIR) $(mkldnn_FLAGS) $(MAKE) -C $(MKLDNN_BUILDDIR) VERBOSE=1 $(MAKE) -C $(MKLDNN_BUILDDIR) install cp $(MKLDNN_BUILDDIR)/include/mkldnn_version.h $(MXNET_INCLDIR)/mkldnn/. From 936aef1f2213ce67f55459b52b842cd730947503 Mon Sep 17 00:00:00 2001 From: Tao Lv Date: Fri, 8 Nov 2019 00:45:02 +0800 Subject: [PATCH 4/4] remove the test of mkldnn.so installation --- tests/python/mkl/test_mkldnn.py | 4 +- tests/python/mkl/test_mkldnn_install.py | 56 ------------------------- 2 files changed, 2 insertions(+), 58 deletions(-) delete mode 100644 tests/python/mkl/test_mkldnn_install.py diff --git a/tests/python/mkl/test_mkldnn.py b/tests/python/mkl/test_mkldnn.py index e43daf12c464..6424990d254d 100644 --- a/tests/python/mkl/test_mkldnn.py +++ b/tests/python/mkl/test_mkldnn.py @@ -28,7 +28,6 @@ from mxnet import gluon from mxnet.gluon import nn from mxnet.test_utils import * -import test_mkldnn_install as install curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) sys.path.append(os.path.join(curr_path, '../unittest/')) from common import with_seed @@ -637,4 +636,5 @@ def check_elemwise_add_training(stype): check_elemwise_add_training(stype) if __name__ == '__main__': - install.test_mkldnn_install() + import nose + nose.runmodule() diff --git a/tests/python/mkl/test_mkldnn_install.py b/tests/python/mkl/test_mkldnn_install.py deleted file mode 100644 index c2f26df72f2e..000000000000 --- a/tests/python/mkl/test_mkldnn_install.py +++ /dev/null @@ -1,56 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -""" -MKL-DNN related test cases -""" - -import sys -import os -import logging - - -def test_mkldnn_install(): - """ - This test will verify that MXNet is built/installed correctly when - compiled with Intel MKL-DNN library. The method will try to import - the mxnet module and see if the mkldnn library is mapped to this - process's address space. - """ - logging.basicConfig(level=logging.INFO) - - if not sys.platform.startswith('linux'): - logging.info("Bypass mkldnn install test for non-Linux OS") - return - - try: - #pylint: disable=unused-variable - import mxnet as mx - except (ImportError, OSError) as e: - assert 0, "Import mxnet error: %s. Please double check your build/" \ - "install steps or environment variable settings" % str(e) - - pid = os.getpid() - rc = os.system("cat /proc/" + str(pid) + - "/maps | grep libmkldnn > /dev/null") - - if rc == 0: - logging.info("MXNet is built/installed correctly with MKL-DNN") - else: - assert 0, "MXNet is built/installed incorrectly with MKL-DNN, please " \ - "double check your build/install steps or environment " \ - "variable settings"