c++rubuntuintel-mkl

Compile R with Intel MKL on Ubuntu 16.04


I installed Intel MKL library by running this:

# keys taken from https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-apt-repo
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB

sudo sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list'
sudo apt-get update && sudo apt-get install intel-mkl-64bit

I added this to ~/.bashrc:

source /opt/intel/bin/compilervars.sh intel64
source /opt/intel/mkl/bin/mklvars.sh intel64

If I try to compile R with Intel MKL it doesn't work:

cd R-3.4.2
source /opt/intel/mkl/bin/mklvars.sh intel64
MKL="-Wl,--no-as-needed -lmkl_gf_lp64 -Wl,--start-group -lmkl_gnu_thread  -lmkl_core  -Wl,--end-group -fopenmp  -ldl -lpthread -lm"
./configure --prefix=/opt/R/R-3.4.2-intel-mkl --enable-R-shlib --with-blas="$MKL" --with-lapack
make && sudo make install

Error message:

/home/pacha/R-3.4.2/bin/exec/R: error while loading shared libraries: libmkl_gf_lp64.so: cannot open shared object file: No such file or directory

But it works compiling with OpenBLAS:

cd R-3.4.2
./configure --prefix=/opt/R/R-3.4.2-openblas --enable-R-shlib --with-blas --with-lapack
make && sudo make install

It works with Ubuntu 17.04+ but not with 16.04 just like this other question using mkl, error while loading shared libraries: libmkl_intel_lp64.so


Solution

  • Old question, but I eventually found a way that I added to my blog https://pacha.dev/blog/2018/04/21/r-multi-threaded-linear-algebra-ubuntu/index.html#r-linked-to-mkl.

    Here are the steps:

    Install MKL

    # Option 1: Use apt-get
    
    # keys taken from https://software.intel.com/en-us/articles/installing-intel-free-libs-and-python-apt-repo
    cd ~/GitHub/r-with-intel-mkl/
    wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
    apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
    
    sudo sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list'
    sudo apt-get update && sudo apt-get install intel-mkl-64bit
    
    # Option 2: Use the installer (works well on Ubuntu 16.04)
    
    cd ~/GitHub/r-with-intel-mkl/
    wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12147/l_mkl_2017.4.239.tgz
    tar xzvf l_mkl_2017.4.239.tgz
    cd l_mkl_2017.4.239
    sudo ./install_GUI.sh
    printf '/opt/intel/lib/intel64\n/opt/intel/mkl/lib/intel64\n' | sudo tee -a /etc/ld.so.conf.d/intel_mkl.conf
    sudo ldconfig
    

    Install R

    # 1: Add RStudio to apt sources
    
    # key added after sudo apt-get update returned a warning following this guide: https://support.rstudio.com/hc/en-us/articles/218004217-Building-R-from-source
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys  51716619E084DAB9
    printf '#CRAN mirror\ndeb https://cran.rstudio.com/bin/linux/ubuntu artful/\ndeb-src https://cran.rstudio.com/bin/linux/ubuntu artful/\n' | sudo tee -a /etc/apt/sources.list.d/cran-mirror.list
    
    # 2: Enable development repositories
    
    # you need to enable multiverse repo or packages as xvfb won't be found
    printf 'deb http://us.archive.ubuntu.com/ubuntu artful main restricted universe multiverse
    deb-src http://us.archive.ubuntu.com/ubuntu artful main restricted universe multiverse\n
    deb http://security.ubuntu.com/ubuntu artful-security main restricted universe multiverse
    deb-src http://security.ubuntu.com/ubuntu artful-security main restricted universe multiverse\n
    deb http://us.archive.ubuntu.com/ubuntu artful-updates main restricted universe multiverse
    deb-src http://us.archive.ubuntu.com/ubuntu artful-updates main restricted universe multiverse\n' | sudo tee -a /etc/apt/sources.list
    
    # 3: Update packages
    
    sudo apt-get update
    sudo apt-get clean
    sudo apt-get autoclean
    sudo apt-get autoremove
    sudo apt-get upgrade --with-new-pkgs
    
    # 4: Build R from source
    
    sudo apt-get build-dep r-base
    
    cd ~/GitHub/r-with-intel-mkl
    wget https://cran.r-project.org/src/base/R-3/R-3.4.2.tar.gz
    tar xzvf R-3.4.2.tar.gz
    
    cd R-3.4.2
    source /opt/intel/mkl/bin/mklvars.sh intel64
    BLAS="-L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl"
    ./configure --prefix=/opt/R/3.4.2-mkl --enable-shared --enable-R-shlib --with-blas="$BLAS" --with-lapack
    make && sudo make install
    printf '\nexport RSTUDIO_WHICH_R=/usr/local/bin/R\nexport RSTUDIO_WHICH_R=/opt/R/3.4.2-mkl\n' | tee -a ~/.profile
    
    sudo ln -s /opt/R/3.4.2-mkl/bin/R /usr/local/bin/R