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

zhasheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git


The following commit(s) were added to refs/heads/master by this push:
     new 3801f97  [CI] fix debug build (#18240)
3801f97 is described below

commit 3801f9730a8c0ef4cd7679091d06f326f02b9861
Author: Sheng Zha <[email protected]>
AuthorDate: Wed May 6 10:45:34 2020 -0700

    [CI] fix debug build (#18240)
    
    * reverse control in jenkins steps, add debug gpu build test
    
    * try enabling gluon rnn cell tests on gpu
    
    * add faulthandler timeout
---
 CMakeLists.txt                              |   1 -
 ci/docker/runtime_functions.sh              |  17 ++
 ci/jenkins/Jenkins_steps.groovy             | 370 +++++++++++++++-------------
 ci/jenkins/Jenkinsfile_centos_cpu           |  16 +-
 ci/jenkins/Jenkinsfile_centos_gpu           |   8 +-
 ci/jenkins/Jenkinsfile_edge                 |  10 +-
 ci/jenkins/Jenkinsfile_miscellaneous        |  10 +-
 ci/jenkins/Jenkinsfile_tools                |   2 +-
 ci/jenkins/Jenkinsfile_unix_cpu             |  53 ++--
 ci/jenkins/Jenkinsfile_unix_gpu             |  45 ++--
 ci/jenkins/Jenkinsfile_website_beta         |   4 +-
 ci/jenkins/Jenkinsfile_website_c_docs       |   6 +-
 ci/jenkins/Jenkinsfile_website_clojure_docs |   6 +-
 ci/jenkins/Jenkinsfile_website_full         |  16 +-
 ci/jenkins/Jenkinsfile_website_full_pr      |  16 +-
 ci/jenkins/Jenkinsfile_website_java_docs    |   6 +-
 ci/jenkins/Jenkinsfile_website_jekyll_docs  |   1 -
 ci/jenkins/Jenkinsfile_website_julia_docs   |   6 +-
 ci/jenkins/Jenkinsfile_website_mxnet_build  |   2 +-
 ci/jenkins/Jenkinsfile_website_nightly      |  16 +-
 ci/jenkins/Jenkinsfile_website_python_docs  |   7 +-
 ci/jenkins/Jenkinsfile_website_r_docs       |   4 +-
 ci/jenkins/Jenkinsfile_website_scala_docs   |   6 +-
 ci/jenkins/Jenkinsfile_windows_cpu          |  14 +-
 ci/jenkins/Jenkinsfile_windows_gpu          |   8 +-
 pytest.ini                                  |   1 +
 src/operator/nn/batch_norm.cu               |  20 +-
 tests/python/unittest/test_gluon_rnn.py     |   4 -
 28 files changed, 348 insertions(+), 327 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d8d6952..47b0b25 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -168,7 +168,6 @@ else()
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_ASSERTIONS")
   elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
-    add_definitions(-DNDEBUG=1)
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -g")
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_ASSERTIONS")
   else()
diff --git a/ci/docker/runtime_functions.sh b/ci/docker/runtime_functions.sh
index 2155723..47b3877 100755
--- a/ci/docker/runtime_functions.sh
+++ b/ci/docker/runtime_functions.sh
@@ -761,6 +761,23 @@ build_ubuntu_gpu_cuda101_cudnn7() {
     ninja
 }
 
+build_ubuntu_gpu_cuda101_cudnn7_debug() {
+    set -ex
+    cd /work/build
+    CC=gcc-7 CXX=g++-7 cmake \
+        -DCMAKE_BUILD_TYPE=Debug \
+        -DUSE_MKL_IF_AVAILABLE=OFF \
+        -DUSE_CUDA=ON \
+        -DMXNET_CUDA_ARCH="$CI_CMAKE_CUDA_ARCH" \
+        -DUSE_CUDNN=ON \
+        -DUSE_MKLDNN=OFF \
+        -DUSE_CPP_PACKAGE=ON \
+        -DUSE_DIST_KVSTORE=ON \
+        -DBUILD_CYTHON_MODULES=ON \
+        -G Ninja /work/mxnet
+    ninja
+}
+
 build_ubuntu_gpu_cuda101_cudnn7_make() {
     set -ex
     export CC=gcc-7
diff --git a/ci/jenkins/Jenkins_steps.groovy b/ci/jenkins/Jenkins_steps.groovy
index 56c7e2f..204567d 100644
--- a/ci/jenkins/Jenkins_steps.groovy
+++ b/ci/jenkins/Jenkins_steps.groovy
@@ -80,278 +80,294 @@ def python3_gpu_ut_cython(docker_container_name) {
 
 
//------------------------------------------------------------------------------------------
 
-def compile_unix_cpu_openblas() {
+def compile_unix_cpu_openblas(lib_name) {
     return ['CPU: Openblas': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-openblas') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_openblas', false)
-            utils.pack_lib('cpu', mx_lib_cython, true)
+            utils.pack_lib(lib_name, mx_lib_cython, true)
           }
         }
       }
     }]
 }
 
-def compile_unix_cpu_openblas_make() {
+def compile_unix_cpu_openblas_make(lib_name) {
     return ['CPU: Openblas Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-openblas') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_openblas_make', 
false)
-            utils.pack_lib('cpu_make', mx_lib_make)
+            utils.pack_lib(lib_name, mx_lib_make)
           }
         }
       }
     }]
 }
 
-def compile_unix_openblas_debug_cpu() {
+def compile_unix_openblas_debug_cpu(lib_name) {
     return ['CPU: Openblas, cmake, debug': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-openblas') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_cmake_debug', 
false)
-            utils.pack_lib('cpu_debug', mx_cmake_lib_debug, true)
+            utils.pack_lib(lib_name, mx_cmake_lib_debug, true)
           }
         }
       }
     }]
 }
 
-def compile_unix_openblas_cpu_no_tvm_op() {
+def compile_unix_openblas_cpu_no_tvm_op(lib_name) {
     return ['CPU: Openblas, cmake, TVM_OP OFF': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-openblas-no-tvm-op') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_cmake_no_tvm_op', 
false)
-            utils.pack_lib('cpu_openblas_no_tvm_op', mx_cmake_lib_no_tvm_op)
+            utils.pack_lib(lib_name, mx_cmake_lib_no_tvm_op)
           }
         }
       }
     }]
 }
 
-def compile_unix_int64_cpu() {
+def compile_unix_int64_cpu(lib_name) {
     return ['CPU: USE_INT64_TENSOR_SIZE': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-int64') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
-            utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_large_tensor', 
false)
+            utils.docker_run(lib_name, 'build_ubuntu_cpu_large_tensor', false)
           }
         }
       }
     }]
 }
 
-def compile_unix_int64_gpu() {
+def compile_unix_int64_gpu(lib_name) {
     return ['GPU: USE_INT64_TENSOR_SIZE': {
       node(NODE_LINUX_GPU) {
         ws('workspace/build-gpu-int64') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_gpu_cu101', 
'build_ubuntu_gpu_large_tensor', false)
-            utils.pack_lib('ubuntu_gpu_int64', mx_cmake_lib)
+            utils.pack_lib(lib_name, mx_cmake_lib)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkl_cpu() {
+def compile_unix_mkl_cpu(lib_name) {
     return ['CPU: MKL': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-mkl') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_mkl', false)
-            utils.pack_lib('cpu_mkl', mx_lib, true)
+            utils.pack_lib(lib_name, mx_lib, true)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkldnn_cpu() {
+def compile_unix_mkldnn_cpu(lib_name) {
     return ['CPU: MKLDNN': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-mkldnn-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_mkldnn', false)
-            utils.pack_lib('mkldnn_cpu', mx_mkldnn_lib, true)
+            utils.pack_lib(lib_name, mx_mkldnn_lib, true)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkldnn_cpu_make() {
+def compile_unix_mkldnn_cpu_make(lib_name) {
     return ['CPU: MKLDNN Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-mkldnn-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_mkldnn_make', 
false)
-            utils.pack_lib('mkldnn_cpu_make', mx_mkldnn_lib_make)
+            utils.pack_lib(lib_name, mx_mkldnn_lib_make)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkldnn_mkl_cpu() {
+def compile_unix_mkldnn_mkl_cpu(lib_name) {
     return ['CPU: MKLDNN_MKL': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-mkldnn-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_mkldnn_mkl', 
false)
-            utils.pack_lib('mkldnn_mkl_cpu', mx_mkldnn_lib, true)
+            utils.pack_lib(lib_name, mx_mkldnn_lib, true)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkldnn_gpu() {
+def compile_unix_mkldnn_gpu(lib_name) {
     return ['GPU: MKLDNN': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-mkldnn-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_build_cuda', 'build_ubuntu_gpu_mkldnn', 
false)
-            utils.pack_lib('mkldnn_gpu', mx_mkldnn_lib)
+            utils.pack_lib(lib_name, mx_mkldnn_lib)
           }
         }
       }
     }]
 }
 
-def compile_unix_mkldnn_nocudnn_gpu() {
+def compile_unix_mkldnn_nocudnn_gpu(lib_name) {
     return ['GPU: MKLDNN_CUDNNOFF': {
        node(NODE_LINUX_CPU) {
          ws('workspace/build-mkldnn-gpu-nocudnn') {
            timeout(time: max_time, unit: 'MINUTES') {
              utils.init_git()
              utils.docker_run('ubuntu_build_cuda', 
'build_ubuntu_gpu_mkldnn_nocudnn', false)
-             utils.pack_lib('mkldnn_gpu_nocudnn', mx_mkldnn_lib)
+             utils.pack_lib(lib_name, mx_mkldnn_lib)
            }
          }
        }
     }]
 }
 
-def compile_unix_full_gpu() {
+def compile_unix_full_gpu(lib_name) {
     return ['GPU: CUDA10.1+cuDNN7': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_build_cuda', 
'build_ubuntu_gpu_cuda101_cudnn7', false)
-            utils.pack_lib('gpu', mx_lib_cpp_examples)
+            utils.pack_lib(lib_name, mx_lib_cpp_examples)
           }
         }
       }
     }]
 }
 
-def compile_unix_full_gpu_make() {
+def compile_unix_full_gpu_make(lib_name) {
     return ['GPU: CUDA10.1+cuDNN7 Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_build_cuda', 
'build_ubuntu_gpu_cuda101_cudnn7_make', false)
-            utils.pack_lib('gpu_make', mx_lib_cpp_examples_make)
+            utils.pack_lib(lib_name, mx_lib_cpp_examples_make)
           }
         }
       }
     }]
 }
 
-def compile_unix_full_gpu_mkldnn_cpp_test() {
+
+def compile_unix_full_gpu_debug(lib_name) {
+    return ['GPU: CUDA10.1+cuDNN7, debug': {
+      node(NODE_LINUX_CPU) {
+        ws('workspace/build-gpu') {
+          timeout(time: max_time, unit: 'MINUTES') {
+            utils.init_git()
+            utils.docker_run('ubuntu_build_cuda', 
'build_ubuntu_gpu_cuda101_cudnn7_debug', false)
+            utils.pack_lib(lib_name, mx_lib_cpp_examples)
+          }
+        }
+      }
+    }]
+}
+
+def compile_unix_full_gpu_mkldnn_cpp_test(lib_name) {
     return ['GPU: CUDA10.1+cuDNN7+MKLDNN+CPPTEST Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-gpu-mkldnn-cpp') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_build_cuda', 
'build_ubuntu_gpu_cuda101_cudnn7_mkldnn_cpp_test', false)
-            utils.pack_lib('gpu_mkldnn_cpp_test_make', mx_lib_cpp_capi_make)
+            utils.pack_lib(lib_name, mx_lib_cpp_capi_make)
           }
         }
       }
     }]
 }
 
-def compile_unix_cmake_gpu() {
+def compile_unix_cmake_gpu(lib_name) {
     return ['GPU: CMake': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cmake-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_gpu_cu101', 'build_ubuntu_gpu_cmake', 
false)
-            utils.pack_lib('cmake_gpu', mx_cmake_lib_cython)
+            utils.pack_lib(lib_name, mx_cmake_lib_cython)
           }
         }
       }
     }]
 }
 
-def compile_unix_cmake_gpu_no_rtc() {
+def compile_unix_cmake_gpu_no_rtc(lib_name) {
     return ['GPU: CMake CUDA RTC OFF': {
-        node(NODE_LINUX_CPU) {
-            ws('workspace/build-cmake-gpu-no-rtc') {
-                timeout(time: max_time, unit: 'MINUTES') {
-                    utils.init_git()
-                    utils.docker_run('ubuntu_gpu_cu101', 
'build_ubuntu_gpu_cmake_no_rtc', false)
-                }
-            }
+      node(NODE_LINUX_CPU) {
+        ws('workspace/build-cmake-gpu-no-rtc') {
+          timeout(time: max_time, unit: 'MINUTES') {
+            utils.init_git()
+            utils.docker_run('ubuntu_gpu_cu101', 
'build_ubuntu_gpu_cmake_no_rtc', false)
+            utils.pack_lib(lib_name, mx_cmake_lib)
+          }
         }
+      }
     }]
 }
 
-def compile_unix_tensorrt_gpu() {
+def compile_unix_tensorrt_gpu(lib_name) {
     return ['TensorRT': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-tensorrt') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_gpu_tensorrt', 
'build_ubuntu_gpu_tensorrt', false)
-            utils.pack_lib('tensorrt', mx_tensorrt_lib)
+            utils.pack_lib(lib_name, mx_tensorrt_lib)
           }
         }
       }
     }]
 }
 
-def compile_centos7_cpu() {
+def compile_centos7_cpu(lib_name) {
     return ['CPU: CentOS 7': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-centos7-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('centos7_cpu', 'build_centos7_cpu', false)
-            utils.pack_lib('centos7_cpu', mx_lib, true)
+            utils.pack_lib(lib_name, mx_lib, true)
           }
         }
       }
     }]
 }
 
-def compile_centos7_cpu_make() {
+def compile_centos7_cpu_make(lib_name) {
     return ['CPU: CentOS 7 Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-centos7-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('centos7_cpu', 'build_centos7_cpu_make', false)
-            utils.pack_lib('centos7_cpu_make', mx_lib_make)
+            utils.pack_lib(lib_name, mx_lib_make)
           }
         }
       }
@@ -371,14 +387,14 @@ def compile_centos7_cpu_mkldnn() {
     }]
 }
 
-def compile_centos7_gpu() {
+def compile_centos7_gpu(lib_name) {
     return ['GPU: CentOS 7': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-centos7-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('centos7_gpu_cu92', 'build_centos7_gpu', false)
-            utils.pack_lib('centos7_gpu', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
@@ -465,42 +481,42 @@ def compile_armv8_jetson_gpu() {
     }]
 }
 
-def compile_armv6_cpu() {
+def compile_armv6_cpu(lib_name) {
     return ['ARMv6':{
       node(NODE_LINUX_CPU) {
         ws('workspace/build-ARMv6') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('armv6', 'build_armv6', false)
-            utils.pack_lib('armv6', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
     }]
 }
 
-def compile_armv7_cpu() {
+def compile_armv7_cpu(lib_name) {
     return ['ARMv7':{
       node(NODE_LINUX_CPU) {
         ws('workspace/build-ARMv7') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('armv7', 'build_armv7', false)
-            utils.pack_lib('armv7', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
     }]
 }
 
-def compile_armv8_cpu() {
+def compile_armv8_cpu(lib_name) {
     return ['ARMv8':{
       node(NODE_LINUX_CPU) {
         ws('workspace/build-ARMv8') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('armv8', 'build_armv8', false)
-            utils.pack_lib('armv8', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
@@ -533,56 +549,56 @@ def compile_armv7_android_cpu() {
     }]
 }
 
-def compile_unix_asan_cpu() {
+def compile_unix_asan_cpu(lib_name) {
     return ['CPU: ASAN': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-asan') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_cmake_asan', 
false)
-            utils.pack_lib('cpu_asan', mx_lib_cpp_examples_cpu)
+            utils.pack_lib(lib_name, mx_lib_cpp_examples_cpu)
           }
         }
       }
     }]
 }
 
-def compile_unix_gcc8_werror() {
+def compile_unix_gcc8_werror(lib_name) {
     return ['CPU: GCC8 -WError': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-gcc8') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_gcc8_werror', 
false)
-            utils.pack_lib('cpu_gcc8', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
     }]
 }
 
-def compile_unix_clang10_werror() {
+def compile_unix_clang10_werror(lib_name) {
     return ['CPU: Clang10 -WError': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-clang10') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu', 'build_ubuntu_cpu_clang10_werror', 
false)
-            utils.pack_lib('cpu_clang10', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
     }]
 }
 
-def compile_unix_clang10_cuda_werror() {
+def compile_unix_clang10_cuda_werror(lib_name) {
     return ['GPU: Clang10 -WError': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-cpu-clang10') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_gpu_cu101', 
'build_ubuntu_gpu_clang10_werror', false)
-            utils.pack_lib('gpu_clang10', mx_lib)
+            utils.pack_lib(lib_name, mx_lib)
           }
         }
       }
@@ -615,91 +631,91 @@ def compile_unix_amalgamation() {
     }]
 }
 
-def compile_windows_cpu() {
+def compile_windows_cpu(lib_name) {
     return ['Build CPU windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
             powershell 'py -3 ci/build_windows.py -f WIN_CPU'
-            stash includes: 'windows_package.7z', name: 'windows_package_cpu'
+            stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def compile_windows_cpu_mkldnn() {
+def compile_windows_cpu_mkldnn(lib_name) {
     return ['Build CPU MKLDNN windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-cpu-mkldnn') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
             powershell 'py -3 ci/build_windows.py -f WIN_CPU_MKLDNN'
-            stash includes: 'windows_package.7z', name: 
'windows_package_cpu_mkldnn'
+            stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def compile_windows_cpu_mkldnn_mkl() {
+def compile_windows_cpu_mkldnn_mkl(lib_name) {
     return ['Build CPU MKLDNN MKL windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-cpu-mkldnn-mkl') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
             powershell 'py -3 ci/build_windows.py -f WIN_CPU_MKLDNN_MKL'
-            stash includes: 'windows_package.7z', name: 
'windows_package_cpu_mkldnn_mkl'
+            stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def compile_windows_cpu_mkl() {
+def compile_windows_cpu_mkl(lib_name) {
     return ['Build CPU MKL windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-cpu-mkl') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
             powershell 'py -3 ci/build_windows.py -f WIN_CPU_MKL'
-            stash includes: 'windows_package.7z', name: 
'windows_package_cpu_mkl'
+            stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def compile_windows_gpu() {
+def compile_windows_gpu(lib_name) {
     return ['Build GPU windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
               utils.init_git_win()
               powershell 'py -3 ci/build_windows.py -f WIN_GPU'
-              stash includes: 'windows_package.7z', name: 'windows_package_gpu'
+              stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def compile_windows_gpu_mkldnn() {
+def compile_windows_gpu_mkldnn(lib_name) {
     return ['Build GPU MKLDNN windows':{
       node(NODE_WINDOWS_CPU) {
         ws('workspace/build-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
             powershell 'py -3 ci/build_windows.py -f WIN_GPU_MKLDNN'
-            stash includes: 'windows_package.7z', name: 
'windows_package_gpu_mkldnn'
+            stash includes: 'windows_package.7z', name: lib_name
           }
         }
       }
     }]
 }
 
-def test_static_scala_cpu() {
+def compile_static_scala_cpu() {
   return ['Static build CPU CentOS7 Scala' : {
     node(NODE_LINUX_CPU) {
         ws('workspace/ut-publish-scala-cpu') {
@@ -712,7 +728,7 @@ def test_static_scala_cpu() {
   }]
 }
 
-def test_static_python_cpu() {
+def compile_static_python_cpu() {
   return ['Static build CPU CentOS7 Python' : {
     node(NODE_LINUX_CPU) {
         ws('workspace/ut-publish-python-cpu') {
@@ -725,7 +741,7 @@ def test_static_python_cpu() {
   }]
 }
 
-def test_static_python_cpu_cmake() {
+def compile_static_python_cpu_cmake() {
   return ['Static build CPU CentOS7 Python with CMake' : {
     node(NODE_LINUX_CPU) {
         ws('workspace/ut-publish-python-cpu') {
@@ -738,7 +754,7 @@ def test_static_python_cpu_cmake() {
   }]
 }
 
-def test_static_python_gpu() {
+def compile_static_python_gpu() {
   return ['Static build GPU CentOS7 Python' : {
     node(NODE_LINUX_GPU) {
         ws('workspace/ut-publish-python-gpu') {
@@ -751,7 +767,7 @@ def test_static_python_gpu() {
   }]
 }
 
-def test_static_python_gpu_cmake() {
+def compile_static_python_gpu_cmake() {
   return ['Static build GPU CentOS7 Python with CMake' : {
     node(NODE_LINUX_GPU) {
         ws('workspace/ut-publish-python-gpu') {
@@ -764,12 +780,12 @@ def test_static_python_gpu_cmake() {
   }]
 }
 
-def test_unix_python3_cpu() {
+def test_unix_python3_cpu(lib_name) {
     return ['Python3: CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-cpu') {
           try {
-            utils.unpack_and_init('cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             python3_ut('ubuntu_cpu')
             utils.publish_test_coverage()
           } finally {
@@ -781,12 +797,12 @@ def test_unix_python3_cpu() {
     }]
 }
 
-def test_unix_python3_mkl_cpu() {
+def test_unix_python3_mkl_cpu(lib_name) {
     return ['Python3: MKL-CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-cpu') {
           try {
-            utils.unpack_and_init('cpu_mkl', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             python3_ut('ubuntu_cpu')
             utils.publish_test_coverage()
           } finally {
@@ -798,12 +814,12 @@ def test_unix_python3_mkl_cpu() {
     }]
 }
 
-def test_unix_python3_gpu() {
+def test_unix_python3_gpu(lib_name) {
     return ['Python3: GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-python3-gpu') {
           try {
-            utils.unpack_and_init('gpu', mx_lib_cython)
+            utils.unpack_and_init(lib_name, mx_lib_cython)
             python3_gpu_ut_cython('ubuntu_gpu_cu101')
             utils.publish_test_coverage()
           } finally {
@@ -814,13 +830,13 @@ def test_unix_python3_gpu() {
     }]
 }
 
-def test_unix_python3_quantize_gpu() {
+def test_unix_python3_quantize_gpu(lib_name) {
     return ['Python3: Quantize GPU': {
       node(NODE_LINUX_GPU_P3) {
         ws('workspace/ut-python3-quantize-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             try {
-              utils.unpack_and_init('gpu', mx_lib)
+              utils.unpack_and_init(lib_name, mx_lib)
               utils.docker_run('ubuntu_gpu_cu101', 
'unittest_ubuntu_python3_quantization_gpu', true)
               utils.publish_test_coverage()
             } finally {
@@ -848,12 +864,12 @@ def test_unix_python3_debug_cpu() {
     }]
 }
 
-def test_unix_python3_cpu_no_tvm_op() {
+def test_unix_python3_cpu_no_tvm_op(lib_name) {
     return ['Python3: CPU TVM_OP OFF': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-cpu-no-tvm-op') {
           try {
-            utils.unpack_and_init('cpu_openblas_no_tvm_op', 
mx_cmake_lib_no_tvm_op)
+            utils.unpack_and_init(lib_name, mx_cmake_lib_no_tvm_op)
             python3_ut('ubuntu_cpu')
           } finally {
             utils.collect_test_results_unix('tests_unittest.xml', 
'tests_python3_cpu_no_tvm_op_unittest.xml')
@@ -864,12 +880,12 @@ def test_unix_python3_cpu_no_tvm_op() {
     }]
 }
 
-def test_unix_python3_mkldnn_cpu() {
+def test_unix_python3_mkldnn_cpu(lib_name) {
     return ['Python3: MKLDNN-CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-mkldnn-cpu') {
           try {
-            utils.unpack_and_init('mkldnn_cpu', mx_mkldnn_lib, true)
+            utils.unpack_and_init(lib_name, mx_mkldnn_lib, true)
             python3_ut_mkldnn('ubuntu_cpu')
             utils.publish_test_coverage()
           } finally {
@@ -881,12 +897,12 @@ def test_unix_python3_mkldnn_cpu() {
     }]
 }
 
-def test_unix_python3_mkldnn_mkl_cpu() {
+def test_unix_python3_mkldnn_mkl_cpu(lib_name) {
     return ['Python3: MKLDNN-MKL-CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-mkldnn-mkl-cpu') {
           try {
-            utils.unpack_and_init('mkldnn_mkl_cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             python3_ut_mkldnn('ubuntu_cpu')
             utils.publish_test_coverage()
           } finally {
@@ -898,12 +914,12 @@ def test_unix_python3_mkldnn_mkl_cpu() {
     }]
 }
 
-def test_unix_python3_mkldnn_gpu() {
+def test_unix_python3_mkldnn_gpu(lib_name) {
     return ['Python3: MKLDNN-GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-python3-mkldnn-gpu') {
           try {
-            utils.unpack_and_init('mkldnn_gpu', mx_mkldnn_lib)
+            utils.unpack_and_init(lib_name, mx_mkldnn_lib)
             python3_gpu_ut('ubuntu_gpu_cu101')
             utils.publish_test_coverage()
           } finally {
@@ -914,12 +930,12 @@ def test_unix_python3_mkldnn_gpu() {
     }]
 }
 
-def test_unix_python3_mkldnn_nocudnn_gpu() {
+def test_unix_python3_mkldnn_nocudnn_gpu(lib_name) {
     return ['Python3: MKLDNN-GPU-NOCUDNN': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-python3-mkldnn-gpu-nocudnn') {
           try {
-            utils.unpack_and_init('mkldnn_gpu_nocudnn', mx_mkldnn_lib)
+            utils.unpack_and_init(lib_name, mx_mkldnn_lib)
             python3_gpu_ut_nocudnn('ubuntu_gpu_cu101')
             utils.publish_test_coverage()
           } finally {
@@ -930,13 +946,13 @@ def test_unix_python3_mkldnn_nocudnn_gpu() {
     }]
 }
 
-def test_unix_python3_tensorrt_gpu() {
+def test_unix_python3_tensorrt_gpu(lib_name) {
     return ['Python3: TensorRT GPU': {
       node(NODE_LINUX_GPU_P3) {
         ws('workspace/build-tensorrt') {
           timeout(time: max_time, unit: 'MINUTES') {
             try {
-              utils.unpack_and_init('tensorrt', mx_tensorrt_lib)
+              utils.unpack_and_init(lib_name, mx_tensorrt_lib)
               utils.docker_run('ubuntu_gpu_tensorrt', 
'unittest_ubuntu_tensorrt_gpu', true)
               utils.publish_test_coverage()
             } finally {
@@ -948,12 +964,12 @@ def test_unix_python3_tensorrt_gpu() {
     }]
 }
 
-def test_unix_python3_integration_gpu() {
+def test_unix_python3_integration_gpu(lib_name) {
     return ['Python Integration GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/it-python-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu', mx_lib)
+            utils.unpack_and_init(lib_name, mx_lib)
             utils.docker_run('ubuntu_gpu_cu101', 
'integrationtest_ubuntu_gpu_python', true)
             utils.publish_test_coverage()
           }
@@ -962,12 +978,12 @@ def test_unix_python3_integration_gpu() {
     }]
 }
 
-def test_unix_cpp_package_gpu() {
+def test_unix_cpp_package_gpu(lib_name) {
     return ['cpp-package GPU Makefile': {
       node(NODE_LINUX_GPU) {
         ws('workspace/it-cpp-package') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu_make', mx_lib_cpp_examples_make)
+            utils.unpack_and_init(lib_name, mx_lib_cpp_examples_make)
             utils.docker_run('ubuntu_gpu_cu101', 
'integrationtest_ubuntu_gpu_cpp_package', true)
             utils.publish_test_coverage()
           }
@@ -976,12 +992,12 @@ def test_unix_cpp_package_gpu() {
     }]
 }
 
-def test_unix_capi_cpp_package() {
+def test_unix_capi_cpp_package(lib_name) {
     return ['capi-cpp-package GPU Makefile': {
       node(NODE_LINUX_GPU) {
         ws('workspace/it-capi-cpp-package') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu_mkldnn_cpp_test_make', 
mx_lib_cpp_capi_make)
+            utils.unpack_and_init(lib_name, mx_lib_cpp_capi_make)
             utils.docker_run('ubuntu_gpu_cu101', 
'integrationtest_ubuntu_gpu_capi_cpp_package', true)
             utils.publish_test_coverage()
           }
@@ -990,12 +1006,12 @@ def test_unix_capi_cpp_package() {
     }]
 }
 
-def test_unix_scala_cpu() {
+def test_unix_scala_cpu(lib_name) {
     return ['Scala: CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-scala-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_cpu', 'integrationtest_ubuntu_cpu_scala', 
false)
             utils.publish_test_coverage()
           }
@@ -1004,12 +1020,12 @@ def test_unix_scala_cpu() {
     }]
 }
 
-def test_unix_scala_mkldnn_cpu(){
+def test_unix_scala_mkldnn_cpu(lib_name){
   return ['Scala: MKLDNN-CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-scala-mkldnn-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('mkldnn_cpu_make', mx_mkldnn_lib_make)
+            utils.unpack_and_init(lib_name, mx_mkldnn_lib_make)
             utils.docker_run('ubuntu_cpu', 'integrationtest_ubuntu_cpu_scala', 
false)
             utils.publish_test_coverage()
           }
@@ -1018,12 +1034,12 @@ def test_unix_scala_mkldnn_cpu(){
     }]
 }
 
-def test_unix_scala_gpu() {
+def test_unix_scala_gpu(lib_name) {
     return ['Scala: GPU Makefile': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-scala-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_gpu_cu101', 
'integrationtest_ubuntu_gpu_scala', true)
             utils.publish_test_coverage()
           }
@@ -1032,12 +1048,12 @@ def test_unix_scala_gpu() {
     }]
 }
 
-def test_unix_clojure_cpu() {
+def test_unix_clojure_cpu(lib_name) {
     return ['Clojure: CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-clojure-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_cpu_clojure', 
false)
             utils.publish_test_coverage()
           }
@@ -1046,12 +1062,12 @@ def test_unix_clojure_cpu() {
     }]
 }
 
-def test_unix_clojure_integration_cpu() {
+def test_unix_clojure_integration_cpu(lib_name) {
     return ['Clojure: CPU Integration Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-clojure-integration-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_cpu', 
'unittest_ubuntu_cpu_clojure_integration', false)
           }
         }
@@ -1059,12 +1075,12 @@ def test_unix_clojure_integration_cpu() {
     }]
 }
 
-def test_unix_r_cpu() {
+def test_unix_r_cpu(lib_name) {
     return ['R: CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-r-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_cpu_R', false)
             utils.publish_test_coverage()
           }
@@ -1073,12 +1089,12 @@ def test_unix_r_cpu() {
     }]
 }
 
-def test_unix_r_mkldnn_cpu() {
+def test_unix_r_mkldnn_cpu(lib_name) {
     return ['R: MKLDNN-CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-r-mkldnn-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('mkldnn_cpu', mx_mkldnn_lib, true)
+            utils.unpack_and_init(lib_name, mx_mkldnn_lib, true)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_minimal_R', false)
             utils.publish_test_coverage()
           }
@@ -1087,12 +1103,12 @@ def test_unix_r_mkldnn_cpu() {
     }]
 }
 
-def test_unix_perl_cpu() {
+def test_unix_perl_cpu(lib_name) {
     return ['Perl: CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-perl-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_cpugpu_perl', 
false)
             utils.publish_test_coverage()
           }
@@ -1101,12 +1117,12 @@ def test_unix_perl_cpu() {
     }]
 }
 
-def test_unix_cpp_gpu() {
+def test_unix_cpp_gpu(lib_name) {
     return ['Cpp: GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-cpp-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cmake_gpu', mx_cmake_lib)
+            utils.unpack_and_init(lib_name, mx_cmake_lib)
             utils.docker_run('ubuntu_gpu_cu101', 'unittest_cpp', true)
             utils.publish_test_coverage()
           }
@@ -1115,12 +1131,12 @@ def test_unix_cpp_gpu() {
     }]
 }
 
-def test_unix_cpp_cpu() {
+def test_unix_cpp_cpu(lib_name) {
     return ['Cpp: CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-cpp-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_debug', mx_cmake_lib_debug, true)
+            utils.unpack_and_init(lib_name, mx_cmake_lib_debug, true)
             utils.docker_run('ubuntu_cpu', 'unittest_cpp', false)
             utils.publish_test_coverage()
           }
@@ -1129,12 +1145,12 @@ def test_unix_cpp_cpu() {
     }]
 }
 
-def test_unix_perl_gpu() {
+def test_unix_perl_gpu(lib_name) {
     return ['Perl: GPU Makefile': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-perl-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_gpu_cu101', 
'unittest_ubuntu_cpugpu_perl', true)
             utils.publish_test_coverage()
           }
@@ -1143,12 +1159,12 @@ def test_unix_perl_gpu() {
     }]
 }
 
-def test_unix_r_gpu() {
+def test_unix_r_gpu(lib_name) {
     return ['R: GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/ut-r-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu', mx_lib)
+            utils.unpack_and_init(lib_name, mx_lib)
             utils.docker_run('ubuntu_gpu_cu101', 'unittest_ubuntu_gpu_R', true)
             utils.publish_test_coverage()
           }
@@ -1157,12 +1173,12 @@ def test_unix_r_gpu() {
     }]
 }
 
-def test_unix_julia07_cpu() {
+def test_unix_julia07_cpu(lib_name) {
     return ['Julia 0.7: CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-it-julia07-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_cpu_julia07', 
false)
           }
         }
@@ -1170,12 +1186,12 @@ def test_unix_julia07_cpu() {
     }]
 }
 
-def test_unix_julia10_cpu() {
+def test_unix_julia10_cpu(lib_name) {
     return ['Julia 1.0: CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-it-julia10-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             utils.docker_run('ubuntu_cpu', 'unittest_ubuntu_cpu_julia10', 
false)
           }
         }
@@ -1183,12 +1199,12 @@ def test_unix_julia10_cpu() {
     }]
 }
 
-def test_unix_onnx_cpu() {
+def test_unix_onnx_cpu(lib_name) {
     return ['Onnx: CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/it-onnx-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('ubuntu_cpu', 'integrationtest_ubuntu_cpu_onnx', 
false)
             utils.publish_test_coverage()
           }
@@ -1197,12 +1213,12 @@ def test_unix_onnx_cpu() {
     }]
 }
 
-def test_unix_distributed_kvstore_cpu() {
+def test_unix_distributed_kvstore_cpu(lib_name) {
     return ['dist-kvstore tests CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/it-dist-kvstore') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('cpu', mx_lib, true)
+            utils.unpack_and_init(lib_name, mx_lib, true)
             utils.docker_run('ubuntu_cpu', 
'integrationtest_ubuntu_cpu_dist_kvstore', false)
             utils.publish_test_coverage()
           }
@@ -1211,12 +1227,12 @@ def test_unix_distributed_kvstore_cpu() {
     }]
 }
 
-def test_unix_distributed_kvstore_gpu() {
+def test_unix_distributed_kvstore_gpu(lib_name) {
     return ['dist-kvstore tests GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/it-dist-kvstore') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('gpu', mx_lib)
+            utils.unpack_and_init(lib_name, mx_lib)
             utils.docker_run('ubuntu_gpu_cu101', 
'integrationtest_ubuntu_gpu_dist_kvstore', true)
             utils.publish_test_coverage()
           }
@@ -1225,13 +1241,13 @@ def test_unix_distributed_kvstore_gpu() {
     }]
 }
 
-def test_centos7_python3_cpu() {
+def test_centos7_python3_cpu(lib_name) {
     return ['Python3: CentOS 7 CPU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/build-centos7-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             try {
-              utils.unpack_and_init('centos7_cpu', mx_lib, true)
+              utils.unpack_and_init(lib_name, mx_lib, true)
               utils.docker_run('centos7_cpu', 'unittest_centos7_cpu', false)
               utils.publish_test_coverage()
             } finally {
@@ -1244,13 +1260,13 @@ def test_centos7_python3_cpu() {
     }]
 }
 
-def test_centos7_python3_gpu() {
+def test_centos7_python3_gpu(lib_name) {
     return ['Python3: CentOS 7 GPU': {
       node(NODE_LINUX_GPU) {
         ws('workspace/build-centos7-gpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             try {
-              utils.unpack_and_init('centos7_gpu', mx_lib)
+              utils.unpack_and_init(lib_name, mx_lib)
               utils.docker_run('centos7_gpu_cu92', 'unittest_centos7_gpu', 
true)
               utils.publish_test_coverage()
             } finally {
@@ -1262,12 +1278,12 @@ def test_centos7_python3_gpu() {
     }]
 }
 
-def test_centos7_scala_cpu() {
+def test_centos7_scala_cpu(lib_name) {
     return ['Scala: CentOS CPU Makefile': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-scala-centos7-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('centos7_cpu_make', mx_lib_make)
+            utils.unpack_and_init(lib_name, mx_lib_make)
             utils.docker_run('centos7_cpu', 'unittest_centos7_cpu_scala', 
false)
             utils.publish_test_coverage()
           }
@@ -1276,14 +1292,14 @@ def test_centos7_scala_cpu() {
     }]
 }
 
-def test_windows_python3_gpu() {
+def test_windows_python3_gpu(lib_name) {
     return ['Python 3: GPU Win':{
       node(NODE_WINDOWS_GPU) {
         timeout(time: max_time, unit: 'MINUTES') {
           ws('workspace/ut-python-gpu') {
             try {
               utils.init_git_win()
-              unstash 'windows_package_gpu'
+              unstash lib_name
               powershell 'ci/windows/test_py3_gpu.ps1'
             } finally {
               utils.collect_test_results_windows('tests_forward.xml', 
'tests_gpu_forward_windows_python3_gpu.xml')
@@ -1295,14 +1311,14 @@ def test_windows_python3_gpu() {
     }]
 }
 
-def test_windows_python3_gpu_mkldnn() {
+def test_windows_python3_gpu_mkldnn(lib_name) {
     return ['Python 3: MKLDNN-GPU Win':{
       node(NODE_WINDOWS_GPU) {
         timeout(time: max_time, unit: 'MINUTES') {
           ws('workspace/ut-python-gpu') {
             try {
               utils.init_git_win()
-              unstash 'windows_package_gpu_mkldnn'
+              unstash lib_name
               powershell 'ci/windows/test_py3_gpu.ps1'
             } finally {
               utils.collect_test_results_windows('tests_forward.xml', 
'tests_gpu_forward_windows_python3_gpu_mkldnn.xml')
@@ -1314,14 +1330,14 @@ def test_windows_python3_gpu_mkldnn() {
     }]
 }
 
-def test_windows_python3_cpu() {
+def test_windows_python3_cpu(lib_name) {
     return ['Python 3: CPU Win': {
       node(NODE_WINDOWS_CPU) {
         timeout(time: max_time, unit: 'MINUTES') {
           ws('workspace/ut-python-cpu') {
             try {
               utils.init_git_win()
-              unstash 'windows_package_cpu'
+              unstash lib_name
               powershell 'ci/windows/test_py3_cpu.ps1'
             } finally {
               utils.collect_test_results_windows('tests_unittest.xml', 
'tests_unittest_windows_python3_cpu.xml')
@@ -1332,13 +1348,13 @@ def test_windows_python3_cpu() {
     }]
 }
 
-def test_windows_julia07_cpu() {
+def test_windows_julia07_cpu(lib_name) {
     return ['Julia 0.7: CPU Win': {
       node(NODE_WINDOWS_CPU) {
         ws('workspace/ut-julia07-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
-            unstash 'windows_package_cpu'
+            unstash lib_name
             powershell 'ci/windows/test_jl07_cpu.ps1'
           }
         }
@@ -1346,13 +1362,13 @@ def test_windows_julia07_cpu() {
     }]
 }
 
-def test_windows_julia10_cpu() {
+def test_windows_julia10_cpu(lib_name) {
     return ['Julia 1.0: CPU Win': {
       node(NODE_WINDOWS_CPU) {
         ws('workspace/ut-julia10-cpu') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git_win()
-            unstash 'windows_package_cpu'
+            unstash lib_name
             powershell 'ci/windows/test_jl10_cpu.ps1'
           }
         }
@@ -1360,12 +1376,12 @@ def test_windows_julia10_cpu() {
     }]
 }
 
-def test_qemu_armv7_cpu() {
+def test_qemu_armv7_cpu(lib_name) {
     return ['ARMv7 QEMU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-armv7-qemu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('armv7', mx_lib)
+            utils.unpack_and_init(lib_name, mx_lib)
             utils.docker_run('test.armv7', 'unittest_ubuntu_python3_arm', 
false)
           }
         }
@@ -1373,12 +1389,12 @@ def test_qemu_armv7_cpu() {
     }]
 }
 
-def test_qemu_armv8_cpu() {
+def test_qemu_armv8_cpu(lib_name) {
     return ['ARMv8 QEMU': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-armv8-qemu') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('armv8', mx_lib)
+            utils.unpack_and_init(lib_name, mx_lib)
             utils.docker_run('test.armv8', 'unittest_ubuntu_python3_arm', 
false)
           }
         }
@@ -1387,14 +1403,14 @@ def test_qemu_armv8_cpu() {
 }
 
 // This creates the MXNet binary needed for generating different docs sets
-def compile_unix_lite() {
+def compile_unix_lite(lib_name) {
     return ['MXNet lib': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
             utils.init_git()
             utils.docker_run('ubuntu_cpu_lite', 'build_ubuntu_cpu_docs', false)
-            utils.pack_lib('libmxnet', 'lib/libmxnet.so', false)
+            utils.pack_lib(lib_name, 'lib/libmxnet.so', false)
           }
         }
       }
@@ -1417,12 +1433,12 @@ def should_pack_website() {
 // Stashing is only needed for master for website publishing or for testing 
"new_"
 
 // Call this function from Jenkins to generate just the Python API microsite 
artifacts.
-def docs_python() {
+def docs_python(lib_name) {
     return ['Python Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_python', 'build_python_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('python-artifacts', 
'docs/_build/python-artifacts.tgz', false)
@@ -1435,12 +1451,12 @@ def docs_python() {
 
 
 // Call this function from Jenkins to generate just the C and C++ API 
microsite artifacts.
-def docs_c() {
+def docs_c(lib_name) {
     return ['C Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_c', 'build_c_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('c-artifacts', 'docs/_build/c-artifacts.tgz', 
false)
@@ -1453,12 +1469,12 @@ def docs_c() {
 
 
 // Call this function from Jenkins to generate just the Julia API microsite 
artifacts.
-def docs_julia() {
+def docs_julia(lib_name) {
     return ['Julia Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_julia', 'build_julia_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('julia-artifacts', 
'docs/_build/julia-artifacts.tgz', false)
@@ -1471,12 +1487,12 @@ def docs_julia() {
 
 
 // Call this function from Jenkins to generate just the R API PDF artifact.
-def docs_r() {
+def docs_r(lib_name) {
     return ['R Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_r', 'build_r_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('r-artifacts', 'docs/_build/r-artifacts.tgz', 
false)
@@ -1490,12 +1506,12 @@ def docs_r() {
 
 // Call this function from Jenkins to generate just the Scala API microsite 
artifacts.
 // It will also generate the Scala package.
-def docs_scala() {
+def docs_scala(lib_name) {
     return ['Scala Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_scala', 'build_scala_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('scala-artifacts', 
'docs/_build/scala-artifacts.tgz', false)
@@ -1509,12 +1525,12 @@ def docs_scala() {
 
 // Call this function from Jenkins to generate just the Java API microsite 
artifacts.
 // It will also generate the Scala package.
-def docs_java() {
+def docs_java(lib_name) {
     return ['Java Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_scala', 'build_java_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('java-artifacts', 
'docs/_build/java-artifacts.tgz', false)
@@ -1528,12 +1544,12 @@ def docs_java() {
 
 // Call this function from Jenkins to generate just the Clojure API microsite 
artifacts.
 // It will also generate the Scala package.
-def docs_clojure() {
+def docs_clojure(lib_name) {
     return ['Clojure Docs': {
       node(NODE_LINUX_CPU) {
         ws('workspace/docs') {
           timeout(time: max_time, unit: 'MINUTES') {
-            utils.unpack_and_init('libmxnet', 'lib/libmxnet.so', false)
+            utils.unpack_and_init(lib_name, 'lib/libmxnet.so', false)
             utils.docker_run('ubuntu_cpu_scala', 'build_clojure_docs', false)
             if (should_pack_website()) {
               utils.pack_lib('clojure-artifacts', 
'docs/_build/clojure-artifacts.tgz', false)
@@ -1671,11 +1687,11 @@ def docs_publish_beta() {
 }
 
 
-def misc_asan_cpu() {
+def misc_asan_cpu(lib_name) {
     return ['CPU ASAN': {
       node(NODE_LINUX_CPU) {
         ws('workspace/ut-python3-cpu-asan') {
-            utils.unpack_and_init('cpu_asan', mx_lib_cpp_examples_cpu)
+            utils.unpack_and_init(lib_name, mx_lib_cpp_examples_cpu)
             utils.docker_run('ubuntu_cpu', 'integrationtest_ubuntu_cpu_asan', 
false)
         }
       }
diff --git a/ci/jenkins/Jenkinsfile_centos_cpu 
b/ci/jenkins/Jenkinsfile_centos_cpu
index 374be1c..c5dd1d5 100644
--- a/ci/jenkins/Jenkinsfile_centos_cpu
+++ b/ci/jenkins/Jenkinsfile_centos_cpu
@@ -34,17 +34,17 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_centos7_cpu(),
-    custom_steps.compile_centos7_cpu_make(),
-    custom_steps.compile_centos7_cpu_mkldnn()
+    custom_steps.compile_centos7_cpu('centos7_cpu'),
+    custom_steps.compile_centos7_cpu_make('centos7_cpu_make'),
+    custom_steps.compile_centos7_cpu_mkldnn(),
+    custom_steps.compile_static_scala_cpu(),
+    custom_steps.compile_static_python_cpu(),
+    custom_steps.compile_static_python_cpu_cmake()
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_centos7_python3_cpu(),
-    custom_steps.test_centos7_scala_cpu(),
-    custom_steps.test_static_scala_cpu(),
-    custom_steps.test_static_python_cpu(),
-    custom_steps.test_static_python_cpu_cmake(),
+    custom_steps.test_centos7_python3_cpu('centos7_cpu'),
+    custom_steps.test_centos7_scala_cpu('centos7_cpu_make')
   ])
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_centos_gpu 
b/ci/jenkins/Jenkinsfile_centos_gpu
index 3c6c28d..4b07677 100644
--- a/ci/jenkins/Jenkinsfile_centos_gpu
+++ b/ci/jenkins/Jenkinsfile_centos_gpu
@@ -34,13 +34,13 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu', linux_
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_centos7_gpu()
+    custom_steps.compile_centos7_gpu('centos7_gpu'),
+    custom_steps.compile_static_python_gpu(),
+    custom_steps.compile_static_python_gpu_cmake()
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_centos7_python3_gpu(),
-    custom_steps.test_static_python_gpu(),
-    custom_steps.test_static_python_gpu_cmake(),
+    custom_steps.test_centos7_python3_gpu('centos7_gpu')
   ])
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_edge b/ci/jenkins/Jenkinsfile_edge
index 857d081..6f1a2bf 100644
--- a/ci/jenkins/Jenkinsfile_edge
+++ b/ci/jenkins/Jenkinsfile_edge
@@ -35,16 +35,16 @@ utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
     custom_steps.compile_armv8_jetson_gpu(),
-    custom_steps.compile_armv7_cpu(),
-    custom_steps.compile_armv6_cpu(),
-    custom_steps.compile_armv8_cpu(),
+    custom_steps.compile_armv7_cpu('armv7'),
+    custom_steps.compile_armv6_cpu('armv6'),
+    custom_steps.compile_armv8_cpu('armv8'),
     custom_steps.compile_armv8_android_cpu(),
     custom_steps.compile_armv7_android_cpu()
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_qemu_armv7_cpu(),
-    custom_steps.test_qemu_armv8_cpu()
+    custom_steps.test_qemu_armv7_cpu('armv7'),
+    custom_steps.test_qemu_armv8_cpu('armv8')
   ])
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_miscellaneous 
b/ci/jenkins/Jenkinsfile_miscellaneous
index 2900e37..d6376a7 100644
--- a/ci/jenkins/Jenkinsfile_miscellaneous
+++ b/ci/jenkins/Jenkinsfile_miscellaneous
@@ -35,16 +35,16 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu', linux_
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_asan_cpu(),
-    custom_steps.compile_unix_gcc8_werror(),
-    custom_steps.compile_unix_clang10_werror(),
-    custom_steps.compile_unix_clang10_cuda_werror(),
+    custom_steps.compile_unix_asan_cpu('cpu_asan'),
+    custom_steps.compile_unix_gcc8_werror('cpu_gcc8'),
+    custom_steps.compile_unix_clang10_werror('cpu_clang10'),
+    custom_steps.compile_unix_clang10_cuda_werror('gpu_clang10'),
     custom_steps.compile_unix_amalgamation_min(),
     custom_steps.compile_unix_amalgamation()
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.misc_asan_cpu(),
+    custom_steps.misc_asan_cpu('cpu_asan'),
     custom_steps.misc_test_docker_cache_build()
   ])
 }
diff --git a/ci/jenkins/Jenkinsfile_tools b/ci/jenkins/Jenkinsfile_tools
index f9e17ed..ac92eb0 100644
--- a/ci/jenkins/Jenkinsfile_tools
+++ b/ci/jenkins/Jenkinsfile_tools
@@ -37,7 +37,7 @@ utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Tooling Tests', [
     custom_steps.test_artifact_repository(),
-  ])    
+  ])
 }
 ,
 failure_handler: {
diff --git a/ci/jenkins/Jenkinsfile_unix_cpu b/ci/jenkins/Jenkinsfile_unix_cpu
index cccbdd5..9335b5b 100644
--- a/ci/jenkins/Jenkinsfile_unix_cpu
+++ b/ci/jenkins/Jenkinsfile_unix_cpu
@@ -34,40 +34,39 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_cpu_openblas(),
-    custom_steps.compile_unix_cpu_openblas_make(),
-    custom_steps.compile_unix_openblas_debug_cpu(),
-    custom_steps.compile_unix_mkl_cpu(),
-    custom_steps.compile_unix_mkldnn_cpu(),
-    custom_steps.compile_unix_mkldnn_cpu_make(),
-    custom_steps.compile_unix_mkldnn_mkl_cpu(),
-    custom_steps.compile_unix_int64_cpu(),
-    custom_steps.compile_unix_openblas_cpu_no_tvm_op(),
+    custom_steps.compile_unix_cpu_openblas('cpu'),
+    custom_steps.compile_unix_cpu_openblas_make('cpu_make'),
+    custom_steps.compile_unix_openblas_debug_cpu('cpu_debug'),
+    custom_steps.compile_unix_mkl_cpu('cpu_mkl'),
+    custom_steps.compile_unix_mkldnn_cpu('mkldnn_cpu'),
+    custom_steps.compile_unix_mkldnn_cpu_make('mkldnn_cpu_make'),
+    custom_steps.compile_unix_mkldnn_mkl_cpu('mkldnn_mkl_cpu'),
+    custom_steps.compile_unix_int64_cpu('ubuntu_cpu'),
+    custom_steps.compile_unix_openblas_cpu_no_tvm_op('cpu_openblas_no_tvm_op'),
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_unix_python3_cpu(),
-    custom_steps.test_unix_python3_debug_cpu(),
-    custom_steps.test_unix_python3_mkl_cpu(),
-    custom_steps.test_unix_python3_mkldnn_cpu(),
-    custom_steps.test_unix_python3_mkldnn_mkl_cpu(),
-    custom_steps.test_unix_scala_cpu(),
-    custom_steps.test_unix_scala_mkldnn_cpu(),
-    custom_steps.test_unix_clojure_cpu(),
-    custom_steps.test_unix_clojure_integration_cpu(),
-    custom_steps.test_unix_perl_cpu(),
-    custom_steps.test_unix_r_cpu(),
-    custom_steps.test_unix_r_mkldnn_cpu(),
-    custom_steps.test_unix_julia07_cpu(),
-    custom_steps.test_unix_julia10_cpu(),
-    custom_steps.test_unix_onnx_cpu(),
-    custom_steps.test_unix_cpp_cpu(),
+    custom_steps.test_unix_python3_cpu('cpu'),
+    custom_steps.test_unix_python3_mkl_cpu('cpu_mkl'),
+    custom_steps.test_unix_python3_mkldnn_cpu('mkldnn_cpu'),
+    custom_steps.test_unix_python3_mkldnn_mkl_cpu('mkldnn_mkl_cpu'),
+    custom_steps.test_unix_scala_cpu('cpu_make'),
+    custom_steps.test_unix_scala_mkldnn_cpu('mkldnn_cpu_make'),
+    custom_steps.test_unix_clojure_cpu('cpu_make'),
+    custom_steps.test_unix_clojure_integration_cpu('cpu_make'),
+    custom_steps.test_unix_perl_cpu('cpu_make'),
+    custom_steps.test_unix_r_cpu('cpu'),
+    custom_steps.test_unix_r_mkldnn_cpu('mkldnn_cpu'),
+    custom_steps.test_unix_julia07_cpu('cpu'),
+    custom_steps.test_unix_julia10_cpu('cpu'),
+    custom_steps.test_unix_onnx_cpu('cpu_make'),
+    custom_steps.test_unix_cpp_cpu('cpu_debug'),
     /*  Disabled due to master build failure:
      *  
http://jenkins.mxnet-ci.amazon-ml.com/blue/organizations/jenkins/incubator-mxnet/detail/master/1221/pipeline/
      *  https://github.com/apache/incubator-mxnet/issues/11801
-    custom_steps.test_unix_distributed_kvstore_cpu()
+    custom_steps.test_unix_distributed_kvstore_cpu('cpu')
     */
-    custom_steps.test_unix_python3_cpu_no_tvm_op(),
+    custom_steps.test_unix_python3_cpu_no_tvm_op('cpu_openblas_no_tvm_op'),
   ])
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_unix_gpu b/ci/jenkins/Jenkinsfile_unix_gpu
index 0e2310f..ece2bbb 100644
--- a/ci/jenkins/Jenkinsfile_unix_gpu
+++ b/ci/jenkins/Jenkinsfile_unix_gpu
@@ -34,32 +34,33 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu', linux_
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_mkldnn_gpu(),
-    custom_steps.compile_unix_mkldnn_nocudnn_gpu(),
-    custom_steps.compile_unix_full_gpu(),
-    custom_steps.compile_unix_full_gpu_make(),
-    custom_steps.compile_unix_cmake_gpu(),
-    custom_steps.compile_unix_tensorrt_gpu(),
-    custom_steps.compile_unix_int64_gpu(),
-    custom_steps.compile_unix_cmake_gpu_no_rtc(),
-    custom_steps.compile_unix_full_gpu_mkldnn_cpp_test()
+    custom_steps.compile_unix_mkldnn_gpu('mkldnn_gpu'),
+    custom_steps.compile_unix_mkldnn_nocudnn_gpu('mkldnn_gpu_nocudnn'),
+    custom_steps.compile_unix_full_gpu('gpu'),
+    custom_steps.compile_unix_full_gpu_make('gpu_make'),
+    custom_steps.compile_unix_full_gpu_debug('gpu_debug'),
+    custom_steps.compile_unix_cmake_gpu('cmake_gpu'),
+    custom_steps.compile_unix_tensorrt_gpu('tensorrt'),
+    custom_steps.compile_unix_int64_gpu('gpu_int64'),
+    custom_steps.compile_unix_cmake_gpu_no_rtc('gpu_no_rtc'),
+    
custom_steps.compile_unix_full_gpu_mkldnn_cpp_test('gpu_mkldnn_cpp_test_make')
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_unix_python3_gpu(),
-    custom_steps.test_unix_python3_quantize_gpu(),
-    custom_steps.test_unix_python3_mkldnn_gpu(),
-    custom_steps.test_unix_python3_mkldnn_nocudnn_gpu(),
-    custom_steps.test_unix_python3_tensorrt_gpu(),
-    custom_steps.test_unix_perl_gpu(),
-    custom_steps.test_unix_r_gpu(),
-    custom_steps.test_unix_cpp_gpu(),
-    custom_steps.test_unix_python3_integration_gpu(),
-    custom_steps.test_unix_cpp_package_gpu(),
-    custom_steps.test_unix_scala_gpu(),
+    custom_steps.test_unix_python3_gpu('gpu'),
+    custom_steps.test_unix_python3_quantize_gpu('gpu'),
+    custom_steps.test_unix_python3_mkldnn_gpu('mkldnn_gpu'),
+    custom_steps.test_unix_python3_mkldnn_nocudnn_gpu('mkldnn_gpu_nocudnn'),
+    custom_steps.test_unix_python3_tensorrt_gpu('tensorrt'),
+    custom_steps.test_unix_perl_gpu('gpu_make'),
+    custom_steps.test_unix_r_gpu('gpu'),
+    custom_steps.test_unix_cpp_gpu('cmake_gpu'),
+    custom_steps.test_unix_python3_integration_gpu('gpu'),
+    custom_steps.test_unix_cpp_package_gpu('gpu_make'),
+    custom_steps.test_unix_scala_gpu('gpu_make'),
     // TODO(szha): fix and reenable the hanging issue. tracked in #18098
-    // custom_steps.test_unix_distributed_kvstore_gpu(),
-    custom_steps.test_unix_capi_cpp_package(),
+    // custom_steps.test_unix_distributed_kvstore_gpu('gpu'),
+    custom_steps.test_unix_capi_cpp_package('gpu_mkldnn_cpp_test_make'),
   ]) 
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_website_beta 
b/ci/jenkins/Jenkinsfile_website_beta
index 55c8ab8..a28e4b9 100644
--- a/ci/jenkins/Jenkinsfile_website_beta
+++ b/ci/jenkins/Jenkinsfile_website_beta
@@ -36,13 +36,13 @@ utils.assign_node_labels(utility: 'restricted-utility', 
linux_cpu: 'restricted-m
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
   utils.parallel_stage('Build Docs', [
     // Only building a subset of the docs for previewing on staging
     custom_steps.docs_jekyll(),
-    custom_steps.docs_python()
+    custom_steps.docs_python('libmxnet')
   ])
 
   utils.parallel_stage('Prepare', [
diff --git a/ci/jenkins/Jenkinsfile_website_c_docs 
b/ci/jenkins/Jenkinsfile_website_c_docs
index e678920..5c6988d 100644
--- a/ci/jenkins/Jenkinsfile_website_c_docs
+++ b/ci/jenkins/Jenkinsfile_website_c_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
+
   utils.parallel_stage('C Docs', [
-    custom_steps.docs_c()
+    custom_steps.docs_c('libmxnet')
   ])
 
 }
diff --git a/ci/jenkins/Jenkinsfile_website_clojure_docs 
b/ci/jenkins/Jenkinsfile_website_clojure_docs
index 697dca4..d196505 100644
--- a/ci/jenkins/Jenkinsfile_website_clojure_docs
+++ b/ci/jenkins/Jenkinsfile_website_clojure_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
+
   utils.parallel_stage('Clojure Docs', [
-    custom_steps.docs_clojure()
+    custom_steps.docs_clojure('libmxnet')
 
   ])
 
diff --git a/ci/jenkins/Jenkinsfile_website_full 
b/ci/jenkins/Jenkinsfile_website_full
index ecf1f29..9eadf7b 100644
--- a/ci/jenkins/Jenkinsfile_website_full
+++ b/ci/jenkins/Jenkinsfile_website_full
@@ -35,18 +35,18 @@ utils.assign_node_labels(utility: 'restricted-utility', 
linux_cpu: 'restricted-m
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
   utils.parallel_stage('Build Docs', [
     custom_steps.docs_jekyll(),
-    custom_steps.docs_c(),
-    custom_steps.docs_python(),
-    custom_steps.docs_julia(),
-    custom_steps.docs_r(),
-    custom_steps.docs_scala(),
-    custom_steps.docs_java(),
-    custom_steps.docs_clojure()
+    custom_steps.docs_c('libmxnet'),
+    custom_steps.docs_python('libmxnet'),
+    custom_steps.docs_julia('libmxnet'),
+    custom_steps.docs_r('libmxnet'),
+    custom_steps.docs_scala('libmxnet'),
+    custom_steps.docs_java('libmxnet'),
+    custom_steps.docs_clojure('libmxnet')
   ])
 
   utils.parallel_stage('Prepare', [
diff --git a/ci/jenkins/Jenkinsfile_website_full_pr 
b/ci/jenkins/Jenkinsfile_website_full_pr
index 9823fb3..a5ec412 100644
--- a/ci/jenkins/Jenkinsfile_website_full_pr
+++ b/ci/jenkins/Jenkinsfile_website_full_pr
@@ -34,19 +34,19 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
   utils.parallel_stage('Build Docs', [
     // Optimization would be to flag these not to stash if not previewing them
     custom_steps.docs_jekyll(),
-    custom_steps.docs_c(),
-    custom_steps.docs_python(),
-    custom_steps.docs_julia(),
-    custom_steps.docs_r(),
-    custom_steps.docs_scala(),
-    custom_steps.docs_java(),
-    custom_steps.docs_clojure()
+    custom_steps.docs_c('libmxnet'),
+    custom_steps.docs_python('libmxnet'),
+    custom_steps.docs_julia('libmxnet'),
+    custom_steps.docs_r('libmxnet'),
+    custom_steps.docs_scala('libmxnet'),
+    custom_steps.docs_java('libmxnet'),
+    custom_steps.docs_clojure('libmxnet')
   ])
 
   // TODO: add a website preview function
diff --git a/ci/jenkins/Jenkinsfile_website_java_docs 
b/ci/jenkins/Jenkinsfile_website_java_docs
index 4453b44..89c5d8c 100644
--- a/ci/jenkins/Jenkinsfile_website_java_docs
+++ b/ci/jenkins/Jenkinsfile_website_java_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
+
   utils.parallel_stage('Java Docs', [
-    custom_steps.docs_java()
+    custom_steps.docs_java('libmxnet')
 
   ])
 
diff --git a/ci/jenkins/Jenkinsfile_website_jekyll_docs 
b/ci/jenkins/Jenkinsfile_website_jekyll_docs
index c4c5ff8..27d27ce 100644
--- a/ci/jenkins/Jenkinsfile_website_jekyll_docs
+++ b/ci/jenkins/Jenkinsfile_website_jekyll_docs
@@ -35,7 +35,6 @@ utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Jekyll Website Docs', [
     custom_steps.docs_jekyll()
-
   ])
 
 }
diff --git a/ci/jenkins/Jenkinsfile_website_julia_docs 
b/ci/jenkins/Jenkinsfile_website_julia_docs
index e1e9aaa..0301490 100644
--- a/ci/jenkins/Jenkinsfile_website_julia_docs
+++ b/ci/jenkins/Jenkinsfile_website_julia_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
+
   utils.parallel_stage('Julia Docs', [
-    custom_steps.docs_julia()
+    custom_steps.docs_julia('libmxnet')
 
   ])
 
diff --git a/ci/jenkins/Jenkinsfile_website_mxnet_build 
b/ci/jenkins/Jenkinsfile_website_mxnet_build
index 2acb159..7be106c 100644
--- a/ci/jenkins/Jenkinsfile_website_mxnet_build
+++ b/ci/jenkins/Jenkinsfile_website_mxnet_build
@@ -34,7 +34,7 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
 }
diff --git a/ci/jenkins/Jenkinsfile_website_nightly 
b/ci/jenkins/Jenkinsfile_website_nightly
index 1bbe5bc..e92a447 100644
--- a/ci/jenkins/Jenkinsfile_website_nightly
+++ b/ci/jenkins/Jenkinsfile_website_nightly
@@ -35,18 +35,18 @@ utils.assign_node_labels(utility: 'restricted-utility', 
linux_cpu: 'restricted-m
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
   utils.parallel_stage('Build Docs', [
     custom_steps.docs_jekyll(),
-    custom_steps.docs_c(),
-    custom_steps.docs_python(),
-    custom_steps.docs_julia(),
-    custom_steps.docs_r(),
-    custom_steps.docs_scala(),
-    custom_steps.docs_java(),
-    custom_steps.docs_clojure()
+    custom_steps.docs_c('libmxnet'),
+    custom_steps.docs_python('libmxnet'),
+    custom_steps.docs_julia('libmxnet'),
+    custom_steps.docs_r('libmxnet'),
+    custom_steps.docs_scala('libmxnet'),
+    custom_steps.docs_java('libmxnet'),
+    custom_steps.docs_clojure('libmxnet')
   ])
 
   utils.parallel_stage('Prepare', [
diff --git a/ci/jenkins/Jenkinsfile_website_python_docs 
b/ci/jenkins/Jenkinsfile_website_python_docs
index baaf451..40367f9 100644
--- a/ci/jenkins/Jenkinsfile_website_python_docs
+++ b/ci/jenkins/Jenkinsfile_website_python_docs
@@ -34,12 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
-  utils.parallel_stage('Python Docs', [
-    custom_steps.docs_python()
 
+  utils.parallel_stage('Python Docs', [
+    custom_steps.docs_python('libmxnet')
   ])
 
 }
diff --git a/ci/jenkins/Jenkinsfile_website_r_docs 
b/ci/jenkins/Jenkinsfile_website_r_docs
index 5b9f663..8967a89 100644
--- a/ci/jenkins/Jenkinsfile_website_r_docs
+++ b/ci/jenkins/Jenkinsfile_website_r_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
 
   utils.parallel_stage('R Docs', [
-    custom_steps.docs_r()
+    custom_steps.docs_r('libmxnet')
 
   ])
 
diff --git a/ci/jenkins/Jenkinsfile_website_scala_docs 
b/ci/jenkins/Jenkinsfile_website_scala_docs
index 6a083da..cf3303d 100644
--- a/ci/jenkins/Jenkinsfile_website_scala_docs
+++ b/ci/jenkins/Jenkinsfile_website_scala_docs
@@ -34,11 +34,11 @@ utils.assign_node_labels(utility: 'utility', linux_cpu: 
'mxnetlinux-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_unix_lite()
+    custom_steps.compile_unix_lite('libmxnet')
   ])
-  
+
   utils.parallel_stage('Scala Docs', [
-    custom_steps.docs_scala()
+    custom_steps.docs_scala('libmxnet')
 
   ])
 
diff --git a/ci/jenkins/Jenkinsfile_windows_cpu 
b/ci/jenkins/Jenkinsfile_windows_cpu
index b699664..26e2ba2 100644
--- a/ci/jenkins/Jenkinsfile_windows_cpu
+++ b/ci/jenkins/Jenkinsfile_windows_cpu
@@ -34,16 +34,16 @@ utils.assign_node_labels(utility: 'utility', windows_cpu: 
'mxnetwindows-cpu')
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_windows_cpu(),
-    custom_steps.compile_windows_cpu_mkldnn(),
-    custom_steps.compile_windows_cpu_mkldnn_mkl(),
-    custom_steps.compile_windows_cpu_mkl()
+    custom_steps.compile_windows_cpu('windows_package_cpu'),
+    custom_steps.compile_windows_cpu_mkldnn('windows_package_cpu_mkldnn'),
+    
custom_steps.compile_windows_cpu_mkldnn_mkl('windows_package_cpu_mkldnn_mkl'),
+    custom_steps.compile_windows_cpu_mkl('windows_package_cpu_mkl')
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_windows_python3_cpu(),
-    custom_steps.test_windows_julia07_cpu(),
-    custom_steps.test_windows_julia10_cpu()
+    custom_steps.test_windows_python3_cpu('windows_package_cpu'),
+    custom_steps.test_windows_julia07_cpu('windows_package_cpu'),
+    custom_steps.test_windows_julia10_cpu('windows_package_cpu')
   ])
 }
 ,
diff --git a/ci/jenkins/Jenkinsfile_windows_gpu 
b/ci/jenkins/Jenkinsfile_windows_gpu
index b5db665..1c4a9c9 100644
--- a/ci/jenkins/Jenkinsfile_windows_gpu
+++ b/ci/jenkins/Jenkinsfile_windows_gpu
@@ -34,13 +34,13 @@ utils.assign_node_labels(utility: 'utility', windows_cpu: 
'mxnetwindows-cpu', wi
 utils.main_wrapper(
 core_logic: {
   utils.parallel_stage('Build', [
-    custom_steps.compile_windows_gpu(),
-    custom_steps.compile_windows_gpu_mkldnn()
+    custom_steps.compile_windows_gpu('windows_package_gpu'),
+    custom_steps.compile_windows_gpu_mkldnn('windows_package_gpu_mkldnn')
   ])
 
   utils.parallel_stage('Tests', [
-    custom_steps.test_windows_python3_gpu(),
-    custom_steps.test_windows_python3_gpu_mkldnn()
+    custom_steps.test_windows_python3_gpu('windows_package_gpu'),
+    custom_steps.test_windows_python3_gpu_mkldnn('windows_package_gpu_mkldnn')
   ])
 }
 ,
diff --git a/pytest.ini b/pytest.ini
index 52ad95f..6c299d1 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -28,3 +28,4 @@ env =
     MXNET_HOME=tests/data
 
 timeout = 1200
+faulthandler_timeout = 1200
diff --git a/src/operator/nn/batch_norm.cu b/src/operator/nn/batch_norm.cu
index be9309c..84d1cec 100644
--- a/src/operator/nn/batch_norm.cu
+++ b/src/operator/nn/batch_norm.cu
@@ -64,15 +64,14 @@ struct ScalarConvert {
 };
 
 // Number of threads in a block given an input size up to MAX_BLOCK_SIZE
-static unsigned getNumThreads(int nElem, const bool smaller) {
-  unsigned threadSizes[5] = {32, 64, 128, 256, MAX_BLOCK_SIZE};
-  const int maxi = smaller ? 4 : 5;
-  for (int i = 0; i != maxi; ++i) {
+static unsigned getNumThreads(int nElem) {
+  unsigned threadSizes[4] = {32, 64, 128, 256};
+  for (int i = 0; i != 4; ++i) {
     if (static_cast<unsigned>(nElem) <= threadSizes[i]) {
       return threadSizes[i];
     }
   }
-  return smaller ? (MAX_BLOCK_SIZE >> 1) : MAX_BLOCK_SIZE;
+  return MAX_BLOCK_SIZE;
 }
 
 // Returns the index of the most significant 1 bit in `val`.
@@ -509,7 +508,7 @@ static void 
BatchNormalizationUpdateOutput(mshadow::Stream<gpu> *s,
 
   if ((flags & IS_TRAINING_FLAG) == 0 || (flags & USE_GLOBAL_STATS_FLAG) != 0) 
{
     dim3 blocks(input.ChannelCount());
-    dim3 threads(batchnorm::cuda::getNumThreads(input.InnerSize(), false));
+    dim3 threads(batchnorm::cuda::getNumThreads(input.InnerSize()));
     BatchNormalizationUpdateOutputInferenceKernel<DType, AccReal, 
DeviceTensor1,
       batchnorm::BNTensor3<DType>>
       <<< blocks, threads, 0, mshadow::Stream<gpu>::GetStream(s) >>> (
@@ -517,7 +516,7 @@ static void 
BatchNormalizationUpdateOutput(mshadow::Stream<gpu> *s,
         saveInvStd, weight, bias, eps, flags);
   } else {
     dim3 blocks(input.ChannelCount());
-    dim3 threads(batchnorm::cuda::getNumThreads(input.InnerSize(), false));
+    dim3 threads(batchnorm::cuda::getNumThreads(input.InnerSize()));
     BatchNormalizationUpdateOutputKernel<DType, AccReal, DeviceTensor1,
       batchnorm::BNTensor3<DType>>
       << < blocks, threads, 0, mshadow::Stream<gpu>::GetStream(s) >> > (
@@ -559,13 +558,8 @@ static void 
BatchNormalizationBackward(mshadow::Stream<gpu> *s,
   tensors.saveInvStd = devicetensor<AccReal, 1>(out_data[batchnorm::kVar]);
 
   DCHECK_GT(tensors.weight.numElements(), 0);
-#ifdef NDEBUG
-  constexpr bool SMALLER_THREADS = false;
-#else
-  constexpr bool SMALLER_THREADS = true;
-#endif
   dim3 blocks(gradOutput.ChannelCount());
-  dim3 threads(batchnorm::cuda::getNumThreads(gradOutput.InnerSize(), 
SMALLER_THREADS));
+  dim3 threads(batchnorm::cuda::getNumThreads(gradOutput.InnerSize()));
   BatchNormalizationBackwardKernel<DType, AccReal, DeviceTensor1, 
batchnorm::BNTensor3<DType>>
     <<< blocks, threads, 0, mshadow::Stream<gpu>::GetStream(s) >>> (
     input, gradOutput, gradInput, tensors, flags, momentum, eps);
diff --git a/tests/python/unittest/test_gluon_rnn.py 
b/tests/python/unittest/test_gluon_rnn.py
index bed97ed..4c3c905 100644
--- a/tests/python/unittest/test_gluon_rnn.py
+++ b/tests/python/unittest/test_gluon_rnn.py
@@ -487,8 +487,6 @@ def check_rnn_forward_backward(layer, merged_inputs, 
hybridize, merge_outputs, d
 @pytest.mark.parametrize('merged_inputs', [True, False])
 @pytest.mark.parametrize('hybridize', [True, False])
 @pytest.mark.parametrize('merge_outputs', [True, False, None])
[email protected](mx.context.current_context().device_type == 'gpu',
-                    reason='Test worker crashes on GPU. Tracked in #18225')
 def test_rnn_forward_backward(layer, merged_inputs, hybridize, merge_outputs, 
determinism):
     check_rnn_forward_backward(layer, merged_inputs, hybridize, merge_outputs, 
determinism)
 
@@ -502,8 +500,6 @@ def test_rnn_forward_backward(layer, merged_inputs, 
hybridize, merge_outputs, de
 @pytest.mark.parametrize('merged_inputs', [True, False])
 @pytest.mark.parametrize('hybridize', [True, False])
 @pytest.mark.parametrize('merge_outputs', [True, False, None])
[email protected](mx.context.current_context().device_type == 'gpu',
-                    reason='Test worker crashes on GPU. Tracked in #18225')
 def test_sequential_rnn_cells(seq_rnn_type, determinism, merged_inputs, 
hybridize, merge_outputs):
     net = gluon.rnn.SequentialRNNCell()
     net.add(gluon.rnn.LSTMCell(10, input_size=5))

Reply via email to