Last active
March 4, 2020 16:29
-
-
Save sadatnfs/f4ecb2fbde9446cd4f2135ae17467403 to your computer and use it in GitHub Desktop.
Simple steps to install MKL and build R
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
echo "deb https://apt.repos.intel.com/mkl all main" > /etc/apt/sources.list.d/intel-mkl.list && \ | |
echo "deb https://apt.repos.intel.com/tbb all main" > /etc/apt/sources.list.d/intel-tbb.list && \ | |
echo "deb https://apt.repos.intel.com/daal all main" > /etc/apt/sources.list.d/intel-daal.list && \ | |
echo "deb https://apt.repos.intel.com/mpi all main" > /etc/apt/sources.list.d/intel-mpi.list && \ | |
apt-get update | |
## Set a bunch of envvars (perhaps throw these in your bashrc) | |
MKL_LIB_PATH="/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin" \ | |
MKL="-L/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin -Wl,--no-as-needed -lmkl_gf_lp64 -Wl,--start-group -lmkl_gnu_thread -lmkl_cdft_core -lmkl_core -Wl,--end-group -fopenmp -ldl -lpthread -lm" \ | |
MKLROOT="/opt/intel/compilers_and_libraries/linux/mkl" \ | |
TBB_LIB_PATH="/opt/intel/tbb/lib/intel64_lin/gcc4.7" \ | |
INTEL_LIB_PATH="/opt/intel/lib/intel64_lin" | |
LD_LIBRARY_PATH="/usr/local/lib64:${MKL_LIB_PATH}:${TBB_LIB_PATH}:${INTEL_LIB_PATH}:/usr/lib:/usr/local/lib:${LD_LIBRARY_PATH}" | |
LIBRARY_PATH="${LD_LIBRARY_PATH}" \ | |
MIC_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" \ | |
MIC_LIBRARY_PATH="${MIC_LD_LIBRARY_PATH}" \ | |
CPATH="${MKLROOT}/include:/usr/include:${CPATH}" | |
MKL_DYNAMIC=TRUE \ | |
I_MPI_LINK="opt_mt" \ | |
MKLDNN_LIBRARY=/usr/local/lib \ | |
MKLDNN_INCLUDE_DIR=/usr/local/include \ | |
MKLDNN_LIB_DIR=/usr/local/lib | |
# Install whatever the latest version of the MKL libs are | |
### Check with `apt-cache search intel-mkl-64bit` | |
apt-get install intel-mkl-64bit-2020.0-088 intel-tbb-64bit-2020.0-088 | |
### NOTE: DO NOT use the Intel OpenMP. A lot of basic R packages can't work with it nicely, like data.table | |
## These are all the stuff I do to override existing BLAS/LAPACK with MKL: | |
sudo update-alternatives --install /usr/lib/libmkl_gf_lp64.so libmkl_gf_lp64.so /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libblas.so libblas.so /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libblas.so.0 libblas.so.0 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libopenblas.so libopenblas.so /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libopenblas.so.0 libopenblas.so.0 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libopenblas.so.3 libopenblas.so.3 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/liblapack.so liblapack.so /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/liblapack.so.0 liblapack.so.0 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/libmkl_rt.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libtbbmalloc_debug.so libtbbmalloc_debug.so /opt/intel/tbb/lib/intel64_lin/gcc4.7/libtbbmalloc_debug.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libtbbmalloc.so libtbbmalloc.so /opt/intel/tbb/lib/intel64_lin/gcc4.7/libtbbmalloc.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libtbbmalloc_proxy.so libtbbmalloc_proxy.so /opt/intel/tbb/lib/intel64_lin/gcc4.7/libtbbmalloc_proxy.so 40 && \ | |
sudo update-alternatives --install /usr/lib/libtbb.so libtbb.so /opt/intel/tbb/lib/intel64_lin/gcc4.7/libtbb.so 40 && \ | |
printf '/opt/intel/lib/intel64\n/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin\n/opt/intel/mkl/lib/intel64\n' >> /etc/ld.so.conf.d/mkl.conf && \ | |
printf '/opt/intel/lib/intel64\n/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin\n/opt/intel/mkl/lib/intel64\n' >> /etc/ld.so.conf.d/mkl_intel64.conf && \ | |
# bash '/opt/intel/tbb/bin/tbbvars.sh' intel64 && \ | |
bash '/opt/intel/bin/compilervars.sh' intel64 && \ | |
bash '/opt/intel/compilers_and_libraries/linux/mkl/bin/mklvars.sh' intel64 && \ | |
echo "MKL_THREADING_LAYER=GNU" >> /etc/environment && \ | |
echo "/opt/intel/compilers_and_libraries/linux/tbb/lib/intel64/gcc4.7" >> /etc/ld.so.conf.d/R-dependencies-x86_64.conf && \ | |
echo "/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64" >> /etc/ld.so.conf.d/R-dependencies-x86_64.conf && \ | |
echo "/opt/intel/compilers_and_libraries/linux/compiler/lib/intel64" >> /etc/ld.so.conf.d/R-dependencies-x86_64.conf && \ | |
# echo "/opt/intel/mklml_lnx/lib" >> /etc/ld.so.conf.d/R-dependencies-x86_64.conf && \ | |
echo "/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64" >> /etc/ld.so.conf.d/intel.conf && \ | |
echo "/opt/intel/compilers_and_libraries/linux/tbb/lib/intel64/gcc4.7" >> /etc/ld.so.conf.d/intel.conf && \ | |
echo "/opt/intel/compilers_and_libraries/linux/compiler/lib/intel64" >> /etc/ld.so.conf.d/intel.conf && \ | |
# echo "/opt/intel/mklml_lnx/lib" >> /etc/ld.so.conf.d/intel.conf && \ | |
echo "/opt/intel/daal/lib/intel64_lin/" >> /etc/ld.so.conf.d/intel.conf && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.so /usr/lib/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.so /usr/local/lib64/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.so /usr/local/lib/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.a /usr/lib/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.a /usr/local/lib64/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin/*.a /usr/local/lib/ && \ | |
ln -sf /opt/intel/tbb/lib/intel64_lin/gcc4.7/* /usr/lib/ && \ | |
ln -sf /opt/intel/tbb/lib/intel64_lin/gcc4.7/* /usr/local/lib/ && \ | |
# ln -sf /opt/intel/tbb/include/* /usr/include/ && \ | |
ln -sf /opt/intel/daal/lib/intel64_lin/* /usr/lib/ && \ | |
ln -sf /opt/intel/daal/lib/intel64_lin/* /usr/local/lib/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mpi/intel64/lib/* /usr/lib/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mpi/intel64/lib/* /usr/local/lib/ && \ | |
ln -sf /opt/intel/daal/include/* /usr/include/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/include/* /usr/include/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mkl/include/intel64/lp64/* /usr/include/ && \ | |
ln -sf /opt/intel/compilers_and_libraries/linux/mpi/intel64/bin/* /usr/bin/ && \ | |
## THIS one fixes RcppArmadillo and RStudio issues | |
sudo update-alternatives --install /usr/lib/libstdc++.so.6 libstdc++.so.6 /usr/lib/gcc/x86_64-linux-gnu/9/libstdc++.so 40 && \ | |
sudo ldconfig | |
### Download R source code and start building | |
cd / && \ | |
wget -q https://stat.ethz.ch/R/daily/R-patched.tar.gz -O R-arc.tar.gz && \ | |
mkdir Rdir && tar -xzf R-arc.tar.gz -C Rdir && \ | |
cd /Rdir/R* && \ | |
R_PAPERSIZE=letter \ | |
R_BROWSER=xdg-open \ | |
PAGER=/usr/bin/pager \ | |
PERL=/usr/bin/perl \ | |
R_UNZIPCMD=/usr/bin/unzip \ | |
R_ZIPCMD=/usr/bin/zip \ | |
R_PRINTCMD=/usr/bin/lpr \ | |
LIBnn=lib \ | |
AWK=/usr/bin/awk \ | |
./configure \ | |
libNN=lib \ | |
AR="ar" \ | |
ARFLAGS='"rvU"' \ | |
RANLIB="ranlib" \ | |
CC="gcc" \ | |
CXX="g++ " \ | |
OBJC="cc" \ | |
F95="gfortran" \ | |
FC="gfortran" \ | |
F77="gfortran" \ | |
FF="gfortran" \ | |
CFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -fno-optimize-sibling-calls -msse2 -mfpmath=sse -g -O3 " \ | |
OBJCFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -fno-optimize-sibling-calls -msse2 -mfpmath=sse -g -O3 " \ | |
CPPFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -msse2 -mfpmath=sse -g -O3 " \ | |
CXXFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -msse2 -mfpmath=sse -g -O3 " \ | |
FCFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -msse2 -mfpmath=sse -g -O3 " \ | |
FFLAGS=" -w -fno-gnu-unique -fno-optimize-sibling-calls -DMKL_ILP64 -m64 -I${MKLROOT}/include -I/usr/include -fno-optimize-sibling-calls -msse2 -mfpmath=sse -g -O3 " \ | |
tbb_os="linux" \ | |
OS="linux" \ | |
CPICFLAGS=" -fPIC " \ | |
CXXPICFLAGS=" -fPIC " \ | |
FPICFLAGS=" -fPIC " \ | |
FCPICFLAGS=" -fPIC " \ | |
SHLIB_OPENMP_CFLAGS=" -fopenmp -lgomp " \ | |
SHLIB_OPENMP_CXXFLAGS=" -fopenmp -lgomp " \ | |
SHLIB_OPENMP_FCFLAGS=" -fopenmp -lgomp " \ | |
SHLIB_OPENMP_FFLAGS=" -fopenmp -lgomp " \ | |
--prefix="/opt/R" \ | |
--with-blas=" -L${MKLROOT}/lib/intel64_lin -lmkl_gf_lp64 -lmkl_core -lmkl_gnu_thread -lmkl_cdft_core ${MKLROOT}/lib/intel64/libmkl_scalapack_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_ilp64.a ${MKLROOT}/lib/intel64/libmkl_tbb_thread.a -ltbb -lstdc++ -fopenmp -lpthread -lm -ldl " \ | |
--with-lapack \ | |
--enable-R-shlib \ | |
--enable-shared \ | |
--enable-R-profiling \ | |
--with-tcltk='/usr/lib' \ | |
--with-tk-config="/usr/lib/tkConfig.sh" \ | |
--with-tcl-config="/usr/lib/tclConfig.sh" \ | |
--enable-openmp \ | |
--enable-memory-profiling \ | |
--with-jpeglib \ | |
--with-readline \ | |
--with-cairo \ | |
--with-libpng \ | |
--with-libtiff \ | |
--with-system-tre \ | |
--with-x=yes \ | |
--x-includes=/usr/include/X11 \ | |
--x-libraries=/usr/lib/X11 | |
### At this point, the config summary should show something like: BLAS(MKL); LAPACK (in BLAS) | |
## If so, then continue building | |
make all info pdf install-info install-pdf 2>&1 && \ | |
make install && \ | |
cd src/nmath/standalone && make && make install && \ | |
cp libRmath.so /usr/local/lib/ && \ | |
ln -s /usr/local/lib/libRmath.* /opt/R/lib/R/ && \ | |
ln -s /usr/local/lib/libRmath.* /usr/local/lib64/ && \ | |
ln -sf /opt/R/bin/R /usr/bin/R && \ | |
ln -sf /opt/R/bin/R /usr/local/bin/R && \ | |
ln -sf /opt/R/bin/Rscript /usr/bin/Rscript && \ | |
ln -sf /opt/R/bin/Rscript /usr/local/bin/Rscript && \ | |
cd / && \ | |
# Remove tar \ | |
rm R-arc.tar.gz && \ | |
rm -rf /Rdir && \ | |
echo "alias R='R --no-save'" >> /etc/bash.bashrc && \ | |
chmod -R 777 /opt/R && \ | |
## Reconfig Java | |
R CMD javareconf && \ | |
## Set CRAN repo | |
echo 'local({ r <- getOption("repos"); r["CRAN"] <- "https://cran.cnr.berkeley.edu/"; options(repos = r) })' >> /opt/R/lib/R/library/base/R/Rprofile && \ | |
# Set LDconfigs and header symlinx | |
ln -sf /usr/include/gsl/* /usr/include/ && \ | |
ln -sf /opt/R/include/* /usr/include/ && \ | |
ln -sf /opt/R/lib/R/include/* /usr/include/ && \ | |
ln -sf /opt/R/include/* /usr/local/include/ && \ | |
ln -sf /opt/R/lib/R/include/* /usr/local/include/ && \ | |
ln -sf /opt/R/lib/R/lib/libR.so /usr/lib/ && \ | |
ln -sf /opt/R/lib/R/lib/libR.so /usr/local/lib/ && \ | |
ln -sf /opt/R/lib/R/lib/libR.so /usr/local/lib64/ && \ | |
echo " /opt/R/lib/R " >> /etc/ld.so.conf && \ | |
echo " /opt/R/lib/R/lib " >> /etc/ld.so.conf && ldconfig | |
## Link R shared objects | |
sudo update-alternatives --install /usr/lib/libR.so libR.so /opt/R/lib/R/lib/libR.so 100 && \ | |
sudo update-alternatives --install /usr/lib/libRmath.so libRmath.so /opt/R/lib/R/libRmath.so 100 && \ | |
sudo update-alternatives --install /usr/lib/libRmath.so.1 libRmath.so.1 /opt/R/lib/R/libRmath.so 100 && \ | |
sudo update-alternatives --install /usr/lib/libgsl.so libgsl.so /usr/lib/x86_64-linux-gnu/libgsl.so 100 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment