从 MKL 11.3 库调用 DPOSV 例程期间出现分段错误
Segmentation fault during call to DPOSV routine from MKL 11.3 library
我正在尝试 运行 以下代码,使用 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 不兼容。我在英特尔支持论坛上发了一个 post,但它仍然需要版主批准..
您正在 link 正确地将 ILP64
version of MKL but that one is used for 64-bit integers. You are using integer*4
so your integers are 32-bit (and the default integers as well). Use the MKL link advisor 转换为 link MKL。您可能需要 LP64
版本。
我正在尝试 运行 以下代码,使用 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 不兼容。我在英特尔支持论坛上发了一个 post,但它仍然需要版主批准..
您正在 link 正确地将 ILP64
version of MKL but that one is used for 64-bit integers. You are using integer*4
so your integers are 32-bit (and the default integers as well). Use the MKL link advisor 转换为 link MKL。您可能需要 LP64
版本。