您的位置:首页 > 其它

采用intel编译器并行编译执行杂化函数计算CP2K

2012-06-01 17:17 337 查看
在采用intel的ifort编译支持hybrid functional计算的CP2K时,尽管编译得到了cp2k.popt的可执行模块,但是在运行时常遇到如下的错误:

HFX_MEM_INFO would be printed out:

forrtl: severe (174): SIGSEGV, segmentation fault occurred

Image PC Routine Line Source

cp2k.popt 0000000001321BCE Unknown Unknown Unknown

经过多次的尝试,找到了一种解决办法,似乎是intel的ifort(至少11.1.072)还不支持ISO_C_BINDING。

下面将成功编译得到支持hybrid functional计算的CP2K的步骤给列出来,以作备份。

我用的编译器是intel的11.1.072/bin/intel64/ifort,并与openmpi/1.4.2绑定的mpif90,

用intel的编译器编译得到的fftw-3.2.2;

scalapck、lapack、blas库等用的是intel/11.1.072/mkl/lib/em64t带的。

1、下载libint-1.1.4.tar.gz,它可从
http://libint.valeyev.net/ http://sourceforge.net/projects/libint/files/v1-releases/
下载到。

下载解压后运行该目录下的./configure。整个命令如下,

./configure --prefix='被安装到的目录' --with-libint-max-am=5 --with-libderiv-max-am1=4 F77=ifort

这里“被安装的的目录”,根据自己的程序安装要求自行设置它的实际路径。

比如我实际的命令:

./configure --prefix='/home/zh/soft/libint-1.1.4' --with-libint-max-am=5 --with-libderiv-max-am1=4 F77=ifort

然后就是

make

make install

这样就将编译好的libint 1.1.4版本安装到了所指定的目录。

2、下载CP2K。


http://cp2k.berlios.de/download.html
下载最新版本的CP2K。

我目前安装的版本是CP2K version 2.2.263 (Development Version)和CP2K version 2.1.397 (Development Version)。

下载解压后,进入cp2k/tools/hfx_tools/libint_tools目录下,参考该目录里面的“README_LIBINT”,运行如下的命令:

g++ -O3 -c libint_cpp_wrapper.cpp -I/'path_to_libint_include'

由于我将libint库安装到了/home/zh/soft/libint-1.1.4目录中,我实际运行的命令为:

g++ -O3 -c libint_cpp_wrapper.cpp -I/home/zh/soft/libint-1.1.4/include

然后进入CP2K的arch目录,即cp2k/arch,编辑里面的Linux-x86-64-intel.popt,它的里面的设置为:

# by default some intel compilers put temporaries on the stack

# this might lead to segmentation faults is the stack limit is set to low

# stack limits can be increased by sysadmins or e.g with ulimit -s 256000

# furthermore new ifort (10.0?) compilers support the option

# -heap-arrays 64

# add this to the compilation flags is the other options do not work

# The following settings worked for:

# - AMD64 Opteron

# - SUSE Linux Enterprise Server 10.0 (x86_64)

# - Intel(R) Fortran Compiler for Intel(R) EM64T-based applications, Version 10.0.025

# - AMD acml library version 3.6.0

# - MPICH2-1.0.5p4

# - SCALAPACK library 1.8.0

#

#

CC = cc

CPP =

FC = mpif90

LD = mpif90

AR = ar -r

DFLAGS = -D__INTEL -D__FFTSG -D__parallel -D__BLACS -D__SCALAPACK -D__FFTW3 -D__LIBINT -D__HAS_NO_ISO_C_BINDING

CPPFLAGS =

INTEL_INC = /usr/apps/isv/intel/11.1.072/include

LIBINT_INC = $(HOME)/soft/libint-1.1.4/include

FFTW_INC = /usr/apps/free/fftw/3.2.2_i/include

FCFLAGS = $(DFLAGS) -I$(LIBINT_INC) -I$(INTEL_INC) -I$(FFTW_INC) -O2 -xW -heap-arrays 64 -funroll-loops -fpp -free

FCFLAGS2 = $(DFLAGS) -I$(LIBINT_INC) -I$(INTEL_INC) -O1 -xW -heap-arrays 64 -fpp -free

LDFLAGS = $(FCFLAGS) -I$(INTEL_INC)

FFTW_LIB = /usr/apps/free/fftw/3.2.2_i

INTEL_LIB = /usr/apps/isv/intel/11.1.072/mkl/lib/em64t

LIBINT = $(HOME)/soft/libint-1.1.4

LIBS =-L$(INTEL_LIB)/ -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core \

$(HOME)/soft/cp2k-2.1/tools/hfx_tools/libint_tools/libint_cpp_wrapper.o \

$(LIBINT)/lib/libderiv.a \

$(LIBINT)/lib/libint.a \

-lstdc++ \

$(FFTW_LIB)/lib/libfftw3.a

OBJECTS_ARCHITECTURE = machine_intel.o

graphcon.o: graphcon.F

$(FC) -c $(FCFLAGS2) $<

qs_vxc_atom.o: qs_vxc_atom.F

$(FC) -c $(FCFLAGS2) $<

编辑好了之后进入makefiles目录,然后运行如下命令:

make ARCH=Linux-x86-64-intel VERSION=popt

运行cp2k编译器来较慢,等10来分钟后,就可以得到可执行模块。

然后就是测试cp2k/tests/QS/regtest-hybrid目录里面的例子,比如CH3-hybrid-HSE06-lsd.inp,看能否正常运行。对于hybrid functional的计算,通常需要很大的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐