在 2016年11月16日星期三 UTC+8上午12:49:13,Ángel de Vicente写道:
>
> Hi, 
>
> I wanted to try this out. My test Fortran module is the following, which 
> I compile with: ifort -mkl -o test_mod.so test_mod.f90 -shared -fpic 
> ,---- 
> | module testmodule 
> | 
> |   implicit none 
> | 
> |   double precision, external :: ddot 
> |   double precision, dimension(3) :: d,e 
> | 
> |   integer :: i 
> | 
> | contains 
> | 
> |   function dot_f() 
> |     double precision :: dot_f 
> | 
> |     do i = 1,3 
> |        d(i) = 1.0d0*i 
> |        e(i) = 3.5d0*i 
> |     end do 
> | 
> |     dot_f = ddot(3,d,1,e,1) 
> |   end function dot_f 
> | 
> | END module testmodule 
> `---- 
>
> and my test.jl 
> ,---- 
> | ccall((:testmodule_mp_dot_f_, "./test_mod"),Float64, ()) 
> `---- 
>
> If I try to run test.jl I get, as per the OP: 
> ,---- 
> | julia> include("test.jl")                                               
>                                                                             
>                                                     
> | Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so. 
> `---- 
>
>
> "Steven G. Johnson" <steve...@gmail.com <javascript:>> writes: 
> >     I got 
> >     Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so. 
> >     
> > Possibly you need to add the directory containing these files 
> > (/opt/intel/composer_xe_2015.0.090/mkl/lib or similar?) to your 
> LD_LIBRARY_PATH 
> > environment variable, so that the runtime linker knows where to find 
> them. 
>
> In this case this is not enough. 
>
> If you try to open the library directly you get: 
> ,---- 
> | julia> 
> Libdl.dlopen("/opt/intel/2016.0.1/compilers_and_libraries_2016.1.150/linux/mkl/lib/intel64/libmkl_avx2.so")
>  
>
> | ERROR: could not load library 
> | 
> "/opt/intel/2016.0.1/compilers_and_libraries_2016.1.150/linux/mkl/lib/intel64/libmkl_avx2.so"
>  
>                                                                             
> | 
> /opt/intel/2016.0.1/compilers_and_libraries_2016.1.150/linux/mkl/lib/intel64/libmkl_avx2.so:
>  
>
> | undefined symbol: mkl_dft_fft_fix_twiddle_table_32f                     
>                                   
> |  in dlopen(::String, ::UInt32) at ./libdl.jl:90 (repeats 2 times) 
> `---- 
>
> and nm confirms that those symbols are undefined: 
> ,---- 
> | [angelv@duna intel64]$ nm libmkl_avx2.so | grep fft_fix 
> |                  U mkl_dft_fft_fix_twiddle_table_32f 
> |                  U mkl_dft_fft_fix_twiddle_table_64f 
> `---- 
>
> and they are acutally defined in libmkl_core.so 
> ,---- 
> | [angelv@duna intel64]$ nm libmkl_core.so | grep fft_fix 
> | 00000000018e3020 D mkl_dft_fft_fix_twiddle_table_32f 
> | 00000000018e2800 D mkl_dft_fft_fix_twiddle_table_64f 
> | [angelv@duna intel64]$ 
> `---- 
>
>
> So, a workaround is to open libmkl_core.so first with the flag 
> RTLD_GLOBAL and then run the test.jl code: 
>
> ,---- 
> | julia> 
> | 
> Libdl.dlopen("/opt/intel/2016.0.1/compilers_and_libraries_2016.1.150/linux/mkl/lib/intel64/libmkl_core.so",Libdl.RTLD_GLOBAL)
>  
>                                                                   
> | Ptr{Void} @0x0000000003af6fa0                                           
>                                                                             
>                                                     
> |                                                                         
>                                                                             
>                                                     
> | julia> include("test.jl")                                               
>                                                                             
>                                                     
> | 49.0     
> `---- 
>
> But, to be honest, I don't fully understand if this will be enough for 
> all codes using MKL or perhaps other dependencies are there which forces 
> you to open more libraries manually with RTLD_GLOBAL. But at least it 
> points in the right direction. 
>
> Cheers, 
> -- 
> Ángel de Vicente 
> http://www.iac.es/galeria/angelv/           
>


You have solved the problem, that's nice. But maybe I should reconsider 
whether to use mkl in such a uncomfortable way. 

Reply via email to