This is an old revision of the document!
R: Runtime-configuration BLAS/LAPACK
The R Project for Statistical Computing is used on our clusters by a wide variety of scientific disciplines. Though the breadth of applications is wide, many of them require the functionality of BLAS/LAPACK libraries. R provides its own baseline implementations that will build on any system; naturally, one cannot expect these BLAS/LAPACK libraries to be highly performant relative to implementations like:
- Intel Math Kernel Library (MKL)
- Automatically-Tuned Linear Algebra Software (ATLAS)
The build procedure for R allows the package to be configured for building against external BLAS/LAPACK libraries. Once the base R build has completed and the resulting software has been installed, additional R libraries can be configured and installed atop it. It has been noted in the past that:
- Producing N such builds of R that vary only in the choice of underlying BLAS/LAPACK:
- can require on the order of N times the disk space of a single build
- puts a greater burden on the sysadmin to maintain all N similarly-outfitted copies
- R only makes use of standardized BLAS/LAPACK APIs, so any standard BLAS/LAPACK library should be able to be chosen at runtime (not just build time)/
Substituting an alternate library
Others have published articles in the past detailing the substitution of the ATLAS library by doing the following to a basic R build (which was built with its bundled BLAS/LAPACK):
The basic idea is:
- copy
libatlas.so
toR_PREFIX/lib64/R/lib
- remove
libRblas.so
andlibRlapack.so
fromR_PREFIX/lib64/R/lib
- symlink
libRblas.so
andlibRlapack.so
tolibatlas.so
inR_PREFIX/lib64/R/lib
This copy of R is configured to use R_PREFIX/lib64/R/lib
to resolve shared libraries, so when executing the R
command, for example, the symlinks will lead the runtime linker to the ATLAS library when resolving BLAS/LAPACK functions.