【问题标题】:Segmentation Fault while running VASP 5.4.1运行 VASP 5.4.1 时出现分段错误
【发布时间】:2016-10-24 02:26:08
【问题描述】:

所以我们正在尝试在 Ubuntu 14.04 LTS 上编译 VASP 5.4.1。遵循此处描述的类似安装步骤: How to compile VASP 5.4.1 for Linux Debian using the GNU compiler。但是,在测试 vasp 可执行文件(vasp_std 等)时,程序会因分段错误 - 无效内存引用错误而终止。

我们目前拥有的makefile.include是:

# Precompiler options
CPP_OPTIONS= -DMPI -DHOST=\"IFC91_ompi\" -DIFC \
         -DCACHE_SIZE=4000 \
         -DMPI_BLOCK=8000 -DscaLAPACK -Duse_collective \
         -DnoAugXCmeta -Duse_bse_te \
         -Duse_shmem -Dtbdyn

CPP        = gcc -E -P -C $*$(FUFFIX) >$*$(SUFFIX) $(CPP_OPTIONS)

FC         = mpif90
FCL        = mpif90

FREE       = -ffree-form -ffree-line-length-none

FFLAGS     =
OFLAG      = -O2
OFLAG_IN   = $(OFLAG)
DEBUG      = -O0

LIBDIR     = /usr/lib/x86_64-linux-gnu
BLAS       = -L$(LIBDIR) -lblas
LAPACK     = -L$(LIBDIR) -llapack
BLACS      = -L$(LIBDIR) -lblacs-openmpi -lblacsCinit-openmpi
SCALAPACK  = -L$(LIBDIR) -lscalapack-openmpi $(BLACS)

OBJECTS    = fftmpiw.o fftmpi_map.o  fftw3d.o  fft3dlib.o \
         /usr/lib/x86_64-linux-gnu/libfftw3.a
INCS       =-I/usr/include

LLIBS      = $(SCALAPACK) $(LAPACK) $(BLAS)

OBJECTS_O1 += fft3dfurth.o fftw3d.o fftmpi.o fftmpiw.o chi.o
OBJECTS_O2 += fft3dlib.o

# For what used to be vasp.5.lib
CPP_LIB    = $(CPP)
FC_LIB     = $(FC)
CC_LIB     = gcc
CFLAGS_LIB = -O
FFLAGS_LIB = -O1
FREE_LIB   = $(FREE)

OBJECTS_LIB= linpack_double.o getshmem.o

# Normally no need to change this
SRCDIR     = ../../src
BINDIR     = ../../bin

运行后:

mpirun -np 8 /home/<user>/VASP/vasp.5.4.1/bin/vasp_std

程序运行了一段时间,然后以一些分段错误消息终止(我上次运行它时它给出了 8 个!):

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7F62EE595777
#1  0x7F62EE595D7E
#2  0x7F62EDA95CAF
#3  0x4DE3EA in __nonl_MOD_spher
#4  0x637E84 in __msphpro_MOD_sphpro
#5  0xC1E013 in MAIN__ at main.f90:?

我们将不胜感激。

【问题讨论】:

  • VASP 是商业支持的代码。或许,您应该将您的问题发送至the VASP team
  • 谢谢。我们正在联系他们。

标签: segmentation-fault fortran mpi


【解决方案1】:

其实它应该和你的VASP编译无关,它取决于你Linux系统中的某个设置。我不确定这是否有效,请在命令行执行每个任务之前输入:

ulimit -s unlimited

【讨论】:

  • 如何确定问题出在堆栈溢出而不是内存访问错误?
  • 其实你是对的,这种可能性是存在的。但是使用VASP,如果有一些不正确的内存访问,程序会在开始时结束,在运行结束时遇到这样的错误报告是非常罕见的。
  • 恰恰相反。 Stack evorflow 错误在程序一开始就很常见。一般无效的内存访问随时可能发生。
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2016-08-06
  • 2023-04-03
相关资源
最近更新 更多