Repository: incubator-systemml
Updated Branches:
  refs/heads/master 9ee569e0f -> 59ff8b3d4


[HOTFIX] [SYSTEMML-540] Enabled commandline statistics and disabled native by 
default

- Fixed a bug that disabled statistics when SystemML is invoked from
  commandline.
- When change was made from boolean native.blas to string, a bug was
  introduced which enabled native BLAS by default. This commit fixes that
  bug.
- Removed OpenMP dependency for MKL-based native backend by using DNN
  primitives in MKL. The performance of these primitives is comparable to
  that implemented by OpenMP and future-proofs us from hardware
  enhancement. It also will help us to support OS where gomp is not easily
  available such as Mac.


Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/59ff8b3d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/59ff8b3d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/59ff8b3d

Branch: refs/heads/master
Commit: 59ff8b3d4e38d5f0ea38300df237345c86f5de1a
Parents: 9ee569e
Author: Niketan Pansare <npan...@us.ibm.com>
Authored: Sat May 13 08:07:54 2017 -0700
Committer: Niketan Pansare <npan...@us.ibm.com>
Committed: Sat May 13 08:07:54 2017 -0700

----------------------------------------------------------------------
 conf/SystemML-config.xml.template               |   2 +-
 src/main/cpp/CMakeLists.txt                     |  16 +--
 .../cpp/lib/libpreload_systemml-Linux-x86_64.so | Bin 7976 -> 0 bytes
 .../cpp/lib/libsystemml_mkl-Linux-x86_64.so     | Bin 31824 -> 27504 bytes
 src/main/cpp/libmatrixdnn.cpp                   | 117 ++++++++++++++++++-
 src/main/cpp/libmatrixdnn.h                     |   8 ++
 src/main/cpp/preload/preload_systemml.cpp       |  35 ------
 src/main/cpp/preload/preload_systemml.h         |  40 -------
 src/main/cpp/systemml.cpp                       |   4 +-
 .../java/org/apache/sysml/api/DMLScript.java    |   2 +-
 .../apache/sysml/api/ScriptExecutorUtils.java   |  18 +--
 .../sysml/api/mlcontext/ScriptExecutor.java     |   2 +-
 .../java/org/apache/sysml/conf/DMLConfig.java   |   2 +-
 .../org/apache/sysml/utils/NativeHelper.java    |  14 ---
 14 files changed, 143 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/conf/SystemML-config.xml.template
----------------------------------------------------------------------
diff --git a/conf/SystemML-config.xml.template 
b/conf/SystemML-config.xml.template
index 8092ca6..e026f8e 100644
--- a/conf/SystemML-config.xml.template
+++ b/conf/SystemML-config.xml.template
@@ -67,7 +67,7 @@
    <codegen.literals>1</codegen.literals>
    
    <!-- enables native blas for matrix multiplication and convolution, 
experimental feature (options: auto, mkl, openblas, none) -->
-   <native.blas>auto</native.blas>
+   <native.blas>none</native.blas>
 
    <!-- prints extra statistics information for GPU -->
    <systemml.stats.extraGPU>false</systemml.stats.extraGPU>

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
index c492959..47555bf 100644
--- a/src/main/cpp/CMakeLists.txt
+++ b/src/main/cpp/CMakeLists.txt
@@ -23,27 +23,21 @@ project (systemml)
 # All custom find modules
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
 
-# OpenMP is required
-find_package(OpenMP REQUIRED)
-
 # Options to Use OpenBLAS or Intel MKL
 option(USE_OPEN_BLAS "Whether to use OpenBLAS (Defaults to compiling with 
Intel MKL, if both set, MKL has priority)" OFF)
 option(USE_INTEL_MKL "Whether to use Intel MKL (Defaults to compiling with 
Intel MKL)" ON)
 
 # Build a shared libraray
 add_library(systemml SHARED libmatrixdnn.cpp  libmatrixmult.cpp  systemml.cpp)
-add_library(preload SHARED preload/preload_systemml.cpp)
 
 set(MATH_LIBRARIES "")
 
 # sets the installation path to src/main/cpp/lib
 set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})
-install(TARGETS systemml preload LIBRARY DESTINATION lib)
+install(TARGETS systemml LIBRARY DESTINATION lib)
 
 set(CMAKE_BUILD_TYPE Release)
 
-set_target_properties(preload PROPERTIES OUTPUT_NAME 
"preload_systemml-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
-
 if (USE_OPEN_BLAS)
   find_package(OpenBLAS REQUIRED)
   # sets the name of the output to include the os and the architecture
@@ -73,4 +67,10 @@ include_directories(${CMAKE_BINARY_DIR})
 
 
 # Setting CXX compiler flags
-set_target_properties(systemml PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS} 
${MATH_LIBRARIES}")
+if (USE_OPEN_BLAS)
+  # OpenMP is required
+  find_package(OpenMP REQUIRED)
+  set_target_properties(systemml PROPERTIES LINK_FLAGS "${OpenMP_CXX_FLAGS} 
${MATH_LIBRARIES}")
+elseif(USE_INTEL_MKL)
+  set_target_properties(systemml PROPERTIES LINK_FLAGS ${MATH_LIBRARIES}")
+endif()

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/lib/libpreload_systemml-Linux-x86_64.so
----------------------------------------------------------------------
diff --git a/src/main/cpp/lib/libpreload_systemml-Linux-x86_64.so 
b/src/main/cpp/lib/libpreload_systemml-Linux-x86_64.so
deleted file mode 100755
index 07e89be..0000000
Binary files a/src/main/cpp/lib/libpreload_systemml-Linux-x86_64.so and 
/dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/lib/libsystemml_mkl-Linux-x86_64.so
----------------------------------------------------------------------
diff --git a/src/main/cpp/lib/libsystemml_mkl-Linux-x86_64.so 
b/src/main/cpp/lib/libsystemml_mkl-Linux-x86_64.so
index a740930..9793b33 100755
Binary files a/src/main/cpp/lib/libsystemml_mkl-Linux-x86_64.so and 
b/src/main/cpp/lib/libsystemml_mkl-Linux-x86_64.so differ

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/libmatrixdnn.cpp
----------------------------------------------------------------------
diff --git a/src/main/cpp/libmatrixdnn.cpp b/src/main/cpp/libmatrixdnn.cpp
index ed02042..d6a09b7 100644
--- a/src/main/cpp/libmatrixdnn.cpp
+++ b/src/main/cpp/libmatrixdnn.cpp
@@ -25,11 +25,17 @@
 #include <cstdio>
 #include <cmath>
 #include <cstring>
-#include "omp.h"
+#ifdef USE_INTEL_MKL
+  #include "mkl_dnn.h"
+#else
+  #include "omp.h"
+#endif
 
 int computeNNZ(double* arr, int limit) {
   int nnz = 0;
+#ifndef USE_INTEL_MKL
   #pragma omp parallel for reduction(+: nnz)
+#endif
   for(int i=0; i<limit; i++)
     nnz += (arr[i]!=0) ? 1 : 0;
   return nnz;
@@ -129,16 +135,52 @@ void im2col(double* inputArray, double* outputArray, int 
N, int C, int H, int W,
       }
     }
   }
-} 
+}
 
+#ifdef USE_INTEL_MKL
+// Returns true if error
+bool MKL_DNN_ERROR(dnnError_t code) {
+  if(code == E_SUCCESS) return false;
+  else if(code == E_INCORRECT_INPUT_PARAMETER) std::cerr << "ERROR: Incorrect 
input parameter\n";
+  else if(code == E_MEMORY_ERROR) std::cerr << "ERROR: Memory error\n";
+  else if(code == E_UNSUPPORTED_DIMENSION) std::cerr << "ERROR: Unsupported 
dimensions\n";
+  else if(code == E_UNIMPLEMENTED) std::cerr << "ERROR: Unimplemented 
operation\n";
+  return true;
+} 
+#endif
 
 int conv2dBackwardFilterDense(double* inputPtr, double* doutPtr, double* 
retPtr, int N, int C, int H, int W, int K, int R, int S,
     int stride_h, int stride_w, int pad_h, int pad_w, int P, int Q, int 
numThreads) {
+  int CRS = C*R*S;
+#ifdef USE_INTEL_MKL
+  setNumThreadsForBLAS(numThreads);
+  // Step 1: Create a description of a DNN operation
+  dnnPrimitive_t pConvolution;
+  size_t dimension = 4;
+  size_t srcSize[4] = {W, H, C, N};
+  size_t dstSize[4] = {Q, P, K, N};
+  size_t filterSize[4] = {S, R, C, K};
+  size_t convolutionStrides[2] = {stride_w, stride_h};
+  int pads[2] = {-pad_w, -pad_h};
+  void* resources[dnnResourceNumber] = {0};
+  resources[dnnResourceDiffDst] = doutPtr;
+  resources[dnnResourceSrc] = inputPtr;
+  resources[dnnResourceDiffFilter] = retPtr;
+  dnnConvolutionCreateBackwardFilter_F64(&pConvolution, NULL, 
dnnAlgorithmConvolutionDirect, dimension, 
+      srcSize, dstSize, filterSize, convolutionStrides, pads, dnnBorderZeros);
+  
+  // Step 2: Perform the DNN operation
+  if(MKL_DNN_ERROR(dnnExecute_F64(pConvolution, resources))) {
+    return -1; // nnz == -1 indicates error.
+  }
+  
+  // Step 3: Destroy the description of the operation
+  dnnDelete_F64(pConvolution);
+#else
   // First step: Avoids oversubscription and other openmp/internal blas 
threading issues
   setNumThreadsForBLAS(1);
   
   int CHW = C * H * W;
-  int CRS = C*R*S;
   int PQ = P*Q;
   int KPQ = K*PQ;
   int numRotatedElem = KPQ;
@@ -197,16 +239,42 @@ int conv2dBackwardFilterDense(double* inputPtr, double* 
doutPtr, double* retPtr,
   }
   
   delete [] temp;
+#endif
   return computeNNZ(retPtr, K*CRS);
 }
 
 int conv2dBackwardDataDense(double* filterPtr, double* doutPtr, double* 
retPtr, int N, int C, int H, int W, int K, int R, int S,
     int stride_h, int stride_w, int pad_h, int pad_w, int P, int Q, int 
numThreads) {
+  int CHW = C * H * W;
+#ifdef USE_INTEL_MKL
+  setNumThreadsForBLAS(numThreads);
+  // Step 1: Create a description of a DNN operation
+  dnnPrimitive_t pConvolution;
+  size_t dimension = 4;
+  size_t srcSize[4] = {W, H, C, N};
+  size_t dstSize[4] = {Q, P, K, N};
+  size_t filterSize[4] = {S, R, C, K};
+  size_t convolutionStrides[2] = {stride_w, stride_h};
+  int pads[2] = {-pad_w, -pad_h};
+  void* resources[dnnResourceNumber] = {0};
+  resources[dnnResourceDiffDst] = doutPtr;
+  resources[dnnResourceFilter] = filterPtr;
+  resources[dnnResourceDiffSrc] = retPtr;
+  dnnConvolutionCreateBackwardData_F64(&pConvolution, NULL, 
dnnAlgorithmConvolutionDirect, dimension, 
+      srcSize, dstSize, filterSize, convolutionStrides, pads, dnnBorderZeros);
+  
+  // Step 2: Perform the DNN operation
+  if(MKL_DNN_ERROR(dnnExecute_F64(pConvolution, resources))) {
+    return -1; // nnz == -1 indicates error.
+  }
+  
+  // Step 3: Destroy the description of the operation
+  dnnDelete_F64(pConvolution);
+#else 
    // First step: Avoids oversubscription and other openmp/internal blas 
threading issues
   setNumThreadsForBLAS(1);
   
   int CRS = C * R * S;
-  int CHW = C * H * W;
   int PQ = P * Q;
   int KPQ = K * PQ;
   int numRotatedElem = PQ * K;
@@ -240,6 +308,7 @@ int conv2dBackwardDataDense(double* filterPtr, double* 
doutPtr, double* retPtr,
   
   delete [] rotatedDoutPtrArrays;
   delete [] col2imInputArrays;
+#endif
   return computeNNZ(retPtr, N*CHW);
 }
 
@@ -306,11 +375,45 @@ void conv2dBackwardFilterSparseDense(int apos, int alen, 
int* aix, double* avals
 
 int conv2dBiasAddDense(double* inputPtr, double* biasPtr, double* filterPtr, 
double* retPtr, int N, int C, int H, int W, int K, int R, int S,
     int stride_h, int stride_w, int pad_h, int pad_w, int P, int Q, bool 
addBias, int numThreads) {
+  int KPQ = K * P * Q;
+  
+#ifdef USE_INTEL_MKL
+  setNumThreadsForBLAS(numThreads);
+  // Step 1: Create a description of a DNN operation
+  dnnPrimitive_t pConvolution;
+  size_t dimension = 4;
+  size_t srcSize[4] = {W, H, C, N};
+  size_t dstSize[4] = {Q, P, K, N};
+  size_t filterSize[4] = {S, R, C, K};
+  size_t convolutionStrides[2] = {stride_w, stride_h};
+  int pads[2] = {-pad_w, -pad_h};
+  void* resources[dnnResourceNumber] = {0};
+  resources[dnnResourceSrc] = inputPtr;
+  resources[dnnResourceFilter] = filterPtr;
+  resources[dnnResourceDst] = retPtr;
+  if(addBias) {
+    dnnConvolutionCreateForwardBias_F64(&pConvolution, NULL, 
dnnAlgorithmConvolutionDirect, dimension, 
+      srcSize, dstSize, filterSize, convolutionStrides, pads, dnnBorderZeros);
+    resources[dnnResourceBias] = biasPtr;
+  }
+  else { 
+    dnnConvolutionCreateForward_F64(&pConvolution, NULL, 
dnnAlgorithmConvolutionDirect, dimension, 
+      srcSize, dstSize, filterSize, convolutionStrides, pads, dnnBorderZeros);
+  }
+  
+  // Step 2: Perform the DNN operation
+  if(MKL_DNN_ERROR(dnnExecute_F64(pConvolution, resources))) {
+    return -1; // nnz == -1 indicates error.
+  }
+  
+  // Step 3: Destroy the description of the operation
+  dnnDelete_F64(pConvolution);
+#else 
+  // 
------------------------------------------------------------------------------------
   // First step:  Avoids oversubscription and other openmp/internal blas 
threading issues
   setNumThreadsForBLAS(1);
   
   int CHW = C * H * W;
-  int KPQ = K * P * Q;
   int PQ = P * Q;
   int numIm2ColElem = C * R * S * P * Q;
   
@@ -343,7 +446,9 @@ int conv2dBiasAddDense(double* inputPtr, double* biasPtr, 
double* filterPtr, dou
                }
     }
   } // end omp parallel for
-  
   delete [] loweredMatArrays;
+  // 
------------------------------------------------------------------------------------
+#endif
+  
   return computeNNZ(retPtr, N*KPQ);
 }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/libmatrixdnn.h
----------------------------------------------------------------------
diff --git a/src/main/cpp/libmatrixdnn.h b/src/main/cpp/libmatrixdnn.h
index 86e7b24..f7d746f 100644
--- a/src/main/cpp/libmatrixdnn.h
+++ b/src/main/cpp/libmatrixdnn.h
@@ -20,6 +20,14 @@
 #ifndef _libmatrixdnn_h
 #define _libmatrixdnn_h
 
+#ifdef USE_INTEL_MKL
+       #include <mkl.h>
+       #if INTEL_MKL_VERSION < 20170000
+               // Will throw an error at development time in non-standard 
settings
+               PLEASE DONOT COMPILE SHARED LIBRARIES WITH OLDER MKL VERSIONS
+       #endif
+#endif
+
 int conv2dBackwardFilterDense(double* inputPtr, double* doutPtr, double* 
retPtr, int N, int C, int H, int W, int K, int R, int S,
     int stride_h, int stride_w, int pad_h, int pad_w, int P, int Q, int 
numThreads);
 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/preload/preload_systemml.cpp
----------------------------------------------------------------------
diff --git a/src/main/cpp/preload/preload_systemml.cpp 
b/src/main/cpp/preload/preload_systemml.cpp
deleted file mode 100644
index 6ee20e0..0000000
--- a/src/main/cpp/preload/preload_systemml.cpp
+++ /dev/null
@@ -1,35 +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.
- */
-#include "preload_systemml.h" 
-#include <cstdlib>
- 
-//  g++ -o libpreload_systemml-linux-x86_64.so preload_systemml.cpp  
-I$JAVA_HOME/include -I$JAVA_HOME/include/linux -lm -ldl -O3 -shared -fPIC
-JNIEXPORT void JNICALL 
Java_org_apache_sysml_utils_EnvironmentHelper_setEnv(JNIEnv * env, jclass c, 
jstring jname, jstring jvalue) {
-       const char* name = (env)->GetStringUTFChars(jname, NULL);
-       const char* value = (env)->GetStringUTFChars(jvalue,NULL);
-#if defined _WIN32 || defined _WIN64 
-       _putenv_s(name, value);
-#else 
-       setenv(name, value, 1);
-#endif
-       (env)->ReleaseStringUTFChars(jname, name); 
-       (env)->ReleaseStringUTFChars(jvalue, value);
-}
- 
- 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/preload/preload_systemml.h
----------------------------------------------------------------------
diff --git a/src/main/cpp/preload/preload_systemml.h 
b/src/main/cpp/preload/preload_systemml.h
deleted file mode 100644
index 79d58f8..0000000
--- a/src/main/cpp/preload/preload_systemml.h
+++ /dev/null
@@ -1,40 +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.
- */
-
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class org_apache_sysml_utils_EnvironmentHelper */
-
-#ifndef _Included_org_apache_sysml_utils_EnvironmentHelper
-#define _Included_org_apache_sysml_utils_EnvironmentHelper
-#ifdef __cplusplus
-extern "C" {
-#endif
-/*
- * Class:     org_apache_sysml_utils_EnvironmentHelper
- * Method:    setEnv
- * Signature: (Ljava/lang/String;Ljava/lang/String;)V
- */
-JNIEXPORT void JNICALL Java_org_apache_sysml_utils_EnvironmentHelper_setEnv
-  (JNIEnv *, jclass, jstring, jstring);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/cpp/systemml.cpp
----------------------------------------------------------------------
diff --git a/src/main/cpp/systemml.cpp b/src/main/cpp/systemml.cpp
index 34ae248..0f00afd 100644
--- a/src/main/cpp/systemml.cpp
+++ b/src/main/cpp/systemml.cpp
@@ -23,10 +23,10 @@
 #include "libmatrixdnn.h"
 
 // Linux:
-// g++ -o lib/libsystemml_mkl-Linux-x86_64.so *.cpp  -I$JAVA_HOME/include 
-I$MKLROOT/include -I$JAVA_HOME/include/linux -lmkl_rt -lpthread  -lm -ldl 
-DUSE_INTEL_MKL -DUSE_GNU_THREADING -L$MKLROOT/lib/intel64 -m64 -fopenmp -O3 
-shared -fPIC
+// g++ -o lib/libsystemml_mkl-Linux-x86_64.so *.cpp  -I$JAVA_HOME/include 
-I$MKLROOT/include -I$JAVA_HOME/include/linux -lmkl_rt -lpthread  -lm -ldl 
-DUSE_INTEL_MKL -DUSE_MKL_DNN -L$MKLROOT/lib/intel64 -m64 -O3 -shared -fPIC
 // g++ -o lib/libsystemml_openblas-Linux-x86_64.so *.cpp  -I$JAVA_HOME/include 
 -I$JAVA_HOME/include/linux -lopenblas -lpthread -lm -ldl -DUSE_OPEN_BLAS 
-I/opt/OpenBLAS/include/ -L/opt/OpenBLAS/lib/ -fopenmp -O3 -shared -fPIC
 
-// Mac OSX:
+// Mac OSX:    
 // g++ -o libsystemml_mkl-linux-x86_64.dylib *.cpp  -I$JAVA_HOME/include 
-I$MKLROOT/include -I$JAVA_HOME/include/linux -lmkl_rt -lpthread  -lm -ldl 
-DUSE_INTEL_MKL -DUSE_GNU_THREADING -L$MKLROOT/lib/intel64 -m64 -fopenmp -O3 
-dynamiclib -fPIC -undefined dynamic_lookup
 // g++ -o libsystemml_openblas-linux-x86_64.dylib *.cpp  -I$JAVA_HOME/include  
-I$JAVA_HOME/include/linux -lopenblas -lpthread -lm -ldl -DUSE_OPEN_BLAS 
-L/opt/OpenBLAS/lib/ -fopenmp -O3 -dynamiclib -fPIC -undefined dynamic_lookup
 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/java/org/apache/sysml/api/DMLScript.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/DMLScript.java 
b/src/main/java/org/apache/sysml/api/DMLScript.java
index ea36b12..5d1f7eb 100644
--- a/src/main/java/org/apache/sysml/api/DMLScript.java
+++ b/src/main/java/org/apache/sysml/api/DMLScript.java
@@ -830,7 +830,7 @@ public class DMLScript
                ExecutionContext ec = null;
                try {
                        ec = ExecutionContextFactory.createContext(rtprog);
-                       ScriptExecutorUtils.executeRuntimeProgram(rtprog, ec, 
dmlconf);
+                       ScriptExecutorUtils.executeRuntimeProgram(rtprog, ec, 
dmlconf, STATISTICS ? STATISTICS_COUNT : 0);
                }
                finally {
                        if(ec != null && ec instanceof SparkExecutionContext)

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java 
b/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
index 0345c62..f582c36 100644
--- a/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
+++ b/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
@@ -19,7 +19,6 @@
 
 package org.apache.sysml.api;
 
-import org.apache.sysml.api.mlcontext.MLContext;
 import org.apache.sysml.api.mlcontext.ScriptExecutor;
 import org.apache.sysml.conf.DMLConfig;
 import org.apache.sysml.hops.codegen.SpoofCompiler;
@@ -41,14 +40,16 @@ public class ScriptExecutorUtils {
         * 
         * @param se
         *            script executor
+        * @param statisticsMaxHeavyHitters
+        *            maximum number of statistics to print
         * @throws DMLRuntimeException
         *             if exception occurs
         */
-       public static void executeRuntimeProgram(ScriptExecutor se) throws 
DMLRuntimeException {
+       public static void executeRuntimeProgram(ScriptExecutor se, int 
statisticsMaxHeavyHitters) throws DMLRuntimeException {
                Program prog = se.getRuntimeProgram();
                ExecutionContext ec = se.getExecutionContext();
                DMLConfig config = se.getConfig();
-               executeRuntimeProgram(prog, ec, config);
+               executeRuntimeProgram(prog, ec, config, 
statisticsMaxHeavyHitters);
        }
 
        /**
@@ -62,10 +63,12 @@ public class ScriptExecutorUtils {
         *            execution context
         * @param dmlconf
         *            dml configuration
+        * @param statisticsMaxHeavyHitters
+        *            maximum number of statistics to print
         * @throws DMLRuntimeException
         *             if error occurs
         */
-       public static void executeRuntimeProgram(Program rtprog, 
ExecutionContext ec, DMLConfig dmlconf)
+       public static void executeRuntimeProgram(Program rtprog, 
ExecutionContext ec, DMLConfig dmlconf, int statisticsMaxHeavyHitters)
                        throws DMLRuntimeException {
                // Whether extra statistics useful for developers and others 
interested
                // in digging into performance problems are recorded and 
displayed
@@ -99,11 +102,10 @@ public class ScriptExecutorUtils {
                        // display statistics (incl caching stats if enabled)
                        Statistics.stopRunTimer();
 
-                       MLContext ml = MLContext.getActiveMLContext();
-                       if ((ml != null) && (ml.isStatistics())) {
-                               int statisticsMaxHeavyHitters = 
ml.getStatisticsMaxHeavyHitters();
+                       if(statisticsMaxHeavyHitters > 0)
                                
System.out.println(Statistics.display(statisticsMaxHeavyHitters));
-                       }
+                       else
+                               System.out.println(Statistics.display());
                }
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/java/org/apache/sysml/api/mlcontext/ScriptExecutor.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/mlcontext/ScriptExecutor.java 
b/src/main/java/org/apache/sysml/api/mlcontext/ScriptExecutor.java
index 1451ebb..8fa4345 100644
--- a/src/main/java/org/apache/sysml/api/mlcontext/ScriptExecutor.java
+++ b/src/main/java/org/apache/sysml/api/mlcontext/ScriptExecutor.java
@@ -405,7 +405,7 @@ public class ScriptExecutor {
         */
        protected void executeRuntimeProgram() {
                try {
-                       ScriptExecutorUtils.executeRuntimeProgram(this);
+                       ScriptExecutorUtils.executeRuntimeProgram(this, 
statistics ? statisticsMaxHeavyHitters : 0);
                } catch (DMLRuntimeException e) {
                        throw new MLContextException("Exception occurred while 
executing runtime program", e);
                }

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/java/org/apache/sysml/conf/DMLConfig.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/conf/DMLConfig.java 
b/src/main/java/org/apache/sysml/conf/DMLConfig.java
index f8577f3..ccd8889 100644
--- a/src/main/java/org/apache/sysml/conf/DMLConfig.java
+++ b/src/main/java/org/apache/sysml/conf/DMLConfig.java
@@ -116,7 +116,7 @@ public class DMLConfig
                _defaultVals.put(CODEGEN,                "false" );
                _defaultVals.put(CODEGEN_PLANCACHE,      "true" );
                _defaultVals.put(CODEGEN_LITERALS,       "1" );
-               _defaultVals.put(NATIVE_BLAS,                            "auto" 
);
+               _defaultVals.put(NATIVE_BLAS,                            "none" 
);
 
                _defaultVals.put(EXTRA_GPU_STATS,       "false" );
                _defaultVals.put(EXTRA_DNN_STATS,       "false" );

http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/59ff8b3d/src/main/java/org/apache/sysml/utils/NativeHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/NativeHelper.java 
b/src/main/java/org/apache/sysml/utils/NativeHelper.java
index fe5e085..883b2a7 100644
--- a/src/main/java/org/apache/sysml/utils/NativeHelper.java
+++ b/src/main/java/org/apache/sysml/utils/NativeHelper.java
@@ -173,20 +173,6 @@ public class NativeHelper {
        
        
        private static boolean isMKLAvailable() {
-               // ------------------------------------------------------------
-               // Set environment variable MKL_THREADING_LAYER to GNU on Linux 
for performance
-               if(!loadLibraryHelper("libpreload_systemml-Linux-x86_64.so")) {
-                       LOG.debug("Unable to load preload_systemml (required 
for loading MKL-enabled SystemML library)");
-                       hintOnFailures = hintOnFailures + " 
libpreload_systemml-Linux-x86_64.so";
-                       return false;
-               }
-               // The most reliable way in my investigation to ensure that MKL 
runs smoothly with OpenMP (used by conv2d*)
-               // is setting the environment variable MKL_THREADING_LAYER to 
GNU
-               EnvironmentHelper.setEnv("MKL_THREADING_LAYER", "GNU");
-               if(!loadBLAS("gomp", "gomp required for loading MKL-enabled 
SystemML library")) 
-                       return false;
-               
-               // ------------------------------------------------------------
                return loadBLAS("mkl_rt", null);
        }
        

Reply via email to