Compiling R with MKL: missing libmkl_gf_lp64.so

Compiling R with MKL: missing libmkl_gf_lp64.so

Hi there!

I am trying to compile R with the MKL BLAS. I followed those instructions, but I had a problem with configure:

configure:29696: checking whether double complex BLAS can be used
./conftest: error while loading shared libraries: libmkl_gf_lp64.so: cannot open shared object file: No such file or directory

And indeed, I have no such libmkl_gf_lp64.so installed, only the .a files:

find composer_xe_2013_sp1.0.080/mkl/lib/intel64/ -name "*blas*"
composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_blas95_lp64.a
composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_blas95_ilp64.a

How can I get the .so files, or compile R against the .a?

The machine is running SLES 11 (x86_64), and I downloaded the demo version of the MKL that I activated with the licence file I received by email. I installed all the components with the install.sh script.

Thanks,
Xavier

7 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Looks like the libmkl_gf_lp64 is not in your path.

The steps to build with gnu compilers are mentioned in this article

http://software.intel.com/en-us/articles/using-intel-mkl-with-r

Please make suer the MKL LIB path is correctly pointing to you mkl libs.

Vipin

 

Hi Xavier,

Could you please go to /opt/intel/composer_xe_2013_sp1.0.80 ( latest version is /opt/intel/composer_xe_2013_sp1.1.106/) / mkl/lib/intel64

to see if you have the libmkl_gf_lp64.a and libmkl_gf_lp64.so in the directory?   if no, then you may need reinstall MKL.

(you only list blas, it is true there are only blas95 static library, but no list all others ).

If you have only libmk_gf_lp64.a , then please use static link  as shown in the article.

Best Regards,

Ying

I cannot answer because "[My] submission has triggered the spam filter and will not be accepted".

I will try to split it up...

Quote:

Ying H (Intel) wrote:
Could you please go to /opt/intel/composer_xe_2013_sp1.0.80 ( latest version is /opt/intel/composer_xe_2013_sp1.1.106/) / mkl/lib/intel64

to see if you have the libmkl_gf_lp64.a and libmkl_gf_lp64.so in the directory?   if no, then you may need reinstall MKL.

Indeed I have only the .a there, alhtough other libraries have .so files as well:

(list triggers spam filter)

I repaired the installation, remove and reinstalled, but still have only the .a file.

Quote:

Ying H (Intel) wrote:
If you have only libmk_gf_lp64.a , then please use static link  as shown in the article.
Ok I tried that. It seemed to work (ie I see this in the config.log):

configure:29172: $? = 0
configure:29179: result: yes
configure:29696: checking whether double complex BLAS can be used
configure:29767: result: yes
configure:29787: checking whether the BLAS is complete

However it didn't seem to use the MKL: at least R is just as slow as with the standard BLAS, and uses only 1 core. Here is what I used:

$ echo $LD_LIBRARY_PATH
/home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64:/home/people/xavier/intel/composer_xe_2013_sp1.0.080/compiler/lib/intel64
$ echo $MKL
-L/home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64 -Wl,--start-group /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_gf_lp64.a /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_gnu_thread.a /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_core.a -Wl,--end-group -lgomp -lpthread
$ echo $MKL_LIB_PATH
/home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64
$ echo $OMP_LIB_PATH
/home/people/xavier/intel/composer_xe_2013_sp1.0.080/compiler/lib/intel64

$ ./configure --with-blas="$MKL" --with-lapack  --with-x=no --enable-memory-profiling --with-tcltk=no --prefix=/home/people/xavier/local

Any ideas on what could have gone wrong and how to check it?

Thanks!

I am sorry I can not send the output of ls, it is filtered by the spam filter...

Best Reply

Hi Xavier,

I received your message.  I saw  both libmkl_gf_lp64.a and libmkl_gf_lp64.so are there. So you may try both dynamic link and static link.

It seems you have build the static version. but haven't seen the performance improve.  Have you try the R bencharks as that article? What is the result without MKL and with MKL?

as static link, the check information is not too much.  You may check if you have mkl link message in config.log  or use ldd ./bin/exec/R and see if there is gomp library information?

Or try dynamic link again as you have the gf_lp64.so and intel thread library  as below.

 

MKL_LIB_PATH=/opt/intel/composer_xe_2013.3.163/mkl/lib/intel64

OMP_LIB_PATH=/opt/intel/composer_xe_2013.3.163/compiler/lib/intel64

export LD_LIBRARY_PATH=${MKL_LIB_PATH}:${OMP_LIB_PATH}  

 MKL=" -L${MKL_LIB_PATH}   -L${OMP_LIB_PATH}                \

       -Wl,--start-group                         \

          -lmkl_gf_lp64       \

           -lmkl_intel_thread    \

           -lmkl_core          \

      -Wl,--end-group                           \

       -liomp5 -lpthread"

11 ./configure --with-blas="$MKL" --with-lapack

then check the result of ldd ./bin/exe/R.

Best Regards,

Ying

This time it worked! I'm not quite sure what changed, but it is now properly linked!

$ ldd /home/people/xavier/local/lib64/R/bin/exec/R
        linux-vdso.so.1 =>  (0x00007ffff7ffe000)
        libmkl_gf_lp64.so => /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_gf_lp64.so (0x00007ffff78db000)
        libmkl_intel_thread.so => /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_intel_thread.so (0x00007ffff6840000)
        libmkl_core.so => /home/people/xavier/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_core.so (0x00007ffff5312000)
        libiomp5.so => /home/people/xavier/intel/composer_xe_2013_sp1.0.080/compiler/lib/intel64/libiomp5.so (0x00007ffff4ff9000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffff4da8000)
        libgfortran.so.3 => /usr/lib64/libgfortran.so.3 (0x00007ffff4a90000)
        libm.so.6 => /lib64/libm.so.6 (0x00007ffff4817000)
        libreadline.so.5 => /lib64/libreadline.so.5 (0x00007ffff45d4000)
        librt.so.1 => /lib64/librt.so.1 (0x00007ffff43cb000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007ffff41c7000)
        libgomp.so.1 => /usr/lib64/libgomp.so.1 (0x00007ffff3fb8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ffff3c44000)
        /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffff3a2e000)
        libquadmath.so.0 => /usr/lib64/libquadmath.so.0 (0x00007ffff37f7000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007ffff35af000)

And it clearly uses multiple cores. Thanks!

Leave a Comment

Please sign in to add a comment. Not a member? Join today