[Rd] Problem building R with Intel MKL v10 BLAS

M Redmond redmond at stat.wisc.edu
Mon Feb 4 22:14:02 CET 2008


Ei-ji Nakama <nakama <at> ki.rim.or.jp> writes:

> 
> Hi.
> 
> 2008/1/25, Michael Braun <braunm <at> mit.edu>:
> > NO
> >
> > Hi.  I'm not sure if this is an R-help or R-devel problem, so I'm
> > starting here in the hope that someone can help (and willing to go to
> > the other list if it's more appropriate).  I think I am following all of
> > the instructions in the various manuals, but clearly I am missing something.
> >
> > I have an Intel EM64T Dell with 2 dual-core Xeon processors running Red
> > Hat EL5.  I would like to build R 2.6.1 with lots of debugging and
> > profiling options, and link it to the processor-specific Intel MKL blas.
> > The problem is that after I compile R, and do R CMD config BLAS_LIBS,
> > the response is
> > -L/usr/local/lib64/R/lib -lRblas.
> >
> > This tells me that R is not linked to the Intel BLAS at all.
> >
> > My config.site file for R is:
> >
> > #! /bin/sh
> >
> > R_PAPERSIZE=letter
> > CFLAGS="-g -O2 -p -pg"
> > CPPFLAGS="-I/opt/intel/mkl/10.0.1.014/include -I/usr/include
> > -I/usr/local/include"
> > LIBnn=lib64
> > BLAS_LIBS="-L/opt/intel/mkl/10.0.1.014/lib/em64t -Wl,--start-group
> > -lmkl_gf_lp64.so -lmkl_gnu_thread.so -lmkl_core.so -l -l -l -Wl,
> > --end-group -lguide -lpthread -lm"
> 
> I have an AMD 64x2 Debian(etch)
> $ gcc-4.2 -v
> Using built-in specs.
> Target: x86_64-linux-gnu
> Configured with: ../gcc-4.2.2/configure -v
> --enable-languages=c,c++,fortran,objc,obj-c++,treelang
> --prefix=/usr/local/gcc-4.2.2 --enable-shared --disable-multilib
> --with-system-zlib --without-included-gettext --enable-threads=posix
> --enable-nls --program-suffix=-4.2 --enable-__cxa_atexit
> --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr
> --enable-checking=release x86_64-linux-gnu
> Thread model: posix
> gcc version 4.2.2
> 
> MKL_LIB_PATH=/opt/intel/mkl/10.0.1.014/lib/em64t
> MKL="   -L${MKL_LIB_PATH}                               \
>         -Wl,--start-group                               \
>                 ${MKL_LIB_PATH}/libmkl_gf_lp64.a        \
>                 ${MKL_LIB_PATH}/libmkl_gnu_thread.a     \
>                 ${MKL_LIB_PATH}/libmkl_core.a           \
>         -Wl,--end-group                                 \
>         -liomp5 -lguide -lpthread -lgomp"
> 
> ./configure CC=gcc-4.2\
>         CXX=g++-4.2\
>         F77=gfortran-4.2\
>         FC=gfortran-4.2\
>         --with-lapack="$MKL" --with-blas="$MKL"
> 
> mkl_core seemed to want to cause libiomp5. dgemm gave a funny result
> in matrix of 1000x1000 if I did not link with real libiomp5.
> 
---
According to Intel, the V10 MKL is modular and therefore requires that all the
needed modules be on the library path in the correct order. This differs from V9
in that the single BLAS and LAPACK libraries could be directly substituted
(linked from) libRblas.so and libRlapack.so. To build, I needed to add the paths
into the  config.sh and make sure all the tests worked during R build. These are
the config.sh entries. I think the result is similar to what is noted above,
though I use the intel thread rather than the gnu thread. I tried both, and
don't recall that it made a difference:

--with-blas="-L/.../intel/mkl/10.0.1.014/lib/em64t -lRblas -lmkl_intel_thread
-lguide -lmkl_lapack -lmkl_core -lpthread" \
--with-lapack="-L/.../intel/mkl/10.0.1.014/lib/em64t -lRlapack
-lmkl_intel_thread -lguide -lmkl_lapack -lmkl_core -lpthread" \

where ... is the absolute path to your Intel MKL installation.

Hope that helps...

MJR



More information about the R-devel mailing list