2016-04-28 13:48:11 +02:00
#!/bin/bash
WGET_OPTIONS = "--no-check-certificate"
MRO_VERSION = "3.2.4"
2016-05-01 22:36:35 +02:00
CHECKPOINT_DATE = "2016-04-01"
R_SAMPLE_BENCHMARK = "Rscript sample-benchmark.R"
DIR_BLAP = "/opt/blap-lib"
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
function mro_install {
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
echo "Started installing Microsoft R Open and dependencies."
2016-04-29 22:24:51 +02:00
2016-05-01 22:36:35 +02:00
# update debian repos & upgrade packages
apt-get update
DEBIAN_FRONTEND = noninteractive apt-get -y -o Dpkg::Options::= "--force-confdef" -o Dpkg::Options::= "--force-confnew" upgrade
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
# install new packages for R
apt-get -y install build-essential gfortran ed htop libxml2-dev ca-certificates curl libcurl4-openssl-dev gdebi-core sshpass git cpufrequtils
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
# disable CPU throttling for ATLAS multi-threading
echo performance | tee /sys/devices/system/cpu/cpu**/cpufreq/scaling_governor
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
# hack with Microsoft R Open deps
wget ${ WGET_OPTIONS } http://ftp.pl.debian.org/debian/pool/main/libj/libjpeg8/libjpeg8_8d1-2_amd64.deb
gdebi -n libjpeg8_8d1-2_amd64.deb
rm libjpeg8_8d1-2_amd64.deb
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
# install Microsoft R Open
wget ${ WGET_OPTIONS } https://mran.microsoft.com/install/mro/${ MRO_VERSION } /MRO-${ MRO_VERSION } -Ubuntu-15.4.x86_64.deb
gdebi -n MRO-${ MRO_VERSION } -Ubuntu-15.4.x86_64.deb
rm MRO-${ MRO_VERSION } -Ubuntu-15.4.x86_64.deb
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
# make symbolic link to R libraries dir
ln -s /usr/lib64/MRO-${ MRO_VERSION } /R-${ MRO_VERSION } /lib/R/lib/ /opt/MRO-lib
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
# prepare R checkpoint
mkdir ~/.checkpoint
Rscript -e " library(checkpoint); checkpoint(' ${ CHECKPOINT_DATE } ') "
sed -i " 1i\library(checkpoint); checkpoint(' ${ CHECKPOINT_DATE } ', scanForPackages=FALSE, verbose=FALSE) " sample-benchmark.R
# make directory for BLAS and LAPACK libraries
mkdir -p ${ DIR_BLAP }
# clean archives
apt-get clean
echo "Finished installing Microsoft R Open and dependencies."
}
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
##############################################################
## CPU ##
##############################################################
##############################################################
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
# netlib #
# - http://www.netlib.org/ #
# - BLAS + LAPACK #
# - single-threaded (reference) #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
DIR_NETLIB = " ${ DIR_BLAP } /netlib "
function netlib_install {
echo "Started installing netlib."
mkdir ${ DIR_NETLIB }
apt-get -y install libblas3 liblapack3
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
cp /usr/lib/libblas/libblas.so.3.0 ${ DIR_NETLIB }
cp /usr/lib/lapack/liblapack.so.3.0 ${ DIR_NETLIB }
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
apt-get -y purge libblas3 liblapack3
apt-get clean
echo "Installed files:"
find ${ DIR_NETLIB } -type f
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
echo "Finished installing netlib."
}
function netlib_check {
echo "Started checking netlib."
LD_PRELOAD = " ${ DIR_NETLIB } /libblas.so.3.0 ${ DIR_NETLIB } /liblapack.so.3.0 " ${ R_SAMPLE_BENCHMARK }
echo "Finished checking netlib."
}
2016-04-29 14:07:28 +02:00
##############################################################
# ATLAS (st) #
# - http://math-atlas.sourceforge.net/ #
# - BLAS + LAPACK #
# - single-threaded #
##############################################################
2016-05-01 22:36:35 +02:00
DIR_ATLAS_ST = " ${ DIR_BLAP } /atlas-st "
function atlas_st_install {
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
echo "Started installing ATLAS (single-threaded)."
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
mkdir ${ DIR_ATLAS_ST }
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
apt-get -y install libatlas3-base
cp /usr/lib/atlas-base/libatlas.so.3 ${ DIR_ATLAS_ST }
cp /usr/lib/atlas-base/atlas/libblas.so.3 ${ DIR_ATLAS_ST }
cp /usr/lib/atlas-base/atlas/liblapack.so.3 ${ DIR_ATLAS_ST }
apt-get -y purge libatlas3-base
apt-get clean
echo "Installed files:"
find ${ DIR_ATLAS_ST } -type f
echo "Finished installing ATLAS (single-threaded)."
}
function atlas_st_check {
echo "Started checking ATLAS (single-threaded)."
LD_PRELOAD = " ${ DIR_ATLAS_ST } /libatlas.so.3 ${ DIR_ATLAS_ST } /libblas.so.3 ${ DIR_ATLAS_ST } /liblapack.so.3 " ${ R_SAMPLE_BENCHMARK }
echo "Finished checking ATLAS (single-threaded)."
}
2016-04-29 14:07:28 +02:00
##############################################################
# OpenBLAS #
# - http://www.openblas.net/ #
# - BLAS + LAPACK #
# - multi-threaded #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
DIR_OPENBLAS = " ${ DIR_BLAP } /openblas "
function openblas_install {
echo "Started installing OpenBLAS."
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
mkdir ${ DIR_OPENBLAS }
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
apt-get -y install libopenblas-base
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
cp /usr/lib/libopenblas.so.0 ${ DIR_OPENBLAS }
cp /usr/lib/openblas-base/libblas.so.3 ${ DIR_OPENBLAS }
cp /usr/lib/openblas-base/liblapack.so.3 ${ DIR_OPENBLAS }
apt-get -y purge libopenblas-base
apt-get clean
echo "Installed files:"
find ${ DIR_OPENBLAS } -type f
echo "Finished installing OpenBLAS."
}
function openblas_check {
echo "Started checking OpenBLAS."
LD_PRELOAD = " ${ DIR_OPENBLAS } /libopenblas.so.0 ${ DIR_OPENBLAS } /libblas.so.3 ${ DIR_OPENBLAS } /liblapack.so.3 " ${ R_SAMPLE_BENCHMARK }
echo "Finished checking OpenBLAS."
}
2016-04-29 14:07:28 +02:00
##############################################################
# ATLAS (mt) #
# - http://math-atlas.sourceforge.net/ #
2016-05-01 22:36:35 +02:00
# - BLAS + netlib LAPACK #
2016-04-29 14:07:28 +02:00
# - multi-threaded #
##############################################################
2016-05-01 22:36:35 +02:00
DIR_ATLAS_MT = " ${ DIR_BLAP } /atlas-mt "
function atlas_mt_install {
echo "Started installing ATLAS (multi-threaded)."
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
mkdir ${ DIR_ATLAS_MT }
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
curl -L https://sourceforge.net/projects/math-atlas/files/Developer%20%28unstable%29/3.11.38/atlas3.11.38.tar.bz2/download > atlas3.11.38.tar.bz2
tar -xvf atlas3.11.38.tar.bz2
rm atlas3.11.38.tar.bz2
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
cd ATLAS
mkdir build
cd build
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
wget ${ WGET_OPTIONS } http://www.netlib.org/lapack/lapack-3.6.0.tgz
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
../configure --shared --with-netlib-lapack-tarfile= ` pwd ` /lapack-3.6.0.tgz
make
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
cp lib/libtatlas.so ${ DIR_ATLAS_MT }
cd ../../
rm -r ATLAS
echo "Installed files:"
find ${ DIR_ATLAS_MT } -type f
echo "Finished installing ATLAS (multi-threaded)."
}
function atlas_mt_check {
echo "Started checking ATLAS (multi-threaded)."
LD_PRELOAD = " ${ DIR_ATLAS_MT } /libtatlas.so " ${ R_SAMPLE_BENCHMARK }
echo "Finished checking ATLAS (multi-threaded)."
}
2016-04-29 14:07:28 +02:00
##############################################################
# GotoBLAS2 #
# - https://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/ #
# - BLAS + LAPACK #
# - multi-threaded #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
DIR_GOTOBLAS2 = " ${ DIR_BLAP } /gotoblas2 "
function gotoblas2_install {
echo "Started installing GotoBLAS2."
mkdir ${ DIR_GOTOBLAS2 }
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
wget ${ WGET_OPTIONS } https://prs.ism.ac.jp/~nakama/SurviveGotoBLAS2/SurviveGotoBLAS2_3.141.tar.gz
tar -xvf SurviveGotoBLAS2_3.141.tar.gz
rm SurviveGotoBLAS2_3.141.tar.gz
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
cd survivegotoblas2-3.141
make REFBLAS_ANTILOGY = 1 NO_CBLAS = 1 GOTOBLASLIBSONAME = libgoto2blas.so GOTOLAPACKLIBSONAME = libgoto2lapack.so -j ` nproc`
cp exports/libgoto2blas.so ${ DIR_GOTOBLAS2 }
cp exports/libgoto2lapack.so ${ DIR_GOTOBLAS2 }
cd ..
rm -r survivegotoblas2-3.141
Rscript -e " library(checkpoint); checkpoint(' ${ CHECKPOINT_DATE } ', scanForPackages=FALSE, verbose=FALSE); install.packages('RhpcBLASctl') "
echo "Installed files:"
find ${ DIR_GOTOBLAS2 } -type f
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
echo "Finished installing GotoBLAS2."
}
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
function gotoblas2_check {
echo "Started checking GotoBLAS2."
2016-05-01 22:57:06 +02:00
echo " ${ DIR_GOTOBLAS2 } " > /etc/ld.so.conf.d/gotoblas2.conf
ldconfig
2016-05-01 22:36:35 +02:00
sed "2i\library(RhpcBLASctl); blas_set_num_threads(`nproc`)" sample-benchmark.R > sample-benchmark-gotoblas2.R
LD_PRELOAD = " ${ DIR_GOTOBLAS2 } /libgoto2blas.so ${ DIR_GOTOBLAS2 } /libgoto2lapack.so " GOTO_NUM_THREADS = ` nproc` Rscript sample-benchmark-gotoblas2.R
2016-05-01 22:57:06 +02:00
rm /etc/ld.so.conf.d/gotoblas2.conf
ldconfig
2016-05-01 22:36:35 +02:00
rm sample-benchmark-gotoblas2.R
echo "Finished checking GotoBLAS2."
}
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
# MKL #
# - https://mran.microsoft.com/documents/rro/multithread/ #
# - BLAS + LAPACK #
# - multi-threaded #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
DIR_MKL = " ${ DIR_BLAP } /mkl "
function mkl_install {
echo "Started installing MKL."
mkdir ${ DIR_MKL }
wget ${ WGET_OPTIONS } https://mran.microsoft.com/install/mro/${ MRO_VERSION } /RevoMath-${ MRO_VERSION } .tar.gz
tar -xvzf RevoMath-${ MRO_VERSION } .tar.gz
rm RevoMath-${ MRO_VERSION } .tar.gz
cp RevoMath/mkl/libs/*.so ${ DIR_MKL }
rm RevoMath -r
echo "Installed files:"
find ${ DIR_MKL } -type f
echo "Finished installing MKL."
}
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
function mkl_check {
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
echo "Started checking MKL."
2016-04-29 14:07:28 +02:00
2016-05-01 22:36:35 +02:00
LD_PRELOAD = " ${ DIR_MKL } /libRblas.so ${ DIR_MKL } /libRlapack.so ${ DIR_MKL } /libmkl_vml_mc3.so ${ DIR_MKL } /libmkl_vml_def.so ${ DIR_MKL } /libmkl_gnu_thread.so ${ DIR_MKL } /libmkl_core.so ${ DIR_MKL } /libmkl_gf_lp64.so ${ DIR_MKL } /libiomp5.so ${ DIR_MKL } /libmkl_gf_ilp64.so " MKL_INTERFACE_LAYER = "GNU,LP64" MKL_THREADING_LAYER = "GNU" ${ R_SAMPLE_BENCHMARK }
echo "Finished checking MKL."
}
2016-04-29 14:07:28 +02:00
##############################################################
# BLIS #
# - https://github.com/flame/blis #
# - BLAS #
# - multi-threaded #
##############################################################
2016-05-01 22:36:35 +02:00
DIR_BLIS = " ${ DIR_BLAP } /blis "
function blis_install {
echo "Started installing BLIS."
mkdir ${ DIR_BLIS }
git clone https://github.com/flame/blis.git
cd blis
git checkout 0b01d355ae861754ae2da6c9a545474af010f02e
./configure -t pthreads --enable-shared auto
make -j ` nproc`
cd ..
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
cp ` find ./blis/ -name "libblis.so" ` ${ DIR_BLIS }
2016-04-28 13:48:11 +02:00
2016-05-01 22:36:35 +02:00
rm -r blis
echo "Installed files:"
find ${ DIR_BLIS } -type f
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
echo "Finished installing BLIS."
}
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
function blis_check {
echo "Started checking BLIS."
# TODO: auto set variables according to https://github.com/flame/blis/wiki/Multithreading
LD_PRELOAD = " ${ DIR_BLIS } /libblis.so " BLIS_JC_NT = 2 BLIS_IC_NT = 1 BLIS_JR_NT = 1 BLIS_IR_NT = 1 ${ R_SAMPLE_BENCHMARK }
echo "Finished checking BLIS."
}
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
##############################################################
## GPU ##
##############################################################
##############################################################
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
# clBLAS #
# - https://github.com/clMathLibraries/clBLAS #
# - BLAS #
# - OpenCL #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
function clblas_install {
echo "Started installing clBLAS."
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
wget ${ WGET_OPTIONS } https://github.com/clMathLibraries/clBLAS/archive/v2.10.tar.gz -O clBLAS-2.10.tar.gz
tar -xvzf clBLAS-2.10.tar.gz
rm clBLAS-2.10.tar.gz
#cd clBLAS-2.10
#
#cd ..
echo "TODO!"
echo "Finished installing clBLAS."
}
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
# cuBLAS (NVBLAS) #
# - https://developer.nvidia.com/cublas #
# - BLAS #
# - CUDA #
##############################################################
2016-04-28 20:11:50 +02:00
2016-05-01 22:36:35 +02:00
function cublas_install {
echo "Started installing cuBLAS."
# TODO: cuSOLVE (dense, LAPACK)?
mkdir /opt/blap-lib/cublas
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
# Ubuntu dependencies
wget ${ WGET_OPTIONS } http://de.archive.ubuntu.com/ubuntu/pool/main/x/x-kit/python3-xkit_0.5.0ubuntu2_all.deb
wget ${ WGET_OPTIONS } http://de.archive.ubuntu.com/ubuntu/pool/main/s/screen-resolution-extra/screen-resolution-extra_0.17.1_all.deb
gdebi -n python3-xkit_0.5.0ubuntu2_all.deb
gdebi -n screen-resolution-extra_0.17.1_all.deb
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
wget ${ WGET_OPTIONS } http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1504/x86_64/cuda-repo-ubuntu1504_7.5-18_amd64.deb
gdebi -n cuda-repo-ubuntu1504_7.5-18_amd64.deb
rm cuda-repo-ubuntu1504_7.5-18_amd64.deb
2016-04-29 22:24:51 +02:00
2016-05-01 22:36:35 +02:00
apt-get update
apt-get install cuda
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
echo " NVBLAS_LOGFILE nvblas.log
NVBLAS_CPU_BLAS_LIB /opt/blap-lib/netlib/libblas.so.3.0
NVBLAS_GPU_LIST ALL0
NVBLAS_TILE_DIM 2048
NVBLAS_AUTOPIN_MEM_ENABLED" > /opt/blap-lib/cublas/nvblas.conf
apt-get clean
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
# run R:
# NVBLAS_CONFIG_FILE=/opt/blap-lib/cublas/nvblas.conf LD_PRELOAD="/usr/local/cuda-7.5/targets/x86_64-linux/lib/libnvblas.so.7.5 /usr/local/cuda-7.5/targets/x86_64-linux/lib/libcublas.so.7.5" R
2016-05-01 01:31:19 +02:00
2016-05-01 22:36:35 +02:00
echo "Finished installing cuBLAS."
}
2016-04-28 20:11:50 +02:00
2016-04-29 14:07:28 +02:00
##############################################################
# MAGMA #
# - http://icl.cs.utk.edu/magma/software/ #
# - LAPACK #
# - OpenCL, CUDA #
##############################################################
2016-05-01 22:36:35 +02:00
function magma_install {
echo "Started installing MAGMA."
echo "TODO!"
echo "Finished installing MAGMA."
}
2016-04-29 14:07:28 +02:00
##############################################################
# CULA #
# - http://www.culatools.com/ #
# - LAPACK #
# - CUDA #
##############################################################
2016-05-01 22:36:35 +02:00
function cula_install {
echo "Started installing CULA."
echo "TODO!"
echo "Finished installing CULA."
}
##############################################################
##############################################################
if [ $# -eq 0 ] ; then
echo "No arguments supplied"
else
for i in " $@ "
do
$i
done
fi