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

2024-03-24 10:58

本文主要是介绍采用intel编译器并行编译执行杂化函数计算CP2K,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在采用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的计算,通常需要很大的内存。

这篇关于采用intel编译器并行编译执行杂化函数计算CP2K的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841391

相关文章

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、