Skip to content

Instantly share code, notes, and snippets.

@sadatnfs
Last active March 4, 2020 16:29
Show Gist options
  • Save sadatnfs/f4ecb2fbde9446cd4f2135ae17467403 to your computer and use it in GitHub Desktop.
Save sadatnfs/f4ecb2fbde9446cd4f2135ae17467403 to your computer and use it in GitHub Desktop.
Simple steps to install MKL and build R
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