Compiling R with Intel compilers and MKL on Hyak
First, request a
build node, which will have internet access. An hour of time
should be enough to install R and a few packages. Building R (especially the
suggested packages) can be sped up by using multiple build jobs.
srun -p build --mem=10G --cpus-per-task=8 --time=1:00:00 --pty /bin/zsh
To use the Intel compilers and link to MKL on Hyak, load the relevant module. In early 2020, this is accomplished by running
module load icc_19
I add this to my
.zshrc so that the module is loaded every time
I log in. To avoid warnings about building PDF documentation, load TeXLive as
module load contrib/texlive/2017
Next, download the R source from CRAN and extract the contents. For R v3.6.2, this is done using
wget https://cran.r-project.org/src/base/R-3/R-3.6.2.tar.gz tar -xvf R-3.6.2.tar.gz
Following the Intel instructions for building R with
we need to
compilervars.sh script and set a number of
environmental variables. This can be done in a script for convenience. Some
TMB) will break if you include OpenMP in the standard compiler
flags, so these are moved to the more appropriate
variables. The following takes care of these steps.
source /sw/intel-2019/bin/compilervars.sh intel64 export CC="icc" export CXX="icpc" export F77="ifort" export FC="ifort" export AR="xiar" export LD="xild" export CFLAGS="-fPIC -O3 -ipo -xHost -multiple-processes=8" export CXXFLAGS="-fPIC -O3 -ipo -xHost -multiple-processes=8" export FFLAGS="-fPIC -O3 -ipo -xHost -multiple-processes=8" export FCFLAGS="-fPIC -O3 -ipo -xHost -multiple-processes=8" export LDFLAGS="" # OpenMP flags? Need to be here instead of above or TMB breaks? export R_OPENMP_CFLAGS="-qopenmp" export SHLIB_OPENMP_CFLAGS="-qopenmp" export SHLIB_OPENMP_CXXFLAGS="-qopenmp" export SHLIB_OPENMP_FFLAGS="-qopenmp" MKL="-lmkl_rt -liomp5 -lpthread"
Finally, run the
configure script inside the
R-* directory. The
flag should be changed to the directory where the built version should be
./configure --prefix=/gscratch/*/bin/R-3.6.2 \ --enable-R-shlib \ --with-blas=$MKL \ --with-lapack \ --enable-BLAS-shlib
Build and install R
This part is pretty easy once configuration is complete. The
-j flag can be
used to specify the maximum number of parallel jobs to run. This should be equal
--cpus-per-task specified when you requested the build node.
Installation can be accomplised using
Finally, add the
Rscript executables to your
Testing the installation
In order to use multiple cores on a compute node, the
must be greater than one. Note that
--tasks-per-node does not allow multiple
threads to be used by a single process. Watching CPU usage with e.g.
tell you if multithreaded linear algebra is working. So, using an interactive
compute node (such as
stf-int) open your newly-compiled version of R and
X <- matrix(rnorm(5000 * 5000), nrow = 5000) t(X) %*% X
You should see multiple CPUs being used at 100% in
htop. If only one CPU is maxed out, something went wrong.