我正在尝试运行以下代码,使用IFORT 2016进行编译,链接MKL 11.3库:
program bug
implicit none
INCLUDE 'mkl.fi'
integer*4, parameter :: Npart=25
real(kind=8) :: u(1:Npart), lapackab(1:Npart,1:Npart)
integer*4 :: i
u=0.2d0
lapackab=0d0
do i=1,Npart
lapackab(i,i)=2d0
enddo
call DPOSV('L',Npart,1,lapackab,Npart,u,Npart,i)
write(*,*) "i=",i
end program
使用以下命令:
ifort -O0 -g -openmp -o file.o -c file.f90 -I/opt/share/INTEL/mkl/include
ifort -O0 -g -openmp file.o -o run -L/opt/share/INTEL/mkl/lib/ -I/opt/share/INTEL/mkl/include -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl
由于某些不明原因,代码在DPOSV期间发生了段错误。 我不知道为什么。说真的,甚至Valgrind也没有报道任何奇怪的事情。 有没有人对这个特殊的例程有同样的问题?
编辑:代码与LAPACK 3.6.1完美配合,但与MKL 11.3无关。我在英特尔支持论坛上发了帖子,但仍需要得到主持人的批准..
答案 0 :(得分:1)
您正在链接ILP64
版本的MKL,但该版本用于64位整数。您正在使用integer*4
,因此您的整数是32位(以及默认的整数)。使用MKL link advisor正确链接MKL。您可能需要LP64
版本。