Milan Bouchet-Valat
2012-Feb-10 15:15 UTC
[Rd] Out of date instructions to build R using MKL
Hi! I've been playing with MKL for a few days and I noticed the instructions in the R Installation Administration manual [1] no longer apply. It seems that since version 10.0 (the one used by the manual), libmkl_lapack.so has been renamed/split (although the official explanations seem to imply this was already the case in 10.0 [2]). As a consequence, the instructions for dynamic linking no longer work with the last version (2011-sp1). This is also the case of what is explained on several sites like [3] or [4]. The manual's instructions to link statically to MKL still work fine, though. I'm merely signaling this fact to more clued people, since I've not been able to get R to dynamically link to MKL. I'm always getting this notice during ./configure:> checking whether double complex BLAS can be used... noAnyways, one of the problems is also that it's no longer possible to make libRblas.so and libRlapack.so symlinks to the Intel libs, as they are split into several files. If nobody knows how or cares about to fix this ATM, a simple warning that the instructions are outdated would already improve the situation, as it took me some time to understand things had changed and I wasn't just being silly. ;-) (That said, I'm not convinced using an external BLAS/LAPACK is really interesting for standard desktops. Performances gains compared to default packages are incredible in benchmarks, but for real use cases multi-threading often makes things slower - at least for me, using gnm. I guess this is mostly interesting for very larges matrices, and not for many repeated small operations.) Regards 1: cran.r-project.org/doc/manuals/R-admin.html#MKL 2: software.intel.com/en-us/forums/showthread.php?t=81302 3: r-bloggers.com/compiling-64-bit-r-2-10-1-with-mkl-in-linux 4: rd.dnc.ac.jp/~otsu/lecture/RwithMKL.html
Yes, these instructions are no longer valid as there has been some reorganization of the mkl libraries. The path /opt/intel/mkl/10.0.3.020/lib/em64t/ is now /opt/intel/mkl/lib/intel64. Also, the only libraries that need to be included are: -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core The trick to getting rid of the "double complex BLAS" error is to use only the gnu compatible libraries (i.e. use mkl_gnu_thread instead of iomp5). I believe the intel-only libraries use a different convention to pass complex numbers between libraries built with fortran? Thankfully this check detects the error instead of crashing at run time. I used the following to build R-2.14.1 with MKL: export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64 ./configure --prefix=/opt/R-2.14.1 --enable-threads=posix --with-lapack --with-blas="-I/opt/intel/mkl/include -L/opt/intel/mkl/lib/intel64 -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -fopenmp -lpthread -lm" Although a highly tuned BLAS may not help much for many applications, I have seen several orders of magnitude performance improvement in some of my work that uses matrix operations heavily and others in my lab have experienced the same. Having R linked against MKL has been HUGELY important for me personally. A custom tuned ATLAS works well too but I find it frustrating that it needs to be re-tuned for each architecture I use (I tend to distribute jobs in a heterogeneous environment). Thanks! Elliott Forney On Fri, Feb 10, 2012 at 8:15 AM, Milan Bouchet-Valat <nalimilan at club.fr> wrote:> Hi! > > I've been playing with MKL for a few days and I noticed the instructions > in the R Installation Administration manual [1] no longer apply. It > seems that since version 10.0 (the one used by the manual), > libmkl_lapack.so has been renamed/split (although the official > explanations seem to imply this was already the case in 10.0 [2]). > > As a consequence, the instructions for dynamic linking no longer work > with the last version (2011-sp1). This is also the case of what is > explained on several sites like [3] or [4]. The manual's instructions to > link statically to MKL still work fine, though. > > I'm merely signaling this fact to more clued people, since I've not been > able to get R to dynamically link to MKL. I'm always getting this notice > during ./configure: >> checking whether double complex BLAS can be used... no > > Anyways, one of the problems is also that it's no longer possible to > make libRblas.so and libRlapack.so symlinks to the Intel libs, as they > are split into several files. > > If nobody knows how or cares about to fix this ATM, a simple warning > that the instructions are outdated would already improve the situation, > as it took me some time to understand things had changed and I wasn't > just being silly. ;-) > > (That said, I'm not convinced using an external BLAS/LAPACK is really > interesting for standard desktops. Performances gains compared to > default packages are incredible in benchmarks, but for real use cases > multi-threading often makes things slower - at least for me, using gnm. > I guess this is mostly interesting for very larges matrices, and not for > many repeated small operations.) > > Regards > > > 1: cran.r-project.org/doc/manuals/R-admin.html#MKL > 2: software.intel.com/en-us/forums/showthread.php?t=81302 > 3: > r-bloggers.com/compiling-64-bit-r-2-10-1-with-mkl-in-linux > 4: rd.dnc.ac.jp/~otsu/lecture/RwithMKL.html > > ______________________________________________ > R-devel at r-project.org mailing list > stat.ethz.ch/mailman/listinfo/r-devel