Repository: incubator-systemml Updated Branches: refs/heads/gh-pages 85137b178 -> 1246604b0
[MINOR] Fixed the format in the native-backend documentation Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/1246604b Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/1246604b Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/1246604b Branch: refs/heads/gh-pages Commit: 1246604b026e32e1679382130c651eca3fc0583f Parents: 85137b1 Author: Niketan Pansare <[email protected]> Authored: Fri May 26 12:46:38 2017 -0700 Committer: Niketan Pansare <[email protected]> Committed: Fri May 26 12:46:38 2017 -0700 ---------------------------------------------------------------------- native-backend.md | 55 +++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/1246604b/native-backend.md ---------------------------------------------------------------------- diff --git a/native-backend.md b/native-backend.md index 33a1a02..01a8bbe 100644 --- a/native-backend.md +++ b/native-backend.md @@ -74,7 +74,7 @@ sudo make install # After installation, you may also want to add `/opt/OpenBLAS/lib` to your LD_LIBRARY_PATH or `java.library.path`. ``` -We also depend on GNU OpenMP (gomp) which will be installed by GCC. +When using OpenBLAS, we also depend on GNU OpenMP (gomp) which will be installed by GCC. To find the location of `gomp` on your system, please use the command `ldconfig -p | grep libgomp`. If gomp is available as `/lib64/libgomp.so.1` instead of `/lib64/libgomp.so`, please add a softlink to it: @@ -149,8 +149,9 @@ is considerably slower than than the corresponding single-precision MKL DNN pri as of MKL 2017 Update 1. We anticipate that this performance bug will be fixed in the future MKL versions. Until then or until SystemML supports single-precision matrices, we recommend that you use OpenBLAS when using script with `conv2d`. -Here are the runtime performance in seconds of `conv2d` on 64 images of size 256 X 256 with sparsity 0.9 -and 32 filter of size 5x5 with stride = [1,1] and pad=[1,1]. +Here are the end-to-end runtime performance in seconds of 10 `conv2d` operations +on randomly generated 64 images of size 256 X 256 with sparsity 0.9 +and 32 filter of size 5x5 with stride = [1,1] and pad=[1,1]. | | MKL | OpenBLAS | @@ -160,6 +161,9 @@ and 32 filter of size 5x5 with stride = [1,1] and pad=[1,1]. | Single-precision, channels=32 | 10.765 | 21.963 | | Double-precision, channels=32 | 71.118 | 34.881 | +Setup used in the above experiment: +1. Intel MKL 2017 Update 1, OpenBLAS compiled with GNU OpenMP from source using `g++`. +2. CPU: `Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz` # Developer Guide @@ -179,32 +183,37 @@ Also, the C, C++ compilers and their flags are picked up by cmake when set in st For this project, I typically make a directory in the `cpp` folder (this folder) and name it the config I use. For instance, `INTEL` for Intel MKL and `OPENBLAS` for OpenBLAS. -1. Install `g++`, OpenBLAS and MKL using the above instructions +- Install `g++`, OpenBLAS and MKL using the above instructions -2. Set `JAVA_HOME` to JDK. +- Set `JAVA_HOME` to JDK. - export JAVA_HOME=<path to JDK 1.8> +```bash +export JAVA_HOME=<path to JDK 1.8> +``` -3. Install cmake +- Install cmake - # Centos/RedHat - sudo yum install cmake3 - # Ubuntu - sudo apt-get install cmake +```bash +# Centos/RedHat +sudo yum install cmake3 +# Ubuntu +sudo apt-get install cmake +``` -4. Compile the libs using the below script. +- Compile the libs using the below script. - mkdir INTEL && cd INTEL - cmake -DUSE_INTEL_MKL=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS="-DUSE_GNU_THREADING -m64" .. - make install - cd .. - mkdir OPENBLAS && cd OPENBLAS - cmake -DUSE_OPEN_BLAS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS="-m64" .. - make install - cd .. - # The below script helps maintain this document as well as avoid accidental inclusion of non-standard dependencies. - ./check-dependency-linux-x86_64.sh - +```bash +mkdir INTEL && cd INTEL +cmake -DUSE_INTEL_MKL=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS="-DUSE_GNU_THREADING -m64" .. +make install +cd .. +mkdir OPENBLAS && cd OPENBLAS +cmake -DUSE_OPEN_BLAS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DCMAKE_CXX_FLAGS="-m64" .. +make install +cd .. +# The below script helps maintain this document as well as avoid accidental inclusion of non-standard dependencies. +./check-dependency-linux-x86_64.sh +``` The generated library files are placed in src/main/cpp/lib. This location can be changed from the CMakeLists.txt file.
