Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

dsyevr in fortran, MKL not working

leekeanloon
Beginner
429 Views
[cpp]      integer i,j,k,toff
      double precision , dimension(0:17):: ev
      double precision , dimension(1:18,1:18):: evect
      double precision , dimension(0:17,0:17):: ttt
      double precision work(18*64),dlamch
      integer iwork(18*10), status, support(2*18)
      
      toff=18
      do 120 i=0, toff-1
         do 120 j=9, toff-1
          ttt(i,j)=1.d0
          write(*,*) i,j,ttt(i,j)
 120  continue
 
      call dsyevr('v','a','l',toff,ttt,toff,0.d0,0.d0,0,0,dlamch('s'),
     1     i,ev,evect,toff,support,work,toff*64,iwork,toff*10,status)
[/cpp]

I compile with the option as followed:
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -c test.f -o test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -o honeyN3L80 test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread

i keep on getting segmentation fault. However, when I compile using the option -lblas -llapack, it work perfectly except that the program is much slower. Can anyone help me? Thanks.

0 Kudos
3 Replies
Gennady_F_Intel
Moderator
429 Views

it seems that your problem dealt with the new linkage model in MKL.

The linkage model of MKL was changed since MKL v.10 ( all info about linking your application with MKL, you can find in userguide ) .

Please try to use for linking em64t based lapack functions, the following lines as an example:

ifort -w test.f /opt/intel/mkl/ 10.0.4.023/lib/em64t/libmkl_intel_lp64.a -Wl,--start-group /opt/intel/mkl/10.0.4.023/lib/em64t/libmkl_intel_thread.a /opt/intel/mkl/10.0.4.023/lib/em64t/libmkl_core.a -Wl,--end-group -L/opt/intel/mkl/10.0.4.023/lib/em64t -lguide -lpthread -o test.out

--Gennady

0 Kudos
leekeanloon
Beginner
429 Views
Quoting - leekeanloon
[cpp]      integer i,j,k,toff
      double precision , dimension(0:17):: ev
      double precision , dimension(1:18,1:18):: evect
      double precision , dimension(0:17,0:17):: ttt
      double precision work(18*64),dlamch
      integer iwork(18*10), status, support(2*18)
      
      toff=18
      do 120 i=0, toff-1
         do 120 j=9, toff-1
          ttt(i,j)=1.d0
          write(*,*) i,j,ttt(i,j)
 120  continue
 
      call dsyevr('v','a','l',toff,ttt,toff,0.d0,0.d0,0,0,dlamch('s'),
     1     i,ev,evect,toff,support,work,toff*64,iwork,toff*10,status)
[/cpp]

I compile with the option as followed:
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -c test.f -o test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -o honeyN3L80 test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread

i keep on getting segmentation fault. However, when I compile using the option -lblas -llapack, it work perfectly except that the program is much slower. Can anyone help me? Thanks.


I now dynamically link the library through

-L/opt/intel/mkl/10.0.4.023/lib/em64t -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread
. It execute the subroutine dsyevr, but now it alert me that 'Parameter 6 was incorrect on entry to DSYEVR
', but I have checked the manual for dsyever and it should be correct. i do not get where the error comes from. thanks.

0 Kudos
leekeanloon
Beginner
429 Views
Quoting - leekeanloon
[cpp]      integer i,j,k,toff
      double precision , dimension(0:17):: ev
      double precision , dimension(1:18,1:18):: evect
      double precision , dimension(0:17,0:17):: ttt
      double precision work(18*64),dlamch
      integer iwork(18*10), status, support(2*18)
      
      toff=18
      do 120 i=0, toff-1
         do 120 j=9, toff-1
          ttt(i,j)=1.d0
          write(*,*) i,j,ttt(i,j)
 120  continue
 
      call dsyevr('v','a','l',toff,ttt,toff,0.d0,0.d0,0,0,dlamch('s'),
     1     i,ev,evect,toff,support,work,toff*64,iwork,toff*10,status)
[/cpp]

I compile with the option as followed:
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -c test.f -o test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread
ifort -O3 -fno-alias -heap-arrays 10 -align -132 -u -w90 -o honeyN3L80 test.o -L/usr/local/intel/mkl/10.0.4.023/lib/em64t -lguide -lmkl -lmkl_lapack -lpthread

i keep on getting segmentation fault. However, when I compile using the option -lblas -llapack, it work perfectly except that the program is much slower. Can anyone help me? Thanks.


i solve the problem already. Linking is one of the problem. Also, when I change the 'v', 'a', etc to uppercase, the program the work perfectly. Thanks a lot.

0 Kudos
Reply