与 Lapack 和 OpenMP 链接时出现分段错误



>当我链接以下代码时

PROGRAM MAIN
implicit none
integer(8), PARAMETER :: N=2**9
complex(8) ::A(N,N),B(N,N),C(N,N)
C=matmul(A,B)
end program MAIN

与Lapack和OpenMP通过以下方式:

gfortran test.f95 -O3 -Wall -g -std=f95 -cpp -I/usr/include/-L /usr/lib -lm -fopenmp -lpthread -lblas -llapack -fexternal-blas

我遇到分段错误。将数组的维度减小到 2**8 或删除 OpenMP 可消除错误。这是什么原因呢?

这是因为-fopenmp意味着-frecursive(试试那个)。这将导致数组被放置在堆栈上,并且出现堆栈溢出。默认情况下,数组将是静态的。

编译器在内部执行此操作(-fdump-tree-original):

MAIN__ ()
{
  complex(kind=8) a[262144];
  complex(kind=8) b[262144];
  complex(kind=8) c[262144];

你可以争辩说,没有必要影响主程序数组,因为主程序不是可重入的,但-frecursive这样做。如果您allocatable创建数组,它们不会受到影响。

相关内容

  • 没有找到相关文章

最新更新