从MKL 11.3库调用DPOSV例程期间的分段错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从MKL 11.3库调用DPOSV例程期间的分段错误相关的知识,希望对你有一定的参考价值。

我正在尝试运行以下代码,使用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无关。我在英特尔支持论坛上发了帖子,但仍需要得到主持人的批准。

答案

您正在链接ILP64版本的MKL,但该版本用于64位整数。您正在使用integer*4,因此您的整数是32位(以及默认的整数)。使用MKL link advisor正确链接MKL。你可能需要LP64版本。

以上是关于从MKL 11.3库调用DPOSV例程期间的分段错误的主要内容,如果未能解决你的问题,请参考以下文章

在 python 的 c 扩展中包括外部共享英特尔的 mkl 库

Intel MKL(Math Kernel Library)

如何同时使用 MKL 的并行和串行版本?

转:调用clapack库注意事项

在 Python ctypes 中加载共享库期间出现分段错误(核心转储)

使用 activemq-cpp 库创建新线程期间的分段错误问题